跨端技术:浅聊双线程原理和实现

小狐狸是什么:希望技术文章更有趣。我引入动物小伙伴作为我的同事们,一起探究代码和数据之美。希望之后出一本连年轻的小伙伴(小学生)都能懂技术故事书。

今天一进门,我看见小狐狸抱着她的三角脑袋在沉思。一边沉思一边还低声念叨。我倒了杯咖啡给她,询问她怎么回事。她看见我问她,耳朵耷拉下来了。我追问怎么回事,她用略带责备的口吻说,"到底为什么小程序要双线程这种逻辑,搞得麻烦死了。一点都不好用。还不如逻辑和渲染走一个线程"。

我把咖啡杯往她面前摞一摞说,你知道微信的双线程设计是怎么样的吗。她嘬了一口咖啡,打开了微信的官方文档。

developers.weixin.qq.com/ebook?actio...

她尤其指了一下下方这个架构图。

相比于浏览器的执行,webview(渲染) 和 JsCore (逻辑)是单独运行在两个线程,甚至可以是两个进程上的。JScore 可以有很多种实现方式。Web worker 就可以是一个 JSCore。JSCore 只需要提供一个标准的 JS 运行时环境即可。

小狐狸继续抱怨,我没懂为什么要这样设计。我思忖了一下,说你知道为什么 React 要设计 fiber 吗。狐狸说,因为要拆小逻辑的执行任务,减少单一任务过长导致渲染任务执行。那么双线程不就没这个问题了呗,我断言到。小狐狸点点头。我继续引导道,更多的进程和线程对操作系统意味着什么。更多的计算资源和存储资源可以用来做之前事情。事实上,渲染和逻辑分离可能才是最佳的应用解决方案。而非浏览器的单线程方案。

小狐狸沉下问,那么是不是我们需要大面积的改变我们的 H5 写法。来适应双线程的开发方式。

我回答:没有这个必要性。我们当前使用 vue3 来开发 H5。vue 的框架就非常好能改造成双线程的架构。比如下面这张图

开发者开发的 Vue 对象,我们能够很轻松把代码拆解成渲染和逻辑两块。渲染和 Vue 的渲染模块(如 diff, vm 管理的模块)扔给 webview。逻辑代码和管理模块扔到 JSCore 里就可以了。

小狐狸恍然大悟,思考了一会又绕绕头。记下来呢怎么更新,不会每个按钮都映射一个函数事件吧。我拍拍她的脑袋,随即把图片的右边数据通讯补齐了。

暂时无法在飞书文档外展示此内容

事实上,webview 只用发送当前用户操作了什么。JScore 只用当 data 对象更新了,告诉 webview data 有什么即可。执行操作对应的函数和 data 改变触发的视图更新都在渲染和视图内部完成。

当然还会遇到很多细节问题,比如我们如何管理这么多 vue component 并更新,如何解决 querySelector 的问题。我们可以之后再聊。

相关推荐
崔庆才丨静觅4 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60615 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了5 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅5 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅6 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅6 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment6 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅6 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊6 小时前
jwt介绍
前端
爱敲代码的小鱼6 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax