我有次用亚洲地区的 HBuilder + MUI 架构合作开发,也有次 Cordova + React for Web 合作开发。那时手里的某App,已经开始并行采用 Cordova + React 和 React Native 依次合作开发 UI 层(方法论层标识符房屋建筑)。总之,都是非常大型应用领域,还不须要像
写的那样考量网页转换等难题……
我的推论是:坑、好大的坑、淡黑深坑。
Conques,只归纳出下列难题:
1. 操控性难题
先是动画电影。
不论是 CSS3 动画电影、却是 Canvas 动画电影,却是 JavaScript 操作形式 DOM 的动画电影,都卡;前者更为严重。中高档机极差,中低端机能卡成PPT的。我苏耀光 GIF,采用的电子设备是台糖P88,居鼠 CPU 。约莫是这种:
http://zsxsoft.qiniudn.com/upload_images/2015/08/201508158461_695.gif其二,是 DOM 操控性难题。
感谢 React 增添了 Virtual DOM,部份化解了局部性地区 DOM 创下时的操控性难题。但是,除非牵涉到非常大地区 DOM 预览,反而有Villamblard的操控性耗损(最后算出的结论却是要全数代替掉,多做了一步 Diff )。
即使操控性难题,Facebook 2012年离开了 HTML5 App 派系(
Facebook: “Betting on HTML5 Was a Mistake”)。但如今,却是没有甚么明显改善。也撷取一则该文,能看看坑:
移动端HTML5游戏操控性优化。
这里有个例子:微众银行 App 是 Cordova + Ionic + Angular。
微众很行app十分卡顿,大家觉得么?2. 兼容难题
先只算官方系统。Android系统的 WebView 一般随 Android 版本预览(总之,也能自己去 Play Store 预览),每个版本所支持的功能均不同。坑的是,在亚洲地区的环境下,基本不会再预览了。有的功能,在 PC 上对应版本的Chrome 是有的,到该版本 WebView 就没了。
比如说,XMLHttpRequest 的 onprogress在 Android 4.0.4 上不被支持。于是,针对这类系统,只能采用像之前对 IE 的 Hack 那样,用 iframe 来替代进度条。
再比如说,ECMAScript 6 被高版本 WebView 支持。如果合作开发者写惯了后,引入了 Symbol 等,又忘记了polyfill 。在低版本 WebView 就会出错。就像我这种:
<Table> doesnt support old browsers. · Issue #1685 · callemall/material-ui · GitHub接着呢,非常感谢 ROM 厂商乱改系统自带的 WebView ,从而导致在各种小细节上不同手机的显示效果或运算结论不同。更倒霉的是,有的甚至还会全网页混乱。
怎么化解?个人认为,像微信那样自带一个 X5,也许算是一个化解方案吧。
至于兼容难题的例子,却是微众银行好了:
https://www.v2ex.com/t/215728(与新版 iOS 9的 WebView 不兼容)
3. 调试难题
先吐槽:Android 5.0+ 的系统内的 WebView ,能用 Chrome for PC 来调试。但须要翻墙。
调试分调试 JavaScript 和界面两方面。
JavaScript 方面,如果 throw 出一个错误,很可能剩下的事情你都干不了了。手机端的表现是甚么操作形式都没用,也不会崩溃退出之类。在合作开发时,对于 JavaScript 报错,MUI 和 Cordova 均能通过 adb logcat 来检查报错;Release 后可就没办法找用户连 USB 了。weinre 等工具对于 JavaScript Debug 没啥用。
那 weinre 干啥用?只是让你看 DOM 层级或动态执行标识符罢了。这是 UI 方面的调试了。这部份的话,考量到兼容难题,自求多福吧……
Cordova 提供了 Ripple,倒的确是一个很不错的化解方案。但是并不能涵盖所有的手机……
4. 标识符安全性难题
正如.apk -> .dex -> .jar -> .class -> .java一下就能把标识符全数拿出来看那样,.apk -> .js 更为方便,解压一下就好了。于是,在 Release 前,必须 gulp / grunt 构建工作流,把 uglify 之类全数一股脑塞进去。这部份和做网页前端没啥区别,差别约莫只有不须要考量标识符切分等(毕竟没网络,全在本地)。
然而,这种的标识符,修改成本非常低。比如我做一个付费的本地游戏,只要简单地修改一下.js,轻轻松松破解验证等后重新打包回去,破解版游戏就做好了,比 Java 的简单多了。就算有 C++,我 js 不调用你,你又奈我何?没服务器验证的话,玩蛋去吧。
5. 功能难题
如果没 Native Code,一切HTML5 App都是空架子。所以,Java / Objective-C / C#仍然是必须学习的语言;Native App 如何合作开发也仍然是必修。比如下列标识符,是在 MUI 里用原生植物浏览器打开一个链接。
总之,Cordova 就得写 plugin 了,更为繁杂。
约莫是这种 _(:з」∠)_ 求轻喷。
(话说我tm在复习呢写答案合适么?!)