[compression] Node.js : Gzip 압축?

Node.js가 gzip 압축을하지 않고 gzip 압축을 수행 할 모듈이 없다는 사실을 잘못 알고 있습니까? 압축이없는 웹 서버를 누구나 어떻게 사용할 수 있습니까? 내가 여기서 무엇을 놓치고 있습니까? 서버 측 사용을 위해 알고리즘을 JavaScript로 이식해야합니까?



답변

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);


답변

당신이 사용하는 경우 Express를 , 당신은 구성의 일환으로 압축 방법을 사용할 수 있습니다 :

var express = require('express');
var app = express.createServer();
app.use(express.compress());

압축에 대한 자세한 내용은 여기에서 찾을 수 있습니다 : http://expressjs.com/api.html#compress

그리고 만약 당신이 Express를 사용하지 않는다면 .. 왜 안돼?! 🙂

참고 : (@ankitjaininfo 덕분에)이 미들웨어는 모든 응답이 압축되도록 “사용”하는 첫 번째 미들웨어 중 하나 여야합니다. 이것이 경로 및 정적 핸들러 위에 있는지 확인하십시오 (예 : 위에있는 방법).

참고 : (@ ciro-costa 덕분에) Express 4.0부터 express.compress미들웨어는 더 이상 사용되지 않습니다. connect 3.0에서 상속되었으며 express는 더 이상 connect 3.0을 포함하지 않습니다. 미들웨어를 얻으려면 Express Compression 을 확인하십시오 .


답변

1- 압축 설치

npm install compression

2- 그것을 사용하십시오

var express     = require('express')
var compression = require('compression')

var app = express()
app.use(compression())

Github에서 압축


답변

일반적으로 프로덕션 웹 애플리케이션의 경우 nginx 또는 lighttpd와 같은 경량 역방향 프록시 뒤에 node.js 앱을 배치하는 것이 좋습니다. 이 설정의 많은 이점 중에서 애플리케이션 소스 코드를 변경하지 않고도 http 압축 또는 tls 압축을 수행하도록 역방향 프록시를 구성 할 수 있습니다.


답변

nginx, lighttpd 또는 varnish와 같은 역방향 프록시를 사용하여 gzip을 사용할 수 있지만. 애플리케이션 수준에서 gzipping과 같은 대부분의 http 최적화를 사용하면 gzip에 대한 자산에 대해 훨씬 세분화 된 접근 방식을 가질 수 있습니다.

나는 실제로 gzippo https://github.com/tomgco/gzippo 라는 expressjs / connect에 대한 자체 gzip 모듈을 만들었지 만 새 작업을 수행합니다. 또한 unix gzip 명령을 생성하는 대신 node-compress를 사용합니다.


답변

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)


답변

다른 사람들이 nginx이를 암시 적으로 처리 할 수 있는 프런트 엔드 웹 서버를 사용하여 지적했듯이 또 다른 옵션은 nodejitsu의 우수한 node-http-proxy 를 사용하여 자산을 제공하는 것입니다.

예 :

httpProxy.createServer(
 require('connect-gzip').gzip(),
 9000, 'localhost'
).listen(8000);

이 예제는 connect 미들웨어 모듈 사용을 통한 gzip 압축 지원을 보여줍니다 : connect-gzip.