今天鸿蒙终于发布了,开发者们也终于“沸腾”了。

源码托管在国内知名开源平台码云上,https://gitee.com/openharmony

我也第一时间下载了源码,研究了一个晚上,顺带写了一个 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 代码。

整体而言,比我预想的要好一些。

*转载原博客原址:https://blog.csdn.net/vCa54Lu0KV27w8ZZBd/article/details/108525325*

鸿蒙系统中的 JS 开发框架相关推荐

  1. 鸿蒙系统的结构图,一图看懂鸿蒙系统中的JS开发框架!

    原标题:一图看懂鸿蒙系统中的JS开发框架! " 前端这两年玩起来了三国杀,Vue,React,Angular 三足鼎立,其中 Vue 派系在国内打的 Angular 找不到北了. 因此,小程 ...

  2. 奇舞周刊第 363 期:鸿蒙系统中的 JS 开发框架

    记得点击文章末尾的" 阅读原文 "查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 硬核看房利器--Web 全景的实现 从文字到图片到声音再到视频,是目前所广泛使 ...

  3. 揭秘鸿蒙系统中的 JS 开发框架

    作者 | justjavac 来源 | justjavac 今天鸿蒙终于发布了,开发者们也终于"沸腾"了. 源码托管在国内知名开源平台码云上,https://gitee.com/o ...

  4. harmonyos con,鸿蒙HarmonyOS系统中的JS开发框架

    HarmonyOS开源至今已经一个多月,源码托管在国内知名开源平台码云上,https://gitee.com/openharmony . 我最感兴趣的就是JS 框架 ace_lite_jsfwk,从名 ...

  5. 如何在鸿蒙系统中移植 Paho-MQTT 实现MQTT协议

    MQTT 是当前最主流的物联网通信协议,需要物联网云平台,例如华为云.阿里云.移动OneNET都支持mqtt.而Hi3861则是一款专为IoT应用场景打造的芯片.本节主要讲如何在鸿蒙系统中通过移植第3 ...

  6. Kanzi制作的应用能在鸿蒙系统中运行吗?

    物联网技术近年来得到了长足的发展和普及,其实际应用包括智能家居.智慧交通.无人驾驶等.而随着这些的广泛应用,要实现万物互联,就需要一种新的操作系统. 这时候,鸿蒙出现了! 图片来自网络 01 如果说2 ...

  7. 苹果遭集体诉讼;华为或年底推出鸿蒙系统中低端智能手机;Facebook雇人记录用户语音通话以改善AI技术……...

    戳蓝字"CSDN云计算"关注我们哦! 嗨,大家好,重磅君带来的[云重磅]特别栏目,如期而至,每周五第一时间为大家带来重磅新闻.把握技术风向标,了解行业应用与实践,就交给我重磅君吧! ...

  8. 鸿蒙系统中的 WebView 加载H5页面出现net::ERR_CLEARTEXT_NOT_PERMITTED的解决方法

    目前在学习鸿蒙系统开发相关的应用,在加载H5页面的时候,在页面上显示出现这也错误提示 net::ERR_CLEARTEXT_NOT_PERMITTED,百度了一番,显示的结果都是在安卓系统上的解决办法 ...

  9. web系统中使用js调用activex打印费用报销单

    此单据以凭证纸大小打印 var printer = new ActiveXObject("TPrint.mPrinter"); 打印之前需要选择打印机js调用 function s ...

最新文章

  1. 单链表的创建示意图, 显示单向链表的分析
  2. android自动更新列表,Android数据库表结构自动升级
  3. 实用程序类的OOP替代
  4. 计算机操作系统原理教程与实训(目录)
  5. 关于“就地颠倒句子里的词”面试题
  6. 网页宽高clientWidth clientHeight获得数值不对的问题
  7. 苹果正式发布自研 M1 处理器;神州数码回应:未与华为就荣耀出售达成任何协议​;Ant Design 4.8.1发布|极客头条
  8. linux tomcat 进程杀掉_Linux下启动停止查看杀死Tomcat进程
  9. 神州数码DCWS学习日志
  10. paip兼容windows与linux的java类根目录路径的方法
  11. 巨牛,访问github速度加快数倍
  12. 第八章 DirectX 3D模型加载和骨骼动画(上)
  13. 步进电机基础及工作原理
  14. 如何查看Safari浏览器network里Request的Payload
  15. Tcp四次挥手谁需要等待,为什么等待时间为2MSL
  16. 安装oracle客户端此先决条件,xp系统下oracle 11g客户端安装先决条件检查全部失败...
  17. JavaScript执行机制(彻底弄懂宏任务微任务)
  18. 如何添加装饰螺纹线规格
  19. 硬盘格式化以后文件还能恢复吗?
  20. mysql between and 日期

热门文章

  1. 火狐怎么放大页面?火狐浏览器页面放大技巧
  2. win7系统怎么打开屏幕键盘
  3. 在浏览器中输入网址总是打开同一个网站怎么回
  4. 轮播高度_Qt编写自定义控件24-图片轮播控件
  5. nacos初探--作为配置中心
  6. Java 中访问路径的问题
  7. java自动识别验证码_Java使用OCR技术识别验证码实现自动化登陆方法
  8. java 数字组合_java解决数字组合问题
  9. oracle连接数达不到上限,Oracle超出最大连接数问题及解决(转)
  10. android 按钮顶级效果_Android 源码之button高亮效果