在响应过程中增加 html 解析器有个明显的缺点:这将增加页面加载的延时(到加载第一个字节所花的时间)。大多数情况下,所新增的延时被应用里的其他耗时掩盖掉了,比如数据库访问。为了解决这个问题,netjet 包含了一个可调节的 lru 缓存,该缓存以 http 的 etag 头部作为索引,这使得 netjet 可以非常快的为已经解析过的页面插入 link 头部。
不过,如果我们现在从头设计一款全新的应用,我们就应该考虑把页面内容和页面中的元数据分开存放,从而整体地减少 html 解析和其它可能增加的延时了。
任意的 node.js html 框架,只要它支持类似 express 这样的中间件,netjet 都是能够兼容的。只要把 netjet 像下面这样加到中间件加载链里就可以了。
<code>var express = require('express');</code>
<code>var netjet = require('netjet');</code>
<code>var root = '/path/to/static/folder';</code>
<code></code>
<code>express()</code>
<code>.use(netjet({</code>
<code>cache: {</code>
<code>max: 100</code>
<code>}</code>
<code>}))</code>
<code>.use(express.static(root))</code>
<code>.listen(1337);</code>
稍微加点代码,netjet 也可以摆脱 html 框架,独立工作:
<code>var http = require('http');</code>
<code>var port = 1337;</code>
<code>var hostname = 'localhost';</code>
<code>var preload = netjet({</code>
<code>});</code>
<code>var server = http.createserver(function (req, res) {</code>
<code>preload(req, res, function () {</code>
<code>res.statuscode = 200;</code>
<code>res.setheader('content-type', 'text/html');</code>
<code>res.end('<!doctype html><h1>hello world</h1>');</code>
<code>server.listen(port, hostname, function () {</code>
<code>console.log('server running at http://' + hostname + ':' + port+ '/');</code>
<a target="_blank"></a>
不过,目前 firefox 的开发者工具还不能直观的展示被推送的资源。不过我们可以通过页面响应头部里的<code>cf-h2-pushed</code>头部看到一个列表,这个列表包含了本页面主动推送给浏览器的资源。
希望大家能够踊跃为 netjet 添砖加瓦,我也乐于看到有人正在使用 netjet。
ghost 真是包罗万象。在 ghost 团队的帮助下,我把 netjet 也集成到里面了,而且作为测试版内容可以在 ghost 的 0.8.0 版本中用上它。
如果你正在使用 ghost,你可以通过修改 config.js、并在<code>production</code>配置块中增加 <code>preloadheaders</code> 选项来启用服务端推送。
<code>production: {</code>
<code>url: 'https://my-ghost-blog.com',</code>
<code>preloadheaders: 100,</code>
<code>// ...</code>
原文发布时间为:2016-09-14
本文来自云栖社区合作伙伴“linux中国”