引子
人的命运啊,当然要靠自我奋斗,但有时有也要考虑历史的进程。在夜深人静的时候也会问自己,我一个 iOS 开发怎么就跑来写前端了?
起
我作为一个 iOS
开发,在最近一年的时间里马不停蹄地学了 HTML
、CSS
、JavaScript
、AngularJS
,然后在此基础上才有足够的知识储备去学习 Ionic 这个基于前端技术的混合开发框架。做了半年之后又发现公司项目的原生部分是基于 C#
写的,当时真是有日了动物园的感觉。后来不那么忙,就索性把 Xamarin 这个用 C#
写的混合开发解决方案也撸了一把 。当然,学习这个之前,还是要先去写了几天 C#
作为知识储备。所以这过去的一年,我基本上就跟混合开发卯上了。
承
目前主流的混合开发解决方案我算是都有了解过,最有名的大概就是 Facebook
推出的 React Native :
国内阿里推出过 Weex :
豆瓣也推出了自己的混合开发解决方案 Rexxar :
可能还有其他的解决方案,后面提到的三个, RN
、 Weex
、 Rexxar
原理都大同小异,在原生层的基础上嵌入 UIWebView
,通过各种 JavaScript
的配合完成与原生层的交互。总的来说,是比较传统意义上的混合开发,以原生层为基础,在上面迭代开发。但是一开始说的两个,Ionic
和 Xamarin
,这两个是与上面提到的三个截然不同,属于两个极端。
转
Ionic
作为一个完全基于前端技术的移动端跨平台解决方案,开发者几乎完全不需要写任何原生代码,表示层、业务逻辑层以及数据持久化层都是通过 HTML
、CSS
、AngularJS
实现的,比较适合一些小型的、业务逻辑简单、对原生 API 依赖较少的项目。
混合开发最让人担忧的可能就是性能问题了,上面提到的三种比较传统的混合开发在性能上虽然也不能与原生相匹敌,但是换取了更灵活的业务模式、更快速的开发效率、更多的代码复用、更便捷的 Bug
修复方式。而 Ionic
作为一个完全的异类,用于小型项目时性能可以匹敌原生的,但是 UI 确实跟原生差距很大,不过他们现在发布了二代,界面的效果应该有些提升,不过他们把 AngularJS V1
换成了 V2
,而 V2
版本,讲道理来说,相当于把 V1
重写了。哈哈哈。所以又加大了学习成本。不过,话说 AngularJS V2
版本长得更像 React
和 TypeScript
了。
Xamarin
作为一个完全基于 C#
的移动端跨平台解决方案,通过 Xamarin
你可以开发 iOS、Android、WP应用,同时可以复用大部分的代码。如果需要用到很多原生的 API,这个框架也可以满足,因为它丧心病狂地用 C# 重写了 iOS SDK 和 Android SDK 的全部代码!而且是所有在用版本!所以我觉得它的目标是另起炉找,取代 iOS 和 Android 原生开发,而不是像传统混合开发那样依附于原生的基础上存在。另外, Xamarin
也可以用来开发 Mac 应用,所以它不但适用于移动端,同样适用于桌面端。
合
当然,除了求助于混合开发,也有人把目光转向了热更新,比如微信。微信 iOS 团队负责人 bang 开源了自己写的用于 iOS 的热更新方案 JSPatch,这个项目在 GitHub 上目前已经将近 9000 Star 了。
JSPatch 可以让你用 JavaScript 书写原生 iOS APP。只需在项目引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,获得脚本语言的优势:为项目动态添加模块,或替换项目原生代码动态修复 bug。
热更新是什么?它的概念类似于热插拔,让用户在不更新甚至不退出 App 的条件下,通过在后台更新代码达到修复 Bug 以及更新业务的目的。当然,这个也是通过 JS 完成的,不然也不叫 JSPatch
了。所以学好 JS 还是很有前途的,现在大概有几十种 JS 供你随心选择,要啥有啥,是不是很感动?