-
Notifications
You must be signed in to change notification settings - Fork 1.1k
galenlin edited this page Jan 27, 2016
·
8 revisions
随着HTML5的发布,Web入侵Native的脚步愈发紧凑。Hybrid的概念被街谈巷议,你可能会遇到:
- 又空降一个CTO,“效率这么低,我以前的团队都是用Hybrid”
- 又换了一个产品,“发布这么麻烦,怎么不用Hybrid?”
为什么有个“又”字?
但是我想说:“Hybrid根本就是裸的”,为什么?
- 从资源布局的角度:
平台 | 布局文件 | 布局文件格式 | 编译布局文件 | 渲染 |
---|---|---|---|---|
HTML | *.html | xml | × | WebView |
Android | *.xml | xml | √ | View |
iOS | *.xib | xml | √ | UIView |
- 虽然三者的布局文件格式都是xml,但是Android、iOS在编译打包时会对xml做压平处理,形成二进制的xml。
- HTML则是直接对未加处理的文本格式xml进行解析,再生成符合HTML标准的DOM树,再对之渲染。
如果你说处理文本跟处理二进制没什么区别,那我无话可说。
- 从加载代码的角度:
- Native用原生语言,编译期间生成了二进制的字节码(Byte code),在运行时可以直接被加载运行。
- HTML用Javascript脚本(字符串),需要在运行时通过内置的Javascript引擎加以解析,而后转成字节码运行。
因为Hybrid性能表现差,于是业界催生了Semi-Hybrid——半裸。
通俗点讲就是:创造一个自己的布局语言,用自己的代码解析成Native控件。
有几个知名的工程:
- Samurai-Native
- React-Native
- 淘宝App iOS版本(破解时发现:布局json,渲染TBLayout,有空了把我仿的开源)
但是缺点也很明显:
- 如果你不做编译,运行时还是直接对字符串操作
- 难以团队化
因为接入成本太高,首先我要学会你的新语言,再让我的成员学会它。
- 滞后风险
官方的新特性不定期发布,新语言可能要跟随做适配,但你等不了。
举个例子,在iOS5.0时代,我们有个项目用了BEE框架,但是到7.0的时候原生的UINavigationBar、UITabBar出了侧滑特效。用BEE无法满足,最后苦逼的重构回原生。
Semi-Hybrid虽然看起来很华丽,并确实如此,但是侵入性太高,想说爱你很难。
Hybrid虽然不堪,但至少保留了纯正的HTML/CSS/Javascript血统,与Web兼容,并可以应用在一些对性能要求比较低的界面。 这些界面通常是交互少的纯展示类界面,比如:
- 关于我们
- 帮助
- FAQ
决定了都用纯正的语言(Native + Html5),如何透明的打通二者应该是我们的诉求。而实现这步也就实现了跨平台。要做到这点,必须有几个标准: