Skip to content
galenlin edited this page Jan 18, 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在App开发眼里就是个____。

因为Hybrid性能表现差,于是业界催生了Semi-Hybrid——半裸。

通俗点讲就是:创造一个自己的布局语言,用自己的代码解析成Native控件

有几个知名的工程:

  1. Samurai-Native
  2. React-Native
  3. 淘宝App iOS版本(破解时发现:布局json,渲染TBLayout)

但是缺点也很明显:

  1. 如果你不做编译,运行时还是直接对字符串操作
  2. 难以团队化

因为接入成本太高,首先我要学会你的新语言,再让我的成员学会它。

回到现实

Semi-Hybrid虽然看起来很屌,但是侵入性太高。

Hybrid虽然不堪,但至少保留了纯正的HTML/CSS/Javascript血统,与Web兼容,并可以应用在一些对性能要求比较低的界面。

这些界面通常是没有交互的纯展示类界面,比如:

  • 关于我们
  • 帮助
  • FAQ

无缝连接

实现这步也就实现了跨平台。而要做到这点,必须有几个标准: