回顾 2016
iOS 和 Android 系统不约而同学习了对方的优点,长得越来越象:3D touch、权限控制、夜间模式、电话防骚扰... 原本属于桥的两侧的开放与封闭,越来越往一个中心靠;由此看来,真正在 OS 里的应用 App 才是系统的灵魂。
像「微信」,不论你用 iOS 还是 Android,很多人平常耗电量最多的 App 就是它。而微信借助大量的用户与使用时长,也在 2016 年末期,推出了「小程序」的内测,继续百度「轻应用」未完成的使命,在微信应用里再打造一个「小程序」生态市场。
而在微信发布「小程序」之前,Google 也在自己今年的 IO 大会中提出 PWA(Progressive Web Application),推动 Web 应用向前一步,在 Chrome 里完成用户按需使用,无需安装(还可将资源离线),还有着类似客户端的高性能体验,还有桌面添加快捷方式等功能。在离线技术上用 Service Worker 来做离线化,相比之前的 App cache 更灵活高效。PWA 这项技术实际是与 Android 的 App 理念是有相应冲突的,它的未来如何还要看未来 Android 与 Chrome 如何整合吧。
Android Stdio 2 出现了 Instant Run 特性,美团以此为基础推出了「Robust」的热修复技术(http://tech.meituan.com/android_robust.html), 解决了原来热修复上方案的兼容性问题。
Google 除以上外,还联合了 Microsoft,Mozilla ,Apple 几个主要浏览器厂商发起了一个面向 Web 的通用二进制和文本格式项目,它是 Web 上 JavaScript 有效补充,在本地解码速度比现行 JS 解析要快得多。如果这一标准能广泛实施将影响所有 Web 开发者。
Apple 也没闲着,在 WWDC 2016 上宣布,Apple 在 iOS 上 的 ATS (App Transport Security)策略,将在 2017 年 3-4 月左右(原计划是 1 月 1 号),非 HTTPS 的网络请求将被禁止。
客户端我们可以不用 HTTP 协议,走自建长链或自定义应用层协议,在 WebView 里 HTTPS 则是绕不过的槛,也就是说,大多数 Web 站点将必须由 HTTP 迁移到 HTTPS。
在网络基础设施上还不及欧美的国内, 由于 DNS 劫持与代码注入,迁至 HTTPS 将遇到证书错误,造成原来只是注入代码变成页面不可访问,最终导致 HTTP 请求成功率降低。除此之外,HTTPS 因增加了安全证书验证与加密,相比 HTTP 请求时延增长,影响加载页面性能和用户体验。
HTTPS 的推进一方面对安全是好事,也对 Web 上普及 HTTP2 推进起到很大作用;另一方面对广大的中小站点来说换 HTTPS 真是耗不起。而现在,各大互联网公司都在忙着切协议了。
iOS 相比 Android 的环境,让人头疼的是没有出现类似 Class Loader 的动态插件化技术。就在年底的前几天,滴滴来了个大新闻,出了一个 DynamicCocoa 技术,它是流行的热修复方案 JSpatch 的「升级版」,实现 oc 与 JavaScript 广义互调,实现插件化。不再上架 Appstore 就实现功能更新,相当让人期待。如果坑真的已被踩完,很有可能 Apple 将停止动态利用 JavaScript Core 来运行代码的这个机制。
Web 框架上,从 Google 查询关键字的大势看,jQuery 时代已慢慢离我们而去。Web 前端框架已基本三足鼎立,分别是 React / AngularJS / Vue。让人想不到的是 AngularJS 查询指数最多的地区不在欧美,也不是中国,而是在「印度」。
如图:
不管是 Web,还是客户端,都不同程度遇到业务越来越复杂,代码量越来越大,编译性能越来越慢的问题。国外大厂们用之前服务端的分布式编译思路拓展到客户端实现了并行编译。Google 的 Bazel,Facebook 的 Buck,在很大程度上提升编译效率;Web 我们也做过类似尝试,能提升约 40% 左右的性能。并行编译这都是针对大厂复杂业务的方案,对于个人开发者与创业公司来说,这些都不是工程化中的最大痛点。
Web 开发中,Node.js已在驱动前后端的再分工,这已是事实。而 Node.js最火的地方在哪?中国。也得益于知乎与一些技术论坛的热炒,现在不论在哪种场合,都在说「前后端分离」这事。事实上这谁都都有自己的理解方式,真正应用 Node.js 在前端与后端的重新分层,有轻如用它只做数据 IO 的 API,也有重如创业公司从业务到数据库连接全是 Node.js 的。前端向后端渗透,后端再后移,具体怎么分,没有定论。
最后总结一下「跨端」,它在今年是「百花齐放」。
跨端技术今年已不再去谈论 Hybrid 技术了。离线化、差量更新、Web 与端互调等能力已不是什么新鲜事,说明混合开发已基本成熟,在各大厂均有较为广泛的使用,如果还没做的,也在补齐当中。
新的技术是:React Native、Weex,还有 PWA、小程序,甚至还有 Electron。我向培训行业的人了解过,今年 Android、iOS 的培训人数在减少,而以 Web 技术栈的培训中心的前端生源一直没减,这充分说明市场对这块技术人材的渴求。
展望 2017
通过简单梳理完 2016 的前端技术之后,可以总结出 2017 的一些趋势。我也简单列举自己关注的几点:
- iOS 动态插件化技术。特别是 iOS 上的插件化技术期待能够得到更大的发展,来解决目前发版效率与包大小问题。
- Google 一边是 Chrome 的 Web,另一边是 Android 的 App,我很期待的是 Chrome 与 Android 融合之后对开发的影响。
- Web 框架层面明年难有创新,中期还仍是 React/AngularJS/Vue 三驾马车的技术栈体系,但我仍期待是否有超越 React 的模板/框架思路。
- HTTP 到 HTTPS 的更替将会推动 HTTP 2 的使用。让 Web 页面性能十年以来以请求数为首要基准成为过去式。为应对 HTTPS,部分云计算厂商可以提供整套移动端商业解决方案,如:长链透传收费服务和 HTTPS 套装。
- 跨端上 React Native 与 Weex 着重于解决跨端技术问题,并不能给开发者带来实实在在的收益。PWA 还谈之过早,所以我更看好小程序未来的发展,并不是技术上现在有多牛,而是在微信它是能给个人开发者和 Web 从业者带来就业机会与收益的最佳方式。脑洞大一点的看,支付宝、Facebook、小米是否也会会推出自己的「小程序」场景呢?是件令人期待的事。
前端的春天
不管是 Web 前端、iOS,还是 Android,对大前端工程师来说,这是最好的时代。放在几年前 1/3 是大前端,2/3 是后端。而现在则是一半以上是大前端的人,这充分说明大前端的重要性。
Web 前端的工程师在问未来在哪里,Android 和 iOS 的工程师也在说 Web 前端抢了他们的饭碗。出口在哪?除了向 NodeJS 向后端的渗透之外,跨端的学习,专注一端技术,关注其他端的技术也是一种出路。现在业务中遇到的问题经常是三端参与,你可以想象当开一个业务会议,后端一个工程师参与,前端一去就三人的感人画面吗?
跨端技术,只是大前端开始。端与端技术之间相互学习和借鉴,这将成为未来前端技术最重要的创新来源。