Skip to content

Hybrid

Hybrid APP(Webview)

利用安卓和 iOS 上的 webview 容器,APP 能够执行 html、css 和 js 脚本,展示 web 页面。通过 JSBridge 完成 H5 与 Native 的双向通讯,从而赋予 H5 一定程度的原生能力。

优势

  • 跨平台(优)
  • 开发周期短、成本低

劣势

  • 性能
  • input、video、audio 等安全限制
  • 不能自定义 input 拉起的键盘

Hybrid APP (Native UI)

在赋予 H5 原生 API 能力的基础上,进一步通过 JSBridge 将 js 解析成的虚拟节点树( Virtual DOM )传递到 Native 并使用原生渲染。

优势

  • 性能更高
  • 突破 webview 安全限制
  • 拥有更丰富的 native 能力

劣势

  • 布局是 css 的子集,会满足不了 Web 开发者日渐增长的需求
  • 开发组件需要客户端支持,对前端要求高

小程序

通过更加定制化的 JSBridge,并使用双 WebView 双线程的模式隔离了 JS 逻辑与 UI 渲染,形成了特殊的开发模式,加强了 H5 与 Native 混合程度,提高了页面性能及开发体验。

运行环境

运行环境逻辑层渲染层
iOSJavaScriptCoreWKWebView
安卓V8chromium 定制内核
小程序开发者工具NWJSChrome WebView

小程序双线程模型

渲染线程:由多个 webview 实现(因为小程序中存在多个页面,即多个渲染线程

逻辑线程:JavascriptCore(ios) / V8(android)

TIP

  • 逻辑层和视图层不能直接通信必须通过 Native 层通信。
  • 网络请求也由 Native 发送。
  • 逻辑层和视图层之间的工作方式为:数据变更通过 setData 驱动视图更新;视图层交互触发事件,然后触发逻辑层的事件响应函数,函数中修改数据再次触发视图更新

优势

  • 提升安全性: 禁止使用 DOM、BOM,能够限制用户跳转,随意改变 DOM 结构,获取用户敏感信息。

  • 提升性能: 在浏览器中,虽然渲染线程和逻辑线程是两个独立的线程,但是他们是互斥的,其目的为了防止渲染时对 DOM 操作,造成页面错乱。而小程序不允许控制 DOM,所以完全可以独立执行

劣势

  • 灵活性:不能使用 DOM、BOM
  • 开发体验:束手束脚

参考