HTTP2应该会在今年年中敲定,这无疑是web界的一件大事。HTTP2借鉴了Google的SPDY的很多特性,着重于提高之前的HTTP协议在当前网络环境下的性能。简而言之,HTTP2更快。为什么呢,主要有几个变化:第一,来自同一个域的HTTP请求可以共享同一个TCP连接,可以很大程度上解决网络延迟带来的性能问题。例如,如果你有很多图片,你现在不需要对它们进行sprite,因为它们无论如何都会使用相同的连接。随着HTTP2的出现,之前的很多web前端优化技术可能都不需要了。HTTP2不再是纯文本协议,而是二进制协议,使得协议的解析更容易,传输也更快。缺点是调试起来比较费力。HTTP2还具有一些其他特性,例如标头压缩等。您可以在这里了解它们。或者看看这个常见问题解答。Firefox已经开始支持HTTP2。之前包括chrome在内的很多浏览器都支持SPDY,估计很快就会开始支持HTTP2。不过nginx已经支持SPDY了。这取决于主要的Web服务器何时开始支持HTTP2。一个不太好的情况是,开发人员可能不得不面对HTTP2和HTTP1.1的同时存在。如果在享受HTTP2的好处的同时向下兼容HTTP1.1,这可能是未来很长一段时间开发者必须面对的问题。ECMAScript6我们现在使用的javascript背后的标准(注意是javascript语言本身,不包括DOM等)是ECMA-262,也被称为ECMAScript5,它的下一个版本ECMAScript6(简称es6)是几乎定稿。这个版本增加了很多开发过程中需要的功能,比如:类定义语法,包括super,继承lambda风格的函数定义,=>块级函数定义中的词法作用域this,默认参数,rest参数等解构,类似于ruby中的[a,b,c]=[1,2,3],也适用于map和set,以及函数参数symboliteratoriterator和generator,以及新的forof循环语法模板字符串,从现在开始on可以像ruby和shell一样使用多行字符串模块语法,从语言层面支持模块。还有promise、proxy、unicode支持等一系列新东西,目前chrome和firefox已经开始逐步支持es6。但是你不必等到所有的浏览器都开始支持es6之后才可以使用,因为已经有很多工具可以将es6代码编译成es5代码,比如babel、traceur。有很多js库已经开始使用es6的各种功能,包括angular2.0。很多人应该都在使用coffeescript。es6的很多功能弥补了之前es5的不足,吸收了很多coffeescript的功能。也许以后我们可以使用coffeescript,除非你不喜欢大括号和圆括号,而是喜欢python语法。但是coffeescript如果不升级,估计以后也享受不到es6带来的好处,很难适应HTML5时代的各种数值计算需求。***这里为大家提供一个很好的es6学习资源。这本书很详细,网上还是免费的。React相信大家都不陌生。是Facebook开源的一个前端视图框架。之所以在这里提到它,是因为它背后的理念所驱动的一些技术。虽然React本身只是一个视图框架,但其背后的虚拟dom以及由此带来的性能优势非常吸引人,另外一个就是它使用的类似于webcomponents的封装概念。这里做一个js前端框架性能对比的实验。虽然不是很准确,但可以作为参考。React的虚拟dom及其管理前端控制数据的方法可以很容易地与不可变数据结构(immutablejs、remutable)和函数式编程相结合。Clojurescript的om框架就是一个例子。想象一下,所有的状态都是不可变的,统一的数据存储(flux架构如marty),每次数据更新很容易只传递diff(事件源方式),整个数据在前端的流向是单向的,不是不仅模型变得简单了,而且undo和redo的实现也变得容易了,因为所有的历史数据都没有被真正修改过。React通过虚拟dom实现即时模式UI编程。低成本和快速的UI刷新也鼓舞了人们,React的封装方式并不局限于dom视图。比如flipboard团队基于React封装风格,在canvas上封装了一层UI,可以实现精美的动画效果,保证网页版和移动版的体验一致。Facebook的React团队最近在React大会上发布了一个使用js和ReactAPI进行原生移动开发的框架。React可能只是另一个web视图框架,但我喜欢它给我带来的新想法,这些想法可能会让我们的前端开发变得更容易。现在的web对实时性的要求越来越高,不仅仅是因为现在的技术能够更好的支持实时性,更重要的是用户体验的驱动。实时性不仅仅体现在聊天的需要上;我们在手机上的操作可以实时反映在网络浏览器上。即使我们不刷新页面,页面也应该能够实时更新。由于HTML5的出现,前端对实时性需求有了更好的技术支持,比如新的WebSocket、WebRTC、longpolling和serverpush等技术。在后端,很早就出现了asyncIO编程技术,可以同时支持大量的长连接。但是这些技术的进步从来没有停止过,这里随便给大家介绍几个。pushpin是最近由fanout开源的一种高性能实时web后端技术。与其他技术不同的是,它是一种代理,它本身不提供API编程框架,而是结合现有的WebAPI,使其支持大量API进行长连接。从设计理念上,将维护大量长连接的功能与实际的API业务功能分离,让前一个功能以代理的形式实现,因此对实际的API框架和语言没有要求.如果想支持更多的长连接,也可以在不改变后端API的情况下,通过水平扩展代理来实现。sockjssockjs是对websocket的模拟。它将在支持websocket的浏览器上使用原生websocket,并在旧浏览器上提供替代技术。但它不仅仅是一个前端js库,它还提供了一个后端编程框架,目前支持非常多的语言和框架。websocketd是个有趣的东西,它可以把任何符合接口的程序编程成websocket后端,甚至可以用shell写API。很多web框架都支持异步编程模式,所以可以支持大量的并发长连接。还有像Meteor这样提供整体解决方案的解决方案,还有很多最近的firebase。如果您有兴趣,可以自己找到它们。
