Apakah saya salah menemukan bahwa Node.js tidak melakukan kompresi gzip dan tidak ada modul di luar sana untuk melakukan kompresi gzip? Bagaimana orang bisa menggunakan server web yang tidak memiliki kompresi? Apa yang kulewatkan di sini? Haruskah saya mencoba — terkesiap — mentransfer algoritme ke JavaScript untuk penggunaan di sisi server?
compression
gzip
node.js
SnickersAreMyFave
sumber
sumber
Jika Anda menggunakan Express , Anda dapat menggunakan metode kompresnya sebagai bagian dari konfigurasi:
var express = require('express'); var app = express.createServer(); app.use(express.compress());
Dan Anda dapat menemukan lebih banyak tentang kompres di sini: http://expressjs.com/api.html#compress
Dan jika Anda tidak menggunakan Express ... Mengapa tidak, bung ?! :)
CATATAN: (terima kasih kepada @ankitjaininfo) Middleware ini harus menjadi salah satu yang pertama Anda "gunakan" untuk memastikan semua tanggapan dikompresi. Pastikan ini di atas rute dan pengendali statis Anda (mis. Bagaimana saya memilikinya di atas).
CATATAN: (terima kasih kepada @ ciro-costa) Sejak express 4.0,
express.compress
middleware tidak digunakan lagi. Itu diwarisi dari connect 3.0 dan express tidak lagi menyertakan connect 3.0. Periksa Kompresi Ekspres untuk mendapatkan middleware.sumber
This middleware should be placed "high" within the stack to ensure all responses may be compressed.
Pastikan bahwa ini di atas rute dan pengendali statis Andaexpress.compress
middleware (yang diwarisi dari connect 3.0 <) tidak digunakan lagi (sejak express 4.0) karena tidak lagi menyertakan connect 3.0 <. Periksa github.com/expressjs/compression untuk mendapatkan middleware.1- Instal kompresi
2- Gunakan itu
var express = require('express') var compression = require('compression') var app = express() app.use(compression())
kompresi di Github
sumber
Secara umum, untuk aplikasi web produksi, Anda akan ingin meletakkan aplikasi node.js Anda di belakang proxy terbalik ringan seperti nginx atau lighttpd. Di antara banyak keuntungan dari setup ini, Anda dapat mengkonfigurasi reverse proxy untuk melakukan kompresi http atau bahkan kompresi tls, tanpa harus mengubah kode sumber aplikasi Anda.
sumber
Meskipun Anda dapat melakukan gzip menggunakan proxy terbalik seperti nginx, lighttpd, atau pernis. Memiliki sebagian besar pengoptimalan http seperti melakukan gzip pada tingkat aplikasi dapat bermanfaat sehingga Anda dapat memiliki pendekatan yang lebih terperinci tentang aset apa yang akan di-gzip.
Saya sebenarnya telah membuat modul gzip saya sendiri untuk expressjs / connect yang disebut gzippo https://github.com/tomgco/gzippo meskipun baru itu melakukan pekerjaan itu. Selain itu, ia menggunakan kompres node daripada menjalankan perintah unix gzip.
sumber
Meskipun Anda tidak menggunakan express, Anda masih dapat menggunakan middleware mereka. The modul kompresi adalah apa yang saya gunakan:
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)
sumber
Sementara seperti yang orang lain tunjukkan menggunakan server web ujung depan seperti
nginx
dapat menangani ini secara implisit, opsi lain, adalah menggunakan node-http-proxy yang sangat baik dari nodejitsu untuk melayani aset Anda.misalnya:
httpProxy.createServer( require('connect-gzip').gzip(), 9000, 'localhost' ).listen(8000);
Contoh ini menunjukkan dukungan untuk kompresi gzip melalui penggunaan middleware koneksi modul:
connect-gzip
.sumber
Untuk mengompresi file Anda dapat menggunakan kode di bawah ini
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.");
Untuk mendekompresi file yang sama Anda dapat menggunakan kode di bawah ini
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.");
sumber
Bagaimana kalau begini ?
sumber
Ada beberapa middlewares Gzip untuk Express, KOA, dan lainnya. Misalnya: https://www.npmjs.com/package/express-static-gzip
Namun, Node sangat buruk dalam melakukan tugas intensif CPU seperti gzipping, penghentian SSL, dll. Sebagai gantinya, gunakan layanan middleware 'nyata' seperti nginx atau HAproxy, lihat poin 3 di sini: http://goldbergyoni.com/checklist-best- praktek-of-node-js-dalam-produksi /
sumber
Mulai hari ini,
epxress.compress()
tampaknya melakukan pekerjaan yang brilian ini.Di aplikasi ekspres apa pun, panggil saja
this.use(express.compress());
.Saya menjalankan lokomotif di atas kereta ekspres secara pribadi dan ini bekerja dengan baik. Saya tidak dapat berbicara dengan pustaka atau kerangka kerja lain yang dibangun di atas express tetapi selama mereka menghormati transparansi tumpukan penuh, Anda akan baik-baik saja.
sumber
Sudah beberapa hari yang baik dengan node, dan Anda benar untuk mengatakan bahwa Anda tidak dapat membuat server web tanpa gzip.
Ada cukup banyak opsi yang diberikan pada halaman modul di Wiki Node.js. Saya mencoba sebagian besar, tetapi ini yang akhirnya saya gunakan -
https://github.com/donnerjack13589/node.gzip
v1.0 juga keluar dan sejauh ini cukup stabil.
sumber
Gunakan kompresi gzip
Pengompresan Gzip dapat sangat mengurangi ukuran tubuh respons dan karenanya meningkatkan kecepatan aplikasi web. Gunakan middleware kompresi untuk kompresi gzip di aplikasi Express Anda. Sebagai contoh:
var compression = require('compression'); var express = require('express') var app = express() app.use(compression())
sumber