| Name | Date | Size | #Lines | LOC | ||
|---|---|---|---|---|---|---|
| .. | - | - | ||||
| AppScope/ | 06-May-2025 | - | 34 | 32 | ||
| feature/ | 06-May-2025 | - | 12,731 | 11,752 | ||
| hvigor/ | 06-May-2025 | - | 34 | 33 | ||
| product/phone/entry/ | 06-May-2025 | - | 3,576 | 3,298 | ||
| screenshots/device/ | 06-May-2025 | - | ||||
| .gitignore | D | 06-May-2025 | 119 | 11 | 11 | |
| README.md | D | 06-May-2025 | 27.1 KiB | 455 | 351 | |
| build-profile.json5 | D | 06-May-2025 | 2.7 KiB | 124 | 123 | |
| hvigorfile.ts | D | 06-May-2025 | 843 | 22 | 5 | |
| hvigorw | D | 06-May-2025 | 2.1 KiB | 62 | 28 | |
| hvigorw.bat | D | 06-May-2025 | 2.1 KiB | 79 | 60 | |
| oh-package-lock.json5 | D | 06-May-2025 | 1 KiB | 28 | 27 | |
| oh-package.json5 | D | 06-May-2025 | 234 | 13 | 12 | |
| ohosTest.md | D | 06-May-2025 | 5.1 KiB | 30 | 27 |
README.md
1# 性能示例 2 3### 介绍 4 5本示例集成了条件渲染、动态加载以及HiDumper等场景来介绍如何提升应用性能。 6 7### 效果预览 8| 性能示例主页 | 9|---------------------------------| 10|  | 11 12HiDumper使用说明: 131.点击性能示例主页的**HiDumper**按钮,进入**HiDumper查看组件信息**场景页。 14 151.点击HiDumper查看组件信息场景页的**查看应用组件树**进入场景页。 16 172.点击HiDumper查看组件信息场景页的**查看if/else组件**按钮,在场景中点击**显隐切换**按钮,查看图片显示隐藏。 18 193.点击HiDumper查看组件信息场景页的**查看visibility属性**按钮,在场景中依次点击**Visible**、**Hidden**、**Visible**、**None**,查看图片显示和隐藏。 20 21常规加载页面使用说明: 22 231.点击性能示例主页的**StaticImport**按钮,进入**常规加载入口**场景页。 24 252.点击常规加载入口的**点击跳转常规加载案例**按钮,进入**常规加载主页**。 26 273.点击常规加载主页的**pageOne**按钮,进入**常规加载子页面**。 28 29动态加载页面使用说明: 30 311.点击性能示例主页的**DynamicImport**按钮,进入**动态加载入口**场景页。 32 332.点击动态加载入口页的**点击跳转动态加载案例**按钮,进入**动态加载主页**。 34 353.点击动态加载主页的**pageOne**按钮,进入**动态加载子页面**。 36 37ifOrVisibility使用说明: 38 391.点击性能示例主页的**ifOrVisibility**按钮,进入**合理选择条件渲染合显隐控制**场景页,其下有四组场景,八个页面。 40 412.分别点击**频繁切换:显隐控制页面** ,**频繁切换:条件渲染页面** ,进入频繁切换场景,可以通过点击**Switch visible and hidden**按钮,实现组件显示与隐藏间的切换,对比完成时延。 42 433.分别点击**首页渲染:条件渲染页面** ,**首页渲染:显隐控制页面**,进入首页渲染场景,可以通过点击**Show the Hidden on start**按钮,可以显示首页渲染时,初始被隐藏的组件,对比首页加载渲染完成时延。 44 454.分别点击**部分修改:条件渲染+容器限制页面**、**部分修改:条件渲染模块**,进入部分修改场景,可以通过点击**Switch Hidden and Show**按钮,可以对长列表中Text组件做部分修改,对比完成时延。 46 475.分别点击**复杂子树:条件渲染+组件复用页面**、**复杂子树:条件渲染页面**,进入复杂子树场景,可以通过点击**Change FlexAlign**按钮,可以Flex组件中子组件布局方式,对比布局修改完成时延。 48 49Grid高性能使用说明: 50 511.点击性能示例主页的**使用LazyFoEach,cachedCount,组件复用**按钮,进入**懒加载+cachedCount+组件复用页面**场景页。 52 532.点击性能示例主页的**使用columnStart**按钮,进入**使用columnStart,columnEnd页面**场景页,点击**scrollToIndex:1900**按钮,通过性能打点方式,查看滑动耗时。 54 553.点击性能示例主页的**使用GridLayoutOptions**按钮,进入**使用GridLayoutOptions页面**场景页,点击**scrollToIndex:1900**按钮,通过性能打点方式,查看滑动耗时。 56 57SmartPerfEditor使用说明: 58 591.打开显隐切换页面,点击**显示/隐藏Image**按钮,使用DrawingDoc录制回放功能抓取绘制信息。 60 61SmartPerfHost使用说明: 62 631.点击smartPerfHost示例主页的**SmartPerfHost**按钮,进入**SmartPerfHost查看组件信息**场景页。 64 652.点击SmartPerfHost查看FrameTimeline优化前场景页的**FrameTimeline优化前代码**按钮进入场景页。 66 673.点击SmartPerfHost查看FrameTimeline优化后场景页的**FrameTimeline优化后代码**按钮进入场景页。 68 694.点击SmartPerfHost查看AppStartup优化前场景页的**AppStartup优化前代码**按钮进入场景页。 70 715.点击SmartPerfHost查看AppStartup优化前场景页的**AppStartup优化后代码**按钮进入场景页。 72 73Trace使用说明: 74 751.点击性能示例主页的**Trace**按钮,进入**懒加载示例**场景页。 76 77BackgroundTask使用说明: 78 791.点击性能示例主页的**BackgroundTask**按钮,进入**后台任务**场景页,包括**短时任务**和**长时任务**两个子页面,同意授予通知权限。 80 812.点击**短时任务**按钮进入场景页,点击**开始计算**按钮执行任务。 82 833.点击**长时任务**按钮进入场景页,授予通知权限和定位权限,和点击**开启定位服务**按钮开启定位,点击**关闭定位服务**关闭定位。 84 85WaterFlow使用说明: 86 871.点击性能示例主页的**WaterFlow**按钮,进入**WaterFlow**场景页 88 89多线程共享内存页面使用说明: 90 911.点击性能示例主页的**MemoryShared**按钮,进入**多线程共享内存入口**场景页。 92 932.点击多线程共享内存入口页的**原子操作对比**按钮,进入**原子操作主页**。 94 953.点击多线程共享内存入口页的**锁的使用**按钮,进入**锁的使用子页面**。 96 97Native跨线程调用使用说明: 98 991.点击性能示例主页的**NativeThreadsCallJS**按钮,进入**Native跨线程调用**场景页 100 1012.点击Native跨线程调用页的**threadSafeTest**按钮,验证使用安全函数跨线程调用。 102 1033.点击Native跨线程调用页的**libuvTest**按钮,验证使用libuv跨线程调用。 104 105多线程间大数据传输使用说明: 106 1071.点击性能示例主页的**ThreadDataTransfer**按钮,进入**多线程数据传输入口**场景页。 108 1092.拖动**任务数**滑动条调整线程任务数,点击**传参方式**按钮,改变线程传参方式。 110 1113.拖动**饱和度**滑动条,调整图片饱和度。 112 113主线程和子线程的通信使用说明: 114 1151.点击性能示例主页面的**ThreadCommunication**按钮,进入**主线程和子线程通信**场景页。 116 1172.点击**场景一:独立的耗时任务**按钮,进入**独立的耗时任务**场景页,点击**加载图片**按钮。 118 1193.点击**场景二:多个任务执行结果统一返回**按钮,进入**多个任务执行结果统一返回**场景页,点击**加载图片**按钮。 120 1214.点击**场景三:TaskPool和主线程的即时通信**按钮,进入**TaskPool和主线程的即时通信**场景页,点击**加载图片**按钮。 122 1235.点击**场景四:Worker和主线程的即时通信**按钮,进入**Worker和主线程的即时通信**场景页,点击**将图片变成4个**按钮。 124 1256.点击**场景五:子线程同步调用主线程的接口**按钮,进入**子线程同步调用主线程的接口**场景页,点击**加载图片**按钮。 126 127Web组件提升性能使用说明: 128 1291.连接网络后点击性能示例主页的**WebPerformance**按钮,进入**Web组件提升性能**场景页。 130 1312.点击**常规Web首页**按钮进入常规加载Web首页。 132 1333.点击**进入网页**按钮进入常规Web组件页。 134 1354.点击**下一页**按钮进入常规Web切换页。 136 1375.点击**优化Web首页**按钮进入优化加载Web首页。 138 1396.点击**进入网页**按钮进入优化Web组件页。 140 1417.点击**下一页**按钮进入优化Web切换页。 142 143### 工程目录 144 145``` 146features 147|---/dynamicImport/src/main/ets // 动态加载HAR共享包 148|---|---/pages 149| | |---DynamicContentPageOne.ets // 动态加载子页面 150| | |---DynamicEntryView.ets // 动态加载入口页面 151| | |---DynaHome.ets // 动态加载主页 152|---/grid/src/main/ets // grid类功能HAR共享包 153| |---/view 154| | |---GridView.ets // 场景主页面模块 155| | |---GridLazyForEachView.ets // 懒加载+cachedCount+组件复用模块 156| | |---GridColumnStartView.ets // 使用columnStart,columnEnd模块 157| | |---GridLayoutOptionsView.ets // 使用GridLayoutOptions模块 158|---/hiDumper/src/main/ets // 列表类功能HAR共享包 159| |---/view 160| | |---ConditionView.ets // 显隐切换模块 161| | |---GridView.ets // 查看组件树模块 162| | |---HidumperHomeView.ets // 场景主页面模块 163| | |---VisibilityView.ets // 查看Visibility属性模块 164|---/ifOrVisibility/src/main/ets // 列表类功能HAR共享包 165| |---/util 166| | |---/Constants.ets // 常量 167| |---/model 168| | |---/SceneData.ets // 数据类型 169| | |---/SceneMsg.ets // 本地数据 170| |---/view 171| | |---HidumperHomeView.ets // 场景主页面模块 172| | |---/IfForStartUp 173| | | |---BetterUseIf.ets // 首页渲染:条件渲染模块 174| | | |---WorseUseVisibility.ets // 首页渲染:显隐控制模块 175| | |---/Reusable 176| | | |---AlignContentFlex.ets // Text子组件 177| | | |---IfWithoutReusable.ets // 复杂子树:条件渲染+模块 178| | | |---IfWithReusable.ets // 复杂子树:条件渲染+组件复用模块 179| | | |---MockComplexReusableSubBranch.ets // 模拟复用复杂子组件 180| | | |---MockComplexSubBranch.ets // 模拟复杂子组件 181| | |---/StackForRenderControl 182| | | |---RenderControlWithoutStack.ets // 部分修改:条件渲染+容器限制模块 183| | | |---RenderControlWithStack.ets // 部分修改:条件渲染模块 184| | |---/VisibilityForAnimate 185| | | |---BetterUseVisibility.ets // 频繁切换:显隐控制模块 186| | | |---WorseUseIf.ets // 频繁切换:条件渲染 187|---/smartPerfEditor/src/main/ets // 显隐类功能HAR共享包 188| |---/view 189| | |---SmartPerfEditorView.ets // 显隐切换模块 190|---/smartPerfHost/src/main/ets // SmartPerfHost功能HAR共享包 191| |---/view 192| | |---AppStartupBeforeOptimization.ets // 冷启动耗时优化前模块 193| | |---AppStartupAfterOptimization.ets // 冷启动耗时优化后模块 194| | |---FrameTimelineBeforeOptimization.ets // 丢帧测试优化前模块 195| | |---FrameTimelineAfterOptimization.ets // 丢帧测试优化后模块 196| | |---SmartPerfHostHomeView.ets // 场景主页面模块 197|---/staticImport/src/main/ets // 常规加载HAR共享包 198|---|---/pages 199| | |---StaticContentPageOne.ets // 常规加载子页面 200| | |---StaticContentPageTwo.ets // 常规加载子页面 201| | |---StaticEntryView.ets // 常规加载入口页面 202| | |---StaticHome.ets // 常规加载主页 203|---/ThreadCommunication/src/main/ets // 主线程和子线程通信 204|---|---/pages 205| | |---IconItemSource.ets // 图片信息类 206| | |---IconView.ets // 图片Item组件 207| | |---IndependentTask.ets // 独立的耗时任务页面 208| | |---MultiTask.ets // 多任务统一返回页面 209| | |---TaskSendDataUsage.ets // TaskPool和主线程的即时通信页面 210| | |---ThreadCommunicationHomePage.ets // 主线程和子线程通信入口页面 211| | |---WorkerCallGlobalUsage.ets // 子线程同步调用主线程的接口页面 212| | |---WorkerUsage.ets // Worker和主线程的即时通信页面 213|---/trace/src/main/ets // Trace功能HAR共享包 214|---|---/pages 215| | |---LazyForEachPage.ets // 懒加载示例场景页面 216|---|---/view 217| | |---IconView.ets // 懒加载示例场景子页面 218|---|---/viewmodel 219| | |---BasicDataSource.ets // 封装列表数据方法 220|---/backgroundTask/src/main/ets // backgroundTask类功能HAR共享包 221| |---/view 222| | |---BackgroundTaskHomeView.ets // 场景主页面模块 223| | |---TransientTaskView.ets // 短时任务页面 224| | |---LongTermTaskView.ets // 长时任务页面 225---/waterFlow/src/main/ets // waterFlow功能HAR共享包 226| |---/pages 227| | |---Index.ets // 场景主页面模块 228| | |---WaterFlowDataSource.ets // 数据源 229---/nativeThreadsCallJS/src/main/ets // native跨线程调用功能HAR共享包 230| |---/pages 231| | |---Index.ets // 场景主页面模块 232---/nativeThreadsCallJS/src/main/cpp // native跨线程调用功能native功能模块 233| |---/types 234| | |---hello.cpp // 场景native功能代码 235products/phone/entry/src/main/ets 236|---/entryability 237| |---EntryAbility.ts // 封装整个模块启用,监听Ability对应的窗口等逻辑 238|---/model 239| |---/DataType.ets // 数据类型 240| |---/MockData.ets // 本地数据 241|---pages 242| |---/dynamicImport 243| | |---DynamicEntryView.ets // 动态加载入口页面 244| | |---DynamicHome.ets // 动态加载主页 245| | |---DynamicContentPageOne.ets // 动态加载内容页 246| |---/grid 247| | |---GridPage.ets // 场景主页面 248| | |---GridLazyForEachPage.etss // 懒加载+cachedCount+组件复用页面 249| | |---GridColumnStartPage.ets // 使用columnStart,columnEnd页面 250| | |---GridLayoutOptionsPage.ets // 使用GridLayoutOptions页面 251| |---/hiDumper 252| | |---ConditionPage.ets // 显隐切换页面 253| | |---GridPage.ets // 查看组件树页面 254| | |---HidumperHomePage.ets // 场景主页面 255| | |---VisibilityPage.ets // 查看Visibility属性页面 256| |---/ifOrVisibility 257| | |---IfOrVisibilityPage.ets // 合理选择条件渲染首页 258| | |---AnimateBetterUseVisibility.ets // 频繁切换:显隐控制页面 259| | |---AnimateWorseUseIf.ets // 频繁切换:条件渲染页面 260| | |---IfBetterWithReusable.ets // 首页渲染:条件渲染页面 261| | |---IfWorseWithoutReusable.ets // 首页渲染:显隐控制页面 262| | |---RenderControlBetterWithStack.ets // 部分修改:条件渲染+容器限制页面 263| | |---RenderControlWorseWithoutStack.ets // 部分修改:条件渲染页面 264| | |---StartBetterUseIf.ets // 复杂子树:条件渲染+组件复用页面 265| | |---StartWorseUseVisibility.ets // 复杂子树:条件渲染页面 266| |---/smartPerfEditor 267| | |---SmartPerfEditorPage.ets // 显隐切换页面 268| |---/smartPerfHost 269| | |---AppStartupBeforeOptimizationPage.ets // 冷启动耗时优化前页面 270| | |---AppStartupAfterOptimizationPage.ets // 冷启动耗时优化后页面 271| | |---FrameTimelineBeforeOptimizationPage.ets // 丢帧测试优化前页面 272| | |---FrameTimelineAfterOptimizationPage.ets // 丢帧测试优化后页面 273| | |---SmartPerfHostPage.ets // 场景主页面 274| |---/staticImport 275| | |---StaticEntryView.ets // 常规加载入口页面 276| | |---StaticHome.ets // 常规加载主页 277| |---/backgroundTask 278| | |---BackgroundTaskPage.ets // 后台任务入口页面 279| | |---TransientTask.ets // 短时任务页面 280| | |---LongTermTask.ets // 长时任务页面 281| |---/ThreadCommunication 282| |---|---/workers 283| | |---|---Worker.ts // worker子线程 284| | |---IndependentTaskPage.ets // 独立的耗时任务页面 285| | |---MultiTaskPage.ets // 多任务统一返回页面 286| | |---TaskSendDataUsagePage.ets // TaskPool和主线程的即时通信页面 287| | |---ThreadCommunicationHomePage.ets // 主线程和子线程通信入口页面 288| | |---WorkerCallGlobalUsagePage.ets // 子线程同步调用主线程的接口页面 289| | |---WorkerUsagePage.ets // Worker和主线程的即时通信页面 290| |---/trace 291| | |---TracePage.ets // 懒加载示例首页 292| |---/ThreadDataTransfer 293| | |---ThreadDataTransferHomePage.ets // 线程间大数据传输首页 294| |---/waterFlow 295| | |---WaterFlowPage.ets // WaterFlow示例首页 296| |---/memoryShared 297| | |---AtomicsUsage.ets // 原子操作页面 298| | |---LockUsage.ets // 锁应用页面 299| | |---MemorySharedHome.ets // 多线程共享内存入口页面 300| |---/nativeThreadsCallJS 301| | |---NativeThreadsCallJS.ets // native跨线程调用示例首页 302| |---/webPerformance 303| | |---WebHomePage.ets // Web提升性能示例首页 304| | |---WebBrowserPage.ets // Web组件网页 305| | |---WebInitializedPage.ets // Web优化性能主页 306| | |---WebUninitializedPage.ets // Web常规主页 307| |---/Index 308|---/utils 309| |---Logger.ets // 封装整个日志 310 311``` 312 313### 具体实现 314 315* HiDumper场景模块 316 317 * 查看组件树 318 * 在页面上添加Grid,每个GridItem嵌套多个Stack,然后通过HiDumper抓取组件树信息。 319 * 源码链接:[GridView.ets](feature/hiDumper/src/main/ets/view/GridView.ets) 320 321 * 查看if/else组件 322 * 在页面上添加**显隐切换**按钮,添加一张图片,点击按钮后通过HiDumper抓取组件树信息。 323 * 源码链接:[ConditionView.ets](feature/hiDumper/src/main/ets/view/ConditionView.ets) 324 325 * 查看visibility属性 326 * 在页面上添加**Visible**、**Hidden**、**None**按钮,添加一张图片,点击按钮后通过HiDumper抓取组件树信息。 327 * 源码链接:[VisibilityView.ets](feature/hiDumper/src/main/ets/view/VisibilityView.ets) 328 329* Navigation常规加载页面模块 330 331 * 在Navigation组件加载内容页时,使用`import`常规加载子页面。 332 * 源码链接:[StaticHome.ets](feature/staticImport/src/main/ets/pages/StaticHome.ets) 333 334* Navigation动态加载页面模块 335 336 * 在Navigation组件加载内容页时,使用`await import`实现动态按需加载。 337 * 源码链接:[DynamicHome.ets](feature/dynamicImport/src/main/ets/pages/DynamicHome.ets) 338 339* IfOrVisibility四个场景,分别正反例,八个页面: 340 * 针对显示和隐藏间频繁切换的场景 341 * 反例:使用条件循环实现显示和隐藏间的切换; [WorseUseIf.ets](feature\ifOrVisibility\src\main\ets\view\VisibilityForAnimate\WorseUseIf.ets) 342 * 正例:使用显隐控制实现显示和隐藏间的切换; [BetterUseVisibility.ets](feature\ifOrVisibility\src\main\ets\view\VisibilityForAnimate\BetterUseVisibility.ets) 343 344 * 针对应用冷启动,加载绘制首页 345 * 反例:对于首页初始时,不需要显示的组件,通过显隐控制进行隐藏; [WorseUseVisibility.ets](feature\ifOrVisibility\src\main\ets\view\IfForStartUp\WorseUseVisibility.ets) 346 * 正例:对于首页初始时,不需要显示的组件,通过条件渲染进行隐藏; [BetterUseIf.ets](feature\ifOrVisibility\src\main\ets\view\IfForStartUp\BetterUseIf.ets) 347 * 针对反复切换条件渲染的控制分支,但切换项仅涉及页面中少部分组件的场景 348 * 反例:没有使用容器限制条件渲染组件的刷新范围; [RenderControlWithoutStack.ets](feature\ifOrVisibility\src\main\ets\view\StackForRenderControl\RenderControlWithoutStack.ets) 349 * 正例:使用容器限制条件渲染组件的刷新范围; [RenderControlWithStack.ets](feature\ifOrVisibility\src\main\ets\view\StackForRenderControl\RenderControlWithStack.ets) 350 351 * 针对反复切换条件渲染的控制分支,且控制分支中的每种分支内,组件子树结构都比较复杂的场景 352 * 反例:没有使用组件复用实现条件渲染控制分支中的复杂子组件; [IfWithoutReusable.ets](feature\ifOrVisibility\src\main\ets\view\Reusable\IfWithoutReusable.ets) 353 * 正例:使用组件复用实现条件渲染控制分支中的复杂子组件; [IfWithReusable.ets](feature\ifOrVisibility\src\main\ets\view\Reusable\IfWithReusable.ets) 354 355* 高性能Grid二个场景,三个页面: 356 * 针对Grid中使用懒加载,cachedCount,组件复用的场景 357 * 在页面上添加Grid,GridItem使用懒加载,设置cachedCount,同时对GridItem中的子组件使用组件复用; [GridColumnStartView.ets](feature\grid\src\main\ets\view\GridLazyForEachView.ets) 358 359 * 针对Grid中使用scrollToIndex滑动到指定位置的场景 360 * 反例:使用columnStart,columnEnd设置GridItem大小,使用scrollToIndex滑动到指定GirdItem,通过性能打点方式查看滑动耗时情况; [GridColumnStartView.ets](feature\grid\src\main\ets\view\GridColumnStartView.ets) 361 * 正例:使用GridLayoutOptions设置GridItem大小,使用scrollToIndex滑动到指定GirdItem,通过性能打点方式查看滑动耗时情况; [GridLayoutOptionsView.ets](feature\grid\src\main\ets\view\GridLayoutOptionsView.ets) 362 363* SmartPerfEditor一个场景,一个页面: 364 * 针对显示图片中查看是否存在冗余绘制的场景 365 * 在页面上添加显隐切换按钮,点击按钮后,显示一张图片,通过DrawingDoc录制回放功能抓取绘制信息; [SmartPerfEditorView.ets](feature\smartPerfEditor\src\main\ets\view\SmartPerfEditorView.ets) 366 367* SmartPerfHost页面模块 368 * 应用冷启动,加载绘制页面 369 * 应用优化前[AppStartupBeforeOptimization.ets](feature/smartPerfEditor/src/main/ets/view/AppStartupBeforeOptimization.ets) 370 * 应用优化后[AppStartupAfterOptimization.ets](feature/smartPerfEditor/src/main/ets/view/AppStartupAfterOptimization.ets) 371 * 列表场景丢帧问题优化 372 * 应用优化前[FrameTimelineBeforeOptimization.ets](feature/smartPerfEditor/src/main/ets/view/FrameTimelineBeforeOptimization.ets) 373 * 应用优化后[FrameTimelineAfterOptimization.ets](feature/smartPerfEditor/src/main/ets/view/FrameTimelineAfterOptimization.ets) 374 375* 后台任务页面模块 376 * 短时任务 377 * 申请短时任务,应用后台执行耗时计算任务 378 * 源码链接:[TransientTaskView.ets](feature/backgroundTask/src/main/ets/view/TransientTaskView.ets) 379 * 长时任务 380 * 模拟后台导航定位场景,申请定位类型长时任务,使用@ohos.geoLocationManager实现位置定位功能,必须在联网环境才能获取定位数据 381 * 源码链接:[LongTermTaskView.ets](feature/backgroundTask/src/main/ets/view/LongTermTaskView.ets) 382 383* 多线程共享内存页面模块 384 * 原子操作场景 385 * 使用原子或非原子操作,实现多线程操作累加器 386 * 源码链接:[AtomicsUsage.ets](feature/memoryShared/src/main/ets/pages/AtomicsUsage.ets) 387 * 锁应用场景 388 * 使用或不适用锁,实现多线程写入文件 389 * 源码链接:[LockUsage.ets](feature/memoryShared/src/main/ets/pages/LockUsage.ets) 390 391* 多线程间大数据传输页面模块 392 * 图片调整饱和度 393 * 通过不同参数,实现多线程修改图片 394 * 源码链接:[TreadUtil.ets](feature/ThreadDataTransfer/src/main/ets/utils/TreadUtil.ets) 395 396* Web提升性能页面模块 397 * 常规场景 398 * 使用Web组件常规实现网页加载 399 * 源码链接:[WebUninitializedPage.ets](feature/webPerformance/src/main/ets/pages/WebUninitialized.ets) 400 * 优化场景 401 * 使用预加载预连接提升web性能 402 * 源码链接:[WebInitializedPage.ets](feature/webPerformance/src/main/ets/pages/WebInitialized.ets) 403 404* 主线程和子线程间的通信 405 * 将独立的耗时任务放在子线程中执行 406 * 使用TaskPool实现 407 * 源码链接:[IndependentTask.ets](feature/ThreadCommunication/src/main/ets/pages/IndependentTask.ets) 408 * 多个任务一并返回结果 409 * 使用TaskPool+TaskGroup实现 410 * 源码链接:[MultiTask.ets](feature/ThreadCommunication/src/main/ets/pages/MultiTask.ets) 411 * Task和主线程的数据通信 412 * 使用TaskPool中的sendData()和onReceiveData()接口实现 413 * 源码链接:[TaskSendDataUsage.ets](feature/ThreadCommunication/src/main/ets/pages/TaskSendDataUsage.ets) 414 * 子线程同步调用主线程的接口 415 * 在Worker中使用callGlobalCallObjectMethod()接口实现 416 * 源码链接: 417 * [WorkerCallGlobalUsage.ets](feature/ThreadCommunication/src/main/ets/pages/WorkerCallGlobalUsage.ets) 418 * [Worker.ts](product/phone/entry/src/main/ets/pages/ThreadCommunication/workers/Worker.ts) 419 * Worker和主线程的数据通信 420 * 使用Worker的postMessage()和onmessage()接口实现 421 * 源码链接: 422 * [WorkerUsage.ets](feature/ThreadCommunication/src/main/ets/pages/WorkerUsage.ets) 423 * [Worker.ts](product/phone/entry/src/main/ets/pages/ThreadCommunication/workers/Worker.ts) 424 425### 相关权限 426 427ohos.permission.INTERNET 428ohos.permission.LOCATION 429ohos.permission.LOCATION_IN_BACKGROUND 430ohos.permission.APPROXIMATELY_LOCATION 431ohos.permission.KEEP_BACKGROUND_RUNNING 432 433### 依赖 434 435不涉及。 436 437### 约束与限制 438 4391.本示例已适配API version 10版本SDK,SDK版本号(API Version 10 Release),镜像版本号(4.0Release)。 440 4412.本示例需要使用DevEco Studio 版本号(4.0Release)及以上版本才可编译运行。 442 443### 下载 444 445如需单独下载本工程,执行如下命令: 446 447``` 448 449 git init 450 git config core.sparsecheckout true 451 echo code/Performance/PerformanceLibrary/ > .git/info/sparse-checkout 452 git remote add origin https://gitee.com/openharmony/applications_app_samples.git 453 git pull origin master 454 455```