在響應過程中增加 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中國”