Express và kết nối dường như đã xóa chức năng gzip của chúng vì chúng quá kém hiệu quả. Có giải pháp đáng tin cậy nào để gzip với express-js hiện tại không?Nội dung tĩnh gzip nhanh
Trả lời
Connect 2.0 đã thêm hỗ trợ cho compress() middleware dựa trên new zlib stuff với điều đó vừa đi ra trong Node Lõi API.
Bạn có thể tận dụng điều này trong máy chủ rõ ràng của bạn bằng cách thêm một phụ thuộc vào kết nối 2,0 trong package.json
tập tin của bạn:
{
...
dependencies: {
"connect" : "2.x",
"express" : "2.x",
// etc..
}
}
Và sau đó áp dụng logic sau vào cấu hình ứng dụng rõ ràng của bạn:
// Create static file server with gzip support
var app = express.createServer(express.logger());
app.use(connect.compress());
app.use(express.static(__dirname + '/public'));
app.listen(80);
Xin lưu ý rằng công cụ này vẫn còn khá mới và trong khi tôi có thể làm cho nó hoạt động cục bộ, ứng dụng đám mây Heroku của tôi đã phàn nàn về sự phụ thuộc vào Nén 2.x trong móc trước khi triển khai thông qua git:
-----> Heroku receiving push
-----> Node.js app detected
-----> Resolving engine versions
Using Node.js version: 0.4.7
Using npm version: 1.0.106
-----> Fetching Node.js binaries
-----> Vendoring node into slug
-----> Installing dependencies with npm
npm ERR! Error: No compatible version found: [email protected]'>=2.0.0- <3.0.0-'
Như bạn có thể thấy, họ vẫn đang sử dụng phiên bản cũ của nút (0.4.7).
UPDATE:
Thực ra, tôi có thể nhận được Heroku để triển khai này bằng cách thêm các engines
phần tương ứng trong package.json
:
{
...
"engines": {
"node": ">= 0.6.0 < 0.7.0"
}
}
Và đây là kết quả khi sử dụng một http trình kiểm tra nén:
CẬP NHẬT Tháng Sáu 2014
Hiya, nếu bạn đang đọc này ngay bây giờ. Đừng quên rằng những thứ trên chỉ liên quan đến Express 2.0.
Express 3.0 và 4.0 sử dụng cú pháp khác nhau để bật tính năng nén http, xem bài đăng của gasolin ngay bên dưới.
Tôi không thể làm cho nó hoạt động trên Express 2.5.1. –
@AndreyLushnikov: Bạn phải 'use()' 'compress' ** trước **' static'. 'compress' [thay thế] (https://github.com/senchalabs/connect/blob/2.3.9/lib/middleware/compress.js#L77-91)' res.write' và 'res.end' để nó có thể proxy dữ liệu thông qua zlib. Nếu 'static' là trước' compress', nó xử lý toàn bộ yêu cầu trước khi phần mềm trung gian 'compress' có cơ hội chạy và vá các phương thức' res'. Steven, tôi đã cập nhật câu trả lời của bạn để hoán đổi các cuộc gọi 'use()'. Các trạng thái – josh3736
@gasolin bên dưới Express 3.0 hiện có hỗ trợ 'compress()'. Nếu bạn đang đọc, bạn có thể vui lòng cập nhật câu trả lời của mình không? – HyderA
Nếu bạn đã tìm kiếm npm, bạn có thể đã gặp phải node-compress.
Không nên quá khó để chèn nó làm phần mềm trung gian vào thể hiện.
Tôi cũng đã tìm kiếm NPM và thấy ví dụ:
https://github.com/tomgallacher/gzippo
gzippo phát âm gzippo là một middleware gzip cho Connect sử dụng Compress cho hiệu suất tốt hơn.
Gzippo gần đây đã được phát triển (2 ngày trước) mà tôi nghĩ là một điều tốt. Tôi không thể nói cho bạn biết về cách sử dụng sản xuất. Bạn nên tự mình kiểm tra/đo điểm chuẩn. Tôi cũng có thể sử dụng một CDN cho một trang web trực tiếp hoặc Nginx để lưu trữ các tệp tĩnh của tôi thay vì một số mô-đun nodejs.
Chúng tôi đang sử dụng gzippo trong sản xuất cho một tờ báo lớn của Vương quốc Anh. Vẻ đẹp của cấu hình nén nội dung trong lớp nút là bạn có thể chỉ cần đặt Varnish, Squid hoặc CDN upstream và nó sẽ tuân theo tiêu đề http và giữ một bản sao nén được lưu trữ trên proxy/CDN cho tất cả các yêu cầu tiếp theo. Điều này sẽ giúp cấu hình bộ nhớ cache với mã nút của bạn và trong git/svn của bạn, v.v. – serby
Connect sẽ hỗ trợ các công cụ zlib mới trong Node trong phiên bản tiếp theo
Nó được thêm vào bây giờ, xem bài đăng bên dưới .. –
Express 3.0 bây giờ đã nén() hỗ trợ:
var app = express();
// gzip
app.use(express.compress());
// static
app.use("/public", express.static(__dirname + '/public'));
// listen
app.listen(80);
EDIT cho Express 4.0, nén trở thành trung gian riêng biệt. Vì vậy, bạn phải cài đặt và nhập khẩu để sử dụng nó:
var compress = require('compression');
app.use(compress());
Express '4.x' đã xóa gần như tất cả phần mềm trung gian, bao gồm' compress'. Bạn có thể sử dụng phần mềm trung gian 'compression' của Connect ngay bây giờ: https://github.com/expressjs/compression. –
hiện nó yêu cầu các bước bổ sung trong heroku –
Trong trường hợp nào kích hoạt nén?Tôi chỉ cần thêm nó nhưng đã viết 'res.send' và không có nội dung gzipped xuất hiện. Liệu nó có cần 'res.end' hoặc một số trigger khác? – CMCDragonkai
- 1. Nội dung tĩnh không được nén vào IE9 từ IIS7
- 2. Bình, CherryPy và nội dung tĩnh
- 3. Cách gửi yêu cầu HTTP POST bằng nội dung gzip?
- 4. GZIP nội dung phản hồi trong PlayFramework 2.0
- 5. Nội dung của thư viện tĩnh
- 6. Nén GZip trong IIS7 không hoạt động, nhưng tiêu đề mã hóa nội dung được đặt thành gzip
- 7. nginx không phân phát nội dung tĩnh trong Rails 3
- 8. Nội dung tĩnh và động trong hệ thống docpad - cách tạo nội dung động?
- 9. Cách lưu trữ nội dung tĩnh được nén trước trong apache?
- 10. Nginx phân phối nội dung tĩnh và proxy tới apache
- 11. Cung cấp nội dung tĩnh từ jarfile với Jetty?
- 12. cách tạo VirtualHost để chỉ phân phát nội dung tĩnh
- 13. NSRangeException trong UITableViewController với nội dung động/tĩnh hỗn hợp
- 14. Biên soạn nội dung tĩnh cho một trang web
- 15. Hiển thị nội dung văn bản tĩnh với iframe
- 16. Cách phân phối nội dung tĩnh từ tomcat
- 17. Cung cấp nội dung trên tên miền phụ 'tĩnh'
- 18. cách nhận được tiêu đề "gzip xóa mã hóa nội dung" được Chrome gửi?
- 19. Cách nhận nội dung gửi gzip dưới dạng phản hồi PHP
- 20. Làm cách nào để chấp nhận nội dung được nén bằng gzip bằng LWP :: UserAgent?
- 21. Giải mã nội dung phản hồi gzip-ed với url-truy xuất
- 22. Cách sử dụng Mã hóa nội dung: gzip với Python SimpleHTTPServer
- 23. IIS hiểu các tệp tĩnh trong MVC là nội dung động
- 24. bó system.web.optimization GZip
- 25. Nội dung động với Jekyll
- 26. Xử lý nội dung gzipped trên Android
- 27. Tính nội dung của scrollview
- 28. Nội dung của $ GIT_DIR có nội dung gì?
- 29. Nội dung SMS của Android (nội dung: // sms/đã gửi)
- 30. Cách nhận nội dung yêu cầu (nội dung) trong PHP?
Sử dụng nginx của gzip – dumitru
Trong trường hợp này vẫn còn thích hợp cho ai đó: Như tôi đã muốn để phục vụ các tập tin tĩnh gziped nhưng không muốn chi phí để làm điều này trên bay tôi đã viết một wrapper nhỏ trên đầu trang của express.static, cho phép phục vụ allready gziped tập tin. Điều này sẽ hữu ích nếu bạn tích hợp các tệp html/css/js gzipping vào quá trình xây dựng của mình. Mô-đun có thể được tìm thấy trên npm: [express-static-gzip] (https://www.npmjs.com/package/express-static-gzip) – Tobi