使用 HTTP/2 服务端推送技术加速 Node.js 应用

netjet是一款用于Node.js的应用,它利用PostHTML进行HTML解析,以查找图片、脚本及CSS样式表等资源,并支持服务器推送技术。虽然增加了HTML解析过程,但通过LRU缓存机制减少了延迟。netjet兼容Express等中间件,并可在多种框架中独立运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要: netjet 使用了带有定制插件的 PostHTML 来解析 HTML。目前,netjet 用它来查找图片、脚本和外部 CSS 样式表。你也可以用其它的技术来实现这个。 在响应过程中增加 HTML 解析器有个明显的缺点:这将增加页面加载的延时(到加载第一个字节所花的时间)。

netjet 使用了带有定制插件的 PostHTML 来解析 HTML。目前,netjet 用它来查找图片、脚本和外部 CSS 样式表。你也可以用其它的技术来实现这个。

在响应过程中增加 HTML 解析器有个明显的缺点:这将增加页面加载的延时(到加载第一个字节所花的时间)。大多数情况下,所新增的延时被应用里的其他耗时掩盖掉了,比如数据库访问。为了解决这个问题,netjet 包含了一个可调节的 LRU 缓存,该缓存以 HTTP 的 ETag 头部作为索引,这使得 netjet 可以非常快的为已经解析过的页面插入 Link 头部。

不过,如果我们现在从头设计一款全新的应用,我们就应该考虑把页面内容和页面中的元数据分开存放,从而整体地减少 HTML 解析和其它可能增加的延时了。

任意的 Node.js HTML 框架,只要它支持类似 Express 这样的中间件,netjet 都是能够兼容的。只要把 netjet 像下面这样加到中间件加载链里就可以了。

 
 
  1. var express = require('express');
  2. var netjet = require('netjet');
  3. var root = '/path/to/static/folder';
  4. express()
  5. .use(netjet({
  6. cache: {
  7. max: 100
  8. }
  9. }))
  10. .use(express.static(root))
  11. .listen(1337);

稍微加点代码,netjet 也可以摆脱 HTML 框架,独立工作:

 
 
  1. var http = require('http');
  2. var netjet = require('netjet');
  3. var port = 1337;
  4. var hostname = 'localhost';
  5. var preload = netjet({
  6. cache: {
  7. max: 100
  8. }
  9. });
  10. var server = http.createServer(function (req, res) {
  11. preload(req, res, function () {
  12. res.statusCode = 200;
  13. res.setHeader('Content-Type', 'text/html');
  14. res.end('<!doctype html><h1>Hello World</h1>');
  15. });
  16. });
  17. server.listen(port, hostname, function () {
  18. console.log('Server running at http://' + hostname + ':' + port+ '/');
  19. });

netjet 文档里有更多选项的信息。

查看推送了什么数据

访问本文时,通过 Chrome 的开发者工具,我们可以轻松的验证网站是否正在使用服务器推送技术(LCTT 译注: Chrome 版本至少为 53)。在“Network”选项卡中,我们可以看到有些资源的“Initiator”这一列中包含了Push字样,这些资源就是服务器端推送的。

不过,目前 Firefox 的开发者工具还不能直观的展示被推送的资源。不过我们可以通过页面响应头部里的cf-h2-pushed头部看到一个列表,这个列表包含了本页面主动推送给浏览器的资源。

希望大家能够踊跃为 netjet 添砖加瓦,我也乐于看到有人正在使用 netjet。

原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值