明天鸿蒙终于公布了,开发者们也终于“沸腾”了。
源码托管在国内出名开源平台码云上,https://gitee.com/openharmony
我也第一工夫下载了源码,钻研了一个早晨,顺带写了一个 hello world 程序,还棘手给鸿蒙文档提了 2 个 PR。
当然我最感兴趣的就是鸿蒙的 JS 框架 ace_lite_jsfwk,从名字中能够看进去这是一个十分轻量级的框架,官网介绍说是“轻量级 JS 外围开发框架”。
当我看完源码后发现它的确轻。其外围代码只有 5 个 js 文件,大略也就 300-400 行代码吧。(没有单元测试)
- runtime-coresrccoreindex.js
- runtime-coresrcobserverobserver.js
- runtime-coresrcobserversubject.js
- runtime-coresrcobserverutils.js
- runtime-coresrcprofilerindex.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 进行利用开发,以数据驱动视图变动,防止了大量的视图操作,大大降低了利用开发难度,晋升开发者开发体验”。基本上就是一个小程序式的开发体验。
在 srccorebaseframework_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 代码。
整体而言,比我料想的要好一些。