前端综合

盘点近几年前端技术及其2016年技术发展方向

Web 规范和标准

最开始,我们看到的 JavaScript 还只是一个简单的脚本语言,配合着 AJAX,在网页上翻腾了好几个年头。随着互联网趋势越来越明显,互联网业务量和业务复杂度不断增加,很多网页变得相当复杂,如让我们震惊了好一会儿的 Gmail,交互复杂,体验优良。为了更好的多人协作,代码中的 Utils 库越来越大,在这些库中,基础部分更多的是对 JavaScript 语言本身的拓展,比如给 String 加一个 repeat 函数,再加一个 trim 函数,再加一个 endWith 函数等等。

复杂的业务中会经常看到一层又一层的回调处理,回调的嵌套让代码的可读性变的很差,而且很难将多个异步并行处理。为了改变这种编程范式,我们做了很多的思考,使用事件监听,使用各种手段拉直回调,平坦地调用。

慢慢的,如果你在关注 W3C 小组的动向,会发现,那些被认可的,并且被广泛重复定义的东西,都被纳入了标准。最开始的 jQuery/prototype,前者主要是对浏览器做兼容处理,让开发者不再把精力放到浏览器的差异上;后者是对语言本身的拓展,对 JavaScript 各种类型做拓展,并且提供了一套拓展任何对象的功能集。而现在的开发,我们很大程度上不再依托这些类库。规范和标准已经把这些差异都统一了,String 中自带了 includes/startsWith/endsWith/repeat/padStart/padEnd 等函数,Array 自带了 from/forEach/of/keys/values/find/findIndex 函数…

规范的标准是为了让开发者得到更好的编程体验,编程不是目标,目标是将编程生产力转化成实际效益,越少的阻碍对开发者越有利。各浏览器厂商当然也认识到了这一点,他们不断地提升自己产品的体验,将标准中的新特性都融合进去,比如 ES6 中的 Promise/Generator/Class/Module 等等。在这些内容普及之前,我们不需要加入 jQuery/prototype 这些「不纯粹」的东西,而是添加两个 shim 和 polyfill,如 es5-shim,html5shiv 等等。待到山花烂漫时,再轻松删掉这些补丁程序。

这两年工程化很热,W3C 小组也看到了,这就是市场的需求,为了完成一个大型应用的编程,就必须模块化、组件化,于是在规范中也出现了 Module & Module Loader;Node.js 的到来,让很多前端工程师开始接触数据库操作,面对巨量的异步,我们忍气吞声写了无数的回调地狱,尽管使用了很多 Promise 相关的操作,程序结构依然松散难以阅读,于是规范中也开始出现了 async/await 等对 Generator 的上层封装。文字已经不能满足当代人的沟通需求,音视频等富媒体传输走进了我们的生活,于是规范中也出来了 WebRTC/WebAudio 等规范。

只要规范出来了,后续市面上就会根据规范来实现一套 shiv,这些 shiv 提供了同样的 API,提供了同样的编程体验。当浏览器自我进化完成之后,这些 shiv 也将成为历史,被开发者遗弃在代码的注释之中。这些都是规范和标准的魅力,它的存在,就是让开发者把精力投入到自己的业务之中,编程和范式的工作交给它。

在 这里 可以看到,W3C 各个小组最近都在干啥。标准不能囊括一切。

生态的自我完善和自我拓展

技术的更迭过于频繁,我们能够清晰地看到,很多人还在用更迭前一波甚至是前好几波的产品。

当年的 IE6,在战场上鏖战了 10 多个年头,依然屹立不到,而现在它在市面上依然有百分之一左右的占有率,这种小强精神不得不让人肃然起敬。“只要用户在,我们就得追随”,这可能是很多公司的服务理念,因为用户就是潜在的利润。正是因为这种服务理念,成就了 IE6 一个又一个的 5 年!然而低版本的 IE 已经不仅仅是被前端从业人员抵制和排斥了,网络安全、网络运维、QA 等等,各个技术岗位的人员都开始对他不屑,它的存在对工作效率、对安全、对很多方面产生了极为不良的影响,甚至影响到一些核心内容的推广,所以 2016 将是低版本 IE 消亡的一年,我也呼吁业界所有的朋友举起义旗反抗起来!

庆幸的是,也有人开始吃螃蟹了。从支付宝到天猫到淘宝,阿里巴巴在很多业务上已经主(bèi)动(bī)地放弃了对 IE6 和 IE7 的支持,甚至在统一接入层直接做了 302 跳转,提示用户更新浏览器或者引导流量到无线端。这是一个好的开始,我们期望这也是业界达成共识的开始!

HTTP 协议,从 1.0 快速过度到了 1.1,整个互联网的上层建筑变的十分稳固。当然,我也了解到依然有很多产品还是保持了 1.0 的状态,据说电信公司的很多产品就是使用 HTTP/1.0 进行通讯,这无疑让人惊愕。为了追求更高的效率,减少网络传输中的无效流量,W3C 工作组对 HTTP 协议也做了重新的定义,SPDY 就是 13 年比较火热的一个话题,Firefox 和 Chrome 都陆续开始支持 SPDY,后来在 SPDY 的基础上做了升级,正式定义为 HTTP/2.0,它的一个很大特点就是多路复用,这个小小的特点改变了我们前端编程的很多优化模式,比如

  • 域名不是越多越好,为了能够充分利用浏览器的连接数,我们给 JS 和 CSS 开一个域名,给 img 开好几个域名,网页打开的时候,恰到好处的利用浏览器的连接数上限限制。HTTP/2.0 的多路复用,就是可以在一个 HTTP 请求中进行多个资源的传输,如果域名散列,反而不能利用这个特性
  • 资源合并没有任何优势,以前的资源合并是为了减少请求数以节约建立 TCP 链接的网络开销和头部传输的流量开销,而在 HTTP/2.0 中,一个 HTTP 请求上完全可以把所有的资源全部推送过来,如果合并了资源,反而不能良好运用浏览器对资源的缓存。

当然,除了多路复用,还有很多其他的优化,比如传输的数据为二进制流,HEAD 头会被压缩处理,服务器可以向客户端推送内容等。在这个技术水平指数式增长的年代,我相信以后的革新不会比消灭 IE6 痛苦。

模块加载上,经过了各派系的争论之后,流传下来几个不错的产品 SeaJS、RequireJS 等,那么那个模块加载器将成为工具平台中短暂的终点呢?似乎这些都不是。当我们按照规范中的方式进行模块定义,按照规范中的方式加载定义的模块时,加载这个流程就显得不那么重要了,因为这些事情最后都会变成 shiv/polyfill 的事情,最终会变成浏览器的固有属性。

当一个东西在社区中被暴力追捧的时候,会有很多衍生的产品出来,当这些衍生物根深蒂固时,可能又会出现一个更加原生更加符合开发习惯的东西出来。就像 jQuery,我们为它编写的插件不计其数,而在工程化的需求冲击下,它却显得那么的弱不禁风,因为它关注的点和当前的发展态势不太吻合,仅此而已。

Mobile 的发展驱动着战场的转移

记得当年拿着 Nokia5230 学完了 HTML 和 JavaScript 的入门,那屏幕尺寸也就是三个手指的宽度,紧紧攥在手里看着页面混排效果极差的网页文档。

现如今,iPhone 都出到 6s 了,一个版本一个尺寸,而且尺寸越来越大,还有各种宽高不一的 Android 机器,种类繁多。以前的触屏是电阻式,只支持单点触碰;而现在电容式的触屏精度更高,还支持多指触控,这如丝般顺滑的体验在三四年前是完全体会不到的。曾经手机开一个程序久了就会卡,动不动还会自动重启;而现在的手机开一堆程序,完全无感知,这就是硬件发展前后的差异。

手机已经成为了人们生活中不可或缺的一部分,甚至成为了一些人身体的一部分,淘宝今年双十一的数据显示,国内移动端的消费比例已经远远超过了 PC 端,占比 68%。面对庞大的用户,我们的技术是否做好了充足的准备,这里还得打一个问号。

PC 上那一套经验不是直接搬到移动端就可以使用了,在移动端还需要解决更多的问题:

  • 多分辨率问题,这里涉及到了响应式设计和前端响应式技术
  • 不同网络环境的网页加载优化问题,2g/3g/4g/wifi
  • 手指交互带来的一系列体验问题
  • 为了提升用户体验,将 Web Native 化 —— 类 React 技术带来的一系列问题
  • 远程调试问题
  • 移动安全问题等等

上面提到的问题很多已经有了优秀的解决方案,当然也有很多未提及的。WebApp 的性能、流畅度和稳定性远远不如原生应用,同时它也无法良好地运用设备提供的原生功能,这些都是大家转投 Native 的原因。

端的融合

不同分辨率的手机,不同物理尺寸的终端,为了保持良好的视觉体验和用户体验,我们不得不为每一个尺寸写一份 Media Query 代码,那么对应的,设计师也需要设计多套版式供前端使用,这给设计师、前端和测试带来了无尽的麻烦。为此,我们通过前端技术重塑屏幕,重新定义像素尺寸,使用流式布局,通过百分比来响应不同的终端尺寸。这是端的融合。

后续的 Mobile 的技术发展方向上,应该是相当明确的。很多公司都是三套人马维护三端的程序,iOS、Android 和 Web,而这三端做的事情都是一样的,一样的界面,一样的后端接口,一样的交互方式。为了能够快速响应业务的变更,我们不得不将三端合并为一端对待,用一套程序编程成三端代码,然后发布到三个平台上。这也是端的融合。React 系列技术发展到此,绝对不是终点,它只是一个探路灯,给我们照明了方向。

技术需要为业务做保障,而好的技术是能够及时响应业务的变化,我们不可能投入大量的人力在 Web 的修补工作上,通过开发统一工具,屏蔽端和端之间的差异,统一开发模式和开发体验,这才是 Mobile 的未来。

当然,回到我们之前说的规范和标准,我们目前所做的「屏蔽差异」工作,今后,也会有统一的标准来规范,目前手机厂商没有这个共识,是因为还处于当年 Chrome、Firefox 抢占 IE6 市场份额的阶段。端的最终融合在于一个统一的标准,以及强有力的执行。

上一页 1 2 3 4 5下一页
(0)
Loading收藏(289)

本文由 前端网(w3cvip) 作者:琴歌 发表,转载请注明来源!

关键词:, ,

热评文章

发表评论

*