HTTP/2 简介

5/15/2015 更新:

HTTP/2 协议标准已经敲定了,是为 RFC7540

1. HTTP 现状

HTTP 是现在互联网上使用最广泛的网络协议,它的当前版本是 HTTP/1.1,也是使用范围最广的版本(实际上还有不少的代理服务器在使用 HTTP/1.0)。HTTP 的标准由 IETFW3C 共同负责制定,HTTP/1.1 的最初版本于 1997 年 7 月发布,即 RFC 2068。随后在 1999 年 6 月,他们又发布了 RFC 2616,主要针对 RFC 2068 进行一些修订和改善。2014 年 7 月,RFC 2616 更新为 RFC 7230 等六个 RFC 标准。

1.1 传输量和请求数

随着前端技术的发展,包括 JavaScript 层出不穷的框架和类库,以及越来越成熟的构建工具和模块化开发等等,导致网页上需要展现的内容及加载一个页面所需的请求数越来越多,而这一趋势,短期来看,并无扭转的可能。

下图展示了从 2011 年 4 月到 2015 年 4 月网页的平均传输量和请求数,可以看到,现在用户打开一个网页需要下载的资源已经达到将近 2MB,请求数也接近 100。(数据来源:httparchive.org

Read more

20 个 Vim 实用技巧

我是 Vim 的忠实用户,从开始编程起,就使用 Vim 作为编辑器。在我看来,Vim 的强大之处有三:

  1. 快速定位;
  2. 宏;
  3. 不计其数的插件。

在使用 Vim 的过程中,我从社区学习到很多有用的技巧,自己也总结和掌握了一些。正是这些技巧让我得以在个人的编程经验中,还算得心应手地使用 Vim。本文是我对自己平常使用的一些用法技巧的分享,这些技巧不借助任何插件,全部是 Vim 本身提供的功能。(当然这绝不是在否定插件的作用,只是说,编辑器本身可以提供或者达到的效果,则尽管用,keep it simple。)

Read more

理解 JavaScript 闭包

在 JavaScript 中,原型(prototype)和闭包(closure) 可以说是这门语言的精髓,也是不太容易理解和掌握的地方。比如 Eric Elliott 就认为这两个概念是 JavaScript 的 两大支柱。前者是 JavaScript 的 OOP 实现,后者是函数式编程的关键所在。本文尝试探讨一下闭包的形成原理以及它的作用。

First-class function

和所有的函数式编程语言一样,JavaScript 的函数也是 First-class function,这意味着函数可以:

  • 赋值给一个变量;
  • 作为参数传递给其他函数;
  • 作为返回值从其他函数中返回;

就像其他所有的对象(object)一样。这是闭包得以存在的最基本的条件,因为本质上来讲,闭包就是函数,一种特殊的函数。

Read more