Frage Node.js: Gzip-Komprimierung?


Habe ich Unrecht, wenn ich feststelle, dass Node.js keine gzip-Komprimierung durchführt und es keine Module gibt, die gzip komprimieren können? Wie kann jemand einen Webserver verwenden, der keine Komprimierung hat? Was fehlt mir hier? Sollte ich versuchen, den Algorithmus für den serverseitigen Einsatz auf JavaScript zu portieren?


75
2017-10-08 22:40


Ursprung


Antworten:


Hier sind die Zahlen von Module aufgelistet für die Komprimierung:


39
2017-10-08 22:54



Knoten v0.6.x hat eine stabile zlib Modul im Kern jetzt - es gibt einige Beispiele, wie man es serverseitig in den Dokumenten auch verwendet.

Ein Beispiel (aus der Dokumentation):

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

60
2018-02-11 05:56



Wenn du es benutzt ausdrücken, dann können Sie die compress-Methode als Teil der Konfiguration verwenden:

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

Und Sie können mehr über die Komprimierung hier finden: http://expressjs.com/api.html#compress

Und wenn Sie nicht verwenden ausdrücken... Warum nicht, Mann ?! :)

HINWEIS: (Danke an @ankitjaininfo) Diese Middleware sollte eine der ersten sein, die Sie verwenden, um sicherzustellen, dass alle Antworten komprimiert sind. Stellen Sie sicher, dass dies über Ihren Routen und statischen Handler ist (z. B. wie ich es oben habe).

HINWEIS: (Danke an @ ciro-costa) Seit express 4.0, der express.compress Middleware ist veraltet. Es wurde von Connect 3.0 geerbt und Express enthält nicht mehr Connect 3.0. Prüfen Express-Komprimierung um die Middleware zu bekommen.


55
2018-01-15 15:48



1- Installieren Kompression

npm install compression

2- Verwenden Sie es

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

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

Kompression auf Github


39
2017-07-06 09:29



Im Allgemeinen sollten Sie für eine Produktions-Webanwendung Ihre node.js-App hinter einen leichten Reverse-Proxy wie nginx oder lighttpd stellen. Unter den vielen Vorteilen dieses Setups können Sie den Reverseproxy für die HTTP-Komprimierung oder sogar Tls-Komprimierung konfigurieren, ohne den Anwendungsquellcode ändern zu müssen.


27
2017-10-08 23:04



Obwohl Sie gzip mit einem Reverse-Proxy wie Nginx, Lighttpd oder in Lack verwenden können. Es kann vorteilhaft sein, die meisten HTTP-Optimierungen zu haben, wie z. B. das Gippen auf Anwendungsebene, so dass Sie eine sehr granulare Herangehensweise an das zu gzipende Asset haben können.

Ich habe tatsächlich mein eigenes gzip-Modul für expressjs / connect namens gzippo erstellt https://github.com/tomgco/gzippo obwohl es neu ist, macht es den Job. Außerdem verwendet es node-compress, anstatt den Unix-Befehl gzip zu erzeugen.


7
2018-06-23 22:11



Wie wäre es mit Dies?

Knoten komprimieren
  Ein Streaming-Komprimierungs- / Gzip-Modul für node.js
  Stellen Sie sicher, dass libz installiert ist, und führen Sie Folgendes aus:
  Knoten-Waf-Konfiguration
  Knoten-Waf-Build
  Dadurch wird das Binärmodul compress.node in build / default gesetzt.
  ...


2
2017-10-08 22:48



Während andere recht haben mit einem Front - End - Webserver wie nginx Damit kann implizit umgehen, eine andere Möglichkeit, zu verwenden Nodejitsus Ausgezeichnet Knoten-http-Proxy um dein Vermögen zu servieren.

z.B:

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

In diesem Beispiel wird die Unterstützung für die GZIP-Komprimierung mithilfe von angezeigt verbinden Middleware Modul: connect-gzip.


2
2018-01-15 04:40