Sni*_*ave 87 compression gzip node.js
我错误地发现Node.js没有gzip压缩,并且没有模块可以执行gzip压缩吗?如何使用没有压缩的Web服务器?我在这里错过了什么?我是否应该尝试将算法加载到JavaScript以供服务器端使用?
hug*_*hsk 69
Node v0.6.x 现在在核心中有一个稳定的zlib模块 - 在文档中也有一些关于如何在服务器端使用它的例子.
一个例子(取自文档):
// server example
// Running a gzip operation on every request is quite expensive.
// It would be much more efficient to cache the compressed buffer.
var zlib = require('zlib');
var http = require('http');
var fs = require('fs');
http.createServer(function(request, response) {
var raw = fs.createReadStream('index.html');
var acceptEncoding = request.headers['accept-encoding'];
if (!acceptEncoding) {
acceptEncoding = '';
}
// Note: this is not a conformant accept-encoding parser.
// See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.3
if (acceptEncoding.match(/\bdeflate\b/)) {
response.writeHead(200, { 'content-encoding': 'deflate' });
raw.pipe(zlib.createDeflate()).pipe(response);
} else if (acceptEncoding.match(/\bgzip\b/)) {
response.writeHead(200, { 'content-encoding': 'gzip' });
raw.pipe(zlib.createGzip()).pipe(response);
} else {
response.writeHead(200, {});
raw.pipe(response);
}
}).listen(1337);
Run Code Online (Sandbox Code Playgroud)
Mil*_*ric 59
如果您使用的是Express,那么您可以将其compress方法用作配置的一部分:
var express = require('express');
var app = express.createServer();
app.use(express.compress());
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到更多关于压缩的内容:http://expressjs.com/api.html#compress
如果你不使用Express ......为什么不呢,伙计?!:)
注意:(感谢@ankitjaininfo)这个中间件应该是您"使用"以确保所有响应都被压缩的第一个.确保它位于您的路由和静态处理程序之上(例如,我如何在上面).
注意:(感谢@ ciro-costa)从Express 4.0开始,express.compress
不推荐使用中间件.它继承自connect 3.0并且express不再包含connect 3.0.检查Express Compression以获取中间件.
Coy*_*Bit 42
1-安装压缩
npm install compression
Run Code Online (Sandbox Code Playgroud)
2-使用它
var express = require('express')
var compression = require('compression')
var app = express()
app.use(compression())
Run Code Online (Sandbox Code Playgroud)
yfe*_*lum 31
一般来说,对于生产Web应用程序,您需要将node.js应用程序放在轻量级反向代理(例如nginx或lighttpd)之后.在此设置的众多优点中,您可以将反向代理配置为进行http压缩甚至压缩,而无需更改应用程序源代码.
小智 10
要压缩文件,您可以使用下面的代码
var fs = require("fs");
var zlib = require('zlib');
fs.createReadStream('input.txt').pipe(zlib.createGzip())
.pipe(fs.createWriteStream('input.txt.gz'));
console.log("File Compressed.");
Run Code Online (Sandbox Code Playgroud)
要解压缩同一文件,您可以使用以下代码
var fs = require("fs");
var zlib = require('zlib');
fs.createReadStream('input.txt.gz')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('input.txt'));
console.log("File Decompressed.");
Run Code Online (Sandbox Code Playgroud)
虽然你可以使用反向代理gzip,如nginx,lighttpd或清漆.在应用程序级别进行大多数http优化(例如gzipping)可能会很有用,这样您就可以对gzip的资产进行更细粒度的处理.
我实际上已经为expressjs/connect创建了我自己的gzip模块,名为gzippo https://github.com/tomgco/gzippo,虽然它确实是新的.另外,它使用node-compress而不是产生unix gzip命令.
即使您不使用 express,您仍然可以使用他们的中间件。该压缩模块是我使用的是什么:
var http = require('http')
var fs = require('fs')
var compress = require("compression")
http.createServer(function(request, response) {
var noop = function(){}, useDefaultOptions = {}
compress(useDefaultOptions)(request,response,noop) // mutates the response object
response.writeHead(200)
fs.createReadStream('index.html').pipe(response)
}).listen(1337)
Run Code Online (Sandbox Code Playgroud)
Gzip 压缩可以大大减小响应正文的大小,从而提高 Web 应用程序的速度。在 Express 应用程序中使用压缩中间件进行 gzip 压缩。例如:
var compression = require('compression');
var express = require('express')
var app = express()
app.use(compression())
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
94985 次 |
最近记录: |