鸿蒙应用开发-ArkTS

63 阅读3分钟

前言

个人简述对自己学习ArkTs语言模块的简述,如有错误还望多多包涵指正

ArkTs语言模块学习总结

首先介绍了对 xml、buffer 的基本支持,我也从中第一次正式的了解了一下缓冲区的概念,属于内存的空间的一部分,用于将磁盘的数据或者未写入磁盘的数据 放入缓冲区以待将来处理,如果不放入内存的话每一次都进行磁盘操作将大大的影响执行效率。

针对容器类库做了扩展

如线性类库ArrayList、List、LinkedList、Queue、Deque、Stack、Vector

还有非线性类库 HashMap、HashSet、TreeMap、TreeSet、LightWeightMap、LightWeightSet、PlainArray

并发处理

异步 Promise、async、await 与多线程 TaskPool、Worker

异步

异步即当同步执行到此位置时暂时挂起等待任务空闲执行,如果进行大量计算会阻塞主线程UI的渲染,所以个人认为仅适用于做一些对外的处理,而不是对内的大量计算

但是多线程TaskPool、Worker 这方面就解决了对内的大量计算的问题

TaskPool

TaskPool 使用装饰器 @Concurrent 是由系统设计出的任务池,系统将通过配比来决定执行的时机与顺序乃至处理资源的扩容与否,但针对执行耗时限制了时长 最大3分钟,但是异步、网络、文件读写等不纳入此耗时,超过则将强制退出防止个人错误使用场景。

Worker

自定义线程处理任务,没什么好说的,就像你自己的专属区域为所欲为一样,当然幻想从自己房间内去抢银行(主线程)的"钱"那是不现实的,可以套娃。

线程的通信问题

线程通信时的数据交换是最大的问题,共享内存会导致脏操作,独立内存又涉及到大数据传输的窘境,默认都是独立内存使用序列化与反序列化传输,这样的好处即封闭性好,缺点即数据量会造成性能开销成指数上升,于是又继而推出了 Sendable 数据,传引用数据共享数据以减少数据传输的性能开销,而至于谁能操作怎么操作,锁与不锁冻结与否等问题就是高级操作此不进行过多的阐述。

模块处理

针对模块化设计,提到了Rollup打包工具看样子部分应该是按照Rollup的模块化打包

引入个人只愿意使用 esModule 其他的属于早先提出esModule普及以后就显的很尴尬了。

动态import

动态 import 如果 值为常量不需要特殊配置,如果值为变量且必须使用变量模式则需要在 module模块中的 build-project.json5文件中 配置 buildOption下arkOption下的runtimeOnly 配置

使用包变量引用配置 packages:["package"]

相对路径变量 配置 sources:['../aa'] 此路径必须是针对build-project.json5的相对路径

延迟加载lazy

后续为了优化冷启动所于 es2018 lazy 延迟加载 用到时才执行加载模块,后面针对 Navtive 等原生 或者 Node-Api的逻辑 此还不懂就不阐述了

最后再说两个我懂的

  1. 混淆加密 obfuscation 下的 ruleOption 的混淆加密配置
  2. build-project.json5 中 buildOption 下的 arkOption 下的 types 全局类型引入,这样即可以不用再每个文件都单独去引用类用。

我看完以后对使用ArkTs的期待也多了起来,这些按照我的理解是扩展了ts、js的能力。

再下一个就是到ArkUI框架