详解华为鸿蒙系统中的JS开发框架
前天鸿蒙终于发布了,开发者们也终于“沸腾”了。
升级鸿蒙系统步骤我也第⼀时间下载了源码,研究了⼀个晚上,顺带写了⼀个 hello world 程序,还顺⼿给鸿蒙⽂档提了 2 个 PR。
当然我最感兴趣的就是鸿蒙的 JS 框架 ace_lite_jsfwk,从名字中可以看出来这是⼀个⾮常轻量级的框架,官⽅介绍说是“轻量级 JS 核⼼开发框架”。
当我看完源码后发现它确实轻。其核⼼代码只有 5 个 js ⽂件,⼤概也就 300-400 ⾏代码吧。(没有单元测试)
runtime-core\src\core\index.js
runtime-core\src\observer\observer.js
runtime-core\src\observer\subject.js
runtime-core\src\observer\utils.js
runtime-core\src\profiler\index.js
从名字可以看出来,这些代码实现了⼀个观察者模式。也就是说,它实现了⼀个⾮常轻量级的 MVVM 模式。通过使⽤和 vue2 相似的属性劫持技术实现了响应式系统。这个应该是⽬前培训班的“三⼤⾃⼰实现”之⼀了吧。(⾃⼰实现 Promise,⾃⼰实现 vue,⾃⼰实现react)
utils ⾥⾯定义了⼀个 Observer 栈,存放了观察者。subject 定义了被观察者。当我们观察某个对象时,也就是劫持这个对象属性的操作,还包括⼀些数组函数,⽐如 push、pop 等。这个⽂件应该是代
码最多的,160 ⾏。observer 的代码就更简单了,五六⼗⾏。
⽽当我们开发的时候,通过 Toolkit 将开发者编写的 HML、CSS 和 JS ⽂件编译打包成 JS Bundle,然后再将 JS Bundle 解析运⾏成
C++ native UI 的 View 组件进⾏渲染。
“通过⽀持三⽅开发者使⽤声明式的 API 进⾏应⽤开发,以数据驱动视图变化,避免了⼤量的视图操作,⼤⼤降低了应⽤开发难度,提升开发者开发体验”。基本上就是⼀个⼩程序式的开发体验。
在 src\core\base\framework_min_js.h ⽂件中,这段编译好的 js 被编译到了 runtime ⾥⾯。编译完的 js ⽂件不到 3K,确实够轻量。js runtime 没有使⽤ V8,也没有使⽤ jscore。⽽是选择了 JerryScript。JerryScript 是⽤于物联⽹的超轻量 JavaScript 引擎。它能够在内存少于 64 KB 的设备上执⾏ ECMAScript 5.1 源代码。这也是为什么在⽂档中说鸿蒙 JS 框架⽀持 ECMAScript 5.1 的原因。
从整体看这个 js 框架⼤概使⽤了 96% 的 C/C++ 代码,1.8% 的 JS 代码。在 htm ⽂件中写的组件会被编译为原⽣组件。⽽
app_style_manager.cpp 和同级的七⼋个⽂件则⽤来解析 css,最终⽣成原⽣布局。
虽然在 SDK 中有⼏个 weex 包,也发现了 react 的影⼦。但是在 C/C++ 代码中并没有看到 yoga 相关的内容(全局搜索没发现)。⽽SDK 中的那些包仅仅是做 loader ⽤的,⼤概是为了在 webpack 打包时解析 htm 组件⽤的。将 htm 的 template 编译为 js 代码。
整体⽽⾔,⽐我预想的要好⼀些。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论