更多
https://www.boxuegu.com/news/686.html
https://www.jianshu.com/p/7e0bd4708ba7
H5+原生开发=混合开发
将APP需要动态更新的一部分内容通过H5来实现,通过原生网页加载android控件webView或ios端的WKWebView,H5部分可以热更新,native通过版本号拉取服务端文件对比本地的版本号对比更新资源,同时技术上可以使用web技术栈开发,社区活跃,缺点是性能不好,对于复杂的页面或动画,频繁加载webview体验差
js+原生渲染=weex&react native
渲染时需要js和原生进行通信,依赖原生控件,不同平台需要单独维护,weex是vue语法,react-native是react框架
weex为例,跨端的原理在于,代码模式,编译过程,模板组件,数据绑定,生命周期等上层语法都是一致的,只有在最后,web平台和native平台对将virtual-dom的解析是不同的,当然也支持原生组件的封装和拓展,比如可以引入dow = weex.requireModule('dom')实现一些动画
例如:weex是js+原生开发,集成了vue框架,在此基础上进行虚拟dom的生成,将虚拟DOM渲染到 浏览器或者应用上,在浏览器上交给浏览器的主进程绘制,在应用上通过调用原生,将每一个组件中的div text标签都渲染成d-layout元素
flutter代表的自绘UI+原生
不依赖原生控件,自绘引擎是解决ui跨平台的最终方案,需要其他的系统能力调用仍然需要原生开发,flutter以dart语法开发,提供了丰富的组件、接口,用自己的高性能渲染引擎来绘制widget,但是不支持热更新和动态发码
vue前端框架
首先是全局的api为不同的平台添加相应的指令,在不同的平台(web还是weex)上,所支持的组件、指令或者平台一些特有的指令,比如浏览器inBrowser所需要的transition、show属性等