是某天群里有朋友问一个问题引起的:看了之后,整理了一下,在这里分享给大家。这是从client的开发过程说起的;在移动互联网刚刚兴起原生开发的时候,最初的开发模式是通过swift或者java开发原生应用,加上一些网页跳转处理,ios用的是UIWebView(ios8之后增加了WKWebView),android用的是webview;这个时候商业模式不是特别复杂,用户也没有那么多,迭代时间的长短也不是特别强。随着业务的发展,这种开发模式逐渐遇到了问题。业务逐渐变大,原生开发需要更多的人员。业务变得更加复杂,多端功能开发完全重复。iosreview和release的时间限制,可能只是UI的小修改,需要重新re-releasehybrid(native+H5)。基于以上问题,出现了类似于PhoneGap和Ionic的hrbrid应用。打包处理成webview,最终的浏览操作其实就是h5,但是这个过程中h5可以调用native函数,h5调用native函数的底层概念叫做jsbridge,或者说jsbridge是native和h5通信的一个实现过程.PhoneGap、Ionic等应用的核心就是实现了这样一个过程,并将接口暴露出来,调用上层h5即可;简单来说,PhoneGap框架的流程就是以下三步:1.js通过提示接口向android原生发送消息2.android本地拦截WebChromeClient对象的onJsPrompt函数并拦截消息3.android本地拦截后消息,通过Pluginmanager分发消息给目的插件,同时通过jsMessageQueue收集需要返回给js的数据;参考网上的一个PhoneGap底层框架的类图来看看吧~~但是这种模式依赖于WebView的解析和渲染效率。在硬件不死不硬的前几年,h5的渲染和交互不是特别友好,会有卡顿;RN、weex(DSL)由于hybrid、一套多用途、h5发布不需要review的因素,facebook研究了处理对应模式的框架,处理了影响性能的渲染步骤,无论是RN还是Weex,它们的开发语言都是js、html、css,但是在编译的时候,比如RN转换成对应的VirtualDOM后,一套将virtualDOM转换成native组件的机制是在native底层实现。这个过程就是将虚拟DOM转换成类似JSON的语言形式,最后通过自身的解析方式实现为原生组件。这样性能自然会好很多,但是这个实现类似于JSON,也可以叫做DSL,sql语句其实也可以是DSL,包括html也可以看成是一套DSL语言。在ios中有一个JavaScriptCore框架,通过它可以实现JS和OC(通过它可以调用和渲染原生模块)。以上问题也通过本文进行了简要介绍。更深入的东西还需要不断学习;同步更新
