4月,我们宣布支持HTTP/2服务器端推送技术,我们通过HTTPLink标头实现了这种支持。我的同事John曾经通过一个例子展示了在PHP中支持服务器端推送功能是多么容易。我们希望能够更轻松地实现当今使用Node.js构建的网站的性能改进。为此,我们开发了netjet中间件,它可以解析应用生成的HTML,并自动添加Link头。在示例Express应用程序中使用此中间件时,我们可以看到应用程序的输出具有以下HTTP标头:ThisblogispublishedusingGhost(LCTT译注:博客发布平台),因此如果您的浏览器支持HTTP/2,并且您已经在不知不觉中享受到服务器端推送技术的好处。接下来,我们将进行更详细的解释。netjet使用带有自定义插件的PostHTML来解析HTML。目前,netjet使用它来查找图像、脚本和外部CSS样式表。您还可以使用其他技术来实现此目的。将HTML解析器添加到响应过程有一个明显的缺点:它会增加页面加载延迟(加载第一个字节所需的时间)。在大多数情况下,增加的延迟会被应用程序的其他耗时方面所掩盖,例如数据库访问。为了解决这个问题,netjet包含了一个可调整的LRU缓存,它由HTTPETag标头索引,这使得netjet可以非常快速地为解析的页面插入Link标头。但是,如果我们现在从头开始设计一个全新的应用程序,我们应该考虑将页面内容和页面中的元数据分开存储,从而从整体上减少HTML解析和其他可能的延迟。任何支持Express等中间件的Node.jsHTML框架都与netjet兼容。只需将netjet添加到中间件加载链,如下所示。varexpress=require('express');varnetjet=require('netjet');varroot='/path/to/static/folder';express().use(netjet({cache:{max:100}})).use(express.static(root)).listen(1337);代码多一点,netjet也可以摆脱HTML框架,独立工作:varhttp=require('http');varnetjet=require('netjet');varport=1337;varhostname='localhost';varpreload=netjet({cache:{max:100}});varserver=http.createServer(function(req,res){preload(req,res,function(){res.statusCode=200;res.setHeader('Content-Type','text/html');res.end('
