使用 HTTP/2 加速 Node.js 應用
當在一個示例的 Express 應用中使用這個中介軟體時,我們可以看到應用程式的輸出多瞭如下 HTTP 頭:
本文是使用 Ghost(一個部落格釋出平臺)進行釋出的,因此如果你的瀏覽器支援 HTTP/2,你已經在不知不覺中享受了服務端推送技術帶來的好處了。接下來,我們將進行更詳細的說明。netjet 使用了帶有定製外掛的 PostHTML 來解析 HTML。目前,netjet 用它來查詢圖片、
和外部 CSS 樣式表。你也可以用其它的技術來實現這個。在響應過程中增加 HTML 解析器有個明顯的缺點:這將增加頁面載入的延時(到載入第一個位元組所花的時間)。大多數情況下,所新增的延時被應用裡的其他耗時掩蓋掉了,比如資料庫訪問。為了解決這個問題,netjet 包含了一個可調節的 LRU 快取,該快取以 HTTP 的 ETag 頭部作為索引,這使得 netjet 可以非常快的為已經解析過的頁面插入 Link 頭部。
不過,如果我們現在從頭設計一款全新的應用,我們就應該考慮把頁面內容和頁面中的後設資料分開存放,從而整體地減少 HTML 解析和其它可能增加的延時了。
任意的 Node.js HTML 框架,只要它支援類似 Express 這樣的中介軟體,netjet 都是能夠相容的。只要把 netjet 像下面這樣加到中介軟體載入鏈裡就可以了。
var express = require('express'); var netjet = require('netjet'); var root = '/path/to/static/folder'; express() .use(netjet({ cache: { max: 100 } })) .use(express.static(root)) .listen(1337);
稍微加點程式碼,netjet 也可以擺脫 HTML 框架,獨立工作:
var http = require('http'); var netjet = require('netjet'); var port = 1337; var hostname = 'localhost'; var preload = netjet({ cache: { max: 100 } }); var server = http.createServer(function (req, res) { preload(req, res, function () { res.statusCode = 200; res.setHeader('Content-Type', 'text/html'); res.end('<!doctype html><h1>Hello World</h1>'); }); }); server.listen(port, hostname, function () { console.log('Server running at ); });
netjet 文件裡有更多選項的資訊。
訪問
本文時,透過 Chrome 的開發者工具,我們可以輕鬆的驗證網站是否正在使用伺服器推送技術(LCTT 譯註: Chrome 版本至少為 53)。在“Network”選項卡中,我們可以看到有些資源的“Initiator”這一列中包含了
Push字樣,這些資源就是伺服器端推送的。
不過,目前 Firefox 的開發者工具還不能直觀的展示被推送的資源。不過我們可以透過頁面響應頭部裡的
cf-h2-pushed頭部看到一個列表,這個列表包含了本頁面主動推送給瀏覽器的資源。
希望大家能夠踴躍為 netjet 添磚加瓦,我也樂於看到有人正在使用 netjet。
Ghost 真是包羅永珍。在 Ghost 團隊的幫助下,我把 netjet 也整合到裡面了,而且作為測試版內容可以在 Ghost 的 0.8.0 版本中用上它。
如果你正在使用 Ghost,你可以透過修改 config.js、並在 production配置塊中增加 preloadHeaders 選項來啟用服務端推送。
production: { url: 'https://my-ghost-blog.com', preloadHeaders: 100, // ... }
Ghost 已經為其使用者整理了一篇支援文件。
使用 netjet,你的 Node.js 應用也可以使用瀏覽器預載入技術。並且 CloudFlare 已經使用它在提供了 HTTP/2 服務端推送了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2950797/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用HTTP2來加速你的網站HTTP網站
- 2、Node.js 第一個應用Node.js
- Node.js 應用:Koa2 使用 JWT 進行鑑權Node.jsJWT
- 使用 Flutter 加速應用開發Flutter
- 使用 NestJS 開發 Node.js 應用Node.js
- [譯]當 Node.js Core 遇到 HTTP/2Node.jsHTTP
- 教你使用Docker容器化Node.js應用程式DockerNode.js
- 用 RoadRunner 加速 Laravel 應用Laravel
- 基於Node.js的HTTP/2 Server實踐Node.jsHTTPServer
- [譯] Node.js 能進行 HTTP/2 推送啦!Node.jsHTTP
- node.js應用RedisNode.jsRedis
- 如何使用Nginx對Artifactory進行http應用NginxHTTP
- 使用這些 HTTP 頭保護 Web 應用HTTPWeb
- 使用socket.io和node.js搭建websocket應用Node.jsWeb
- Serverless部署應用並使用Cloudflare加速和支援HTTPSServerCloudHTTP
- nodejs應用-PM2使用NodeJS
- 老樹發新芽—使用 mobx 加速你的 AngularJS 應用AngularJS
- Node.js 系列:構建原生 Node.js 應用Node.js
- 如何使用 Faker.js 來 Mock Node.js 應用資料MockNode.js
- 使用 http-proxy 代理 SAP UI5 應用發起的 HTTP 請求HTTPUI
- 【http】https加速優化HTTP優化
- 使用新 Android Gradle 外掛加速您的應用構建AndroidGradle
- 如何在.Net Framework應用中請求HTTP2站點FrameworkHTTP
- 使用 Dynatrace 對 Node.js 應用的效能資料進行分析Node.js
- [譯] 如何使用 Node.js 構建一個命令列應用(CLI)Node.js命令列
- Node.js 的 http模組Node.jsHTTP
- Node.js 應用 peer dependency 的用法Node.js
- HTTP相關的應用程式HTTP
- web應用與http協議WebHTTP協議
- Node.js 配合 express 框架、ejs 、mongodb 實現應用 && [使用 TypeScript 重構]Node.jsExpress框架MongoDBTypeScript
- 【前端 · 面試 】HTTP 總結(十)—— HTTP 快取應用前端面試HTTP快取
- [前端 · 面試 ]HTTP 總結(十)—— HTTP 快取應用前端面試HTTP快取
- node.js啟動http服務Node.jsHTTP
- scoop中使用aria2加速下載OOP
- Node.js Web應用程式碼熱更新Node.jsWeb
- Node.js 子程式與應用場景Node.js
- 如何用node.js建立一個應用Node.js
- 應用同時支援HTTP和HTTPSHTTP