2012-02-27 29 views
7

Tôi khá mới với Node.js/Express, nhưng tôi nghĩ rằng tôi đang dần dần nhận được hang của nó. Tôi đã thêm mã này, mà từ những gì tôi có thể nói có vẻ khá chuẩn:Node.js/Express Caching

app.configure('production', function() { 
    var oneYear = 31557600000; 
    app.use(express.static(__dirname + '/public', { maxAge: oneYear })); 
    app.use(express.errorHandler()); 
}); 

Xem nhanh bộ nhớ cache của Chrome cho thấy, vâng, mọi thứ đều được lưu vào bộ nhớ cache. Tiếng hoan hô! Nhưng khi tôi chạy kiểm tra của Chrome trên trang web của mình (và, tôi đã nhận thấy, trên các trang web được hỗ trợ bằng Node khác), Chrome cho biết trang web không lưu trữ bất kỳ thứ gì. Điều gì có thể gây ra sự khác biệt này?

+1

Bạn đã đặt môi trường của mình bằng 'sản xuất' trước khi bạn chạy không? – EhevuTov

+0

Đúng, chạy với Nodejitsu tự động sử dụng 'sản xuất' làm mặc định. Chạy nó cục bộ trong chế độ sản xuất tạo ra tiêu đề max-age = 0 trên tất cả các tài nguyên. Có vẻ như Chrome có thể lưu vào bộ nhớ đệm chỉ để an toàn, vì Thanh tra không tiết lộ gì trong bộ nhớ cache. – JacobEvelyn

Trả lời

11
var express = require('express'); 
var app = express.createServer(); 
var oneYear = 31557600000; 
app.use(express.static(__dirname + '/public', { maxAge: oneYear })); 
app.use(express.errorHandler()); 
app.get('/', function(req, res){ 
    res.send('hello world'); 
}); 
app.listen(3000); 

Thực thi đoạn mã trên, và điều hướng đến một trang test.html nằm trong thư mục/công và có một hình ảnh thử nghiệm mang lại cho tôi các tiêu đề phản ứng sau và Chrome Kiểm toán là chỉ tốt trên máy tính của tôi (Chrome 17,0. 963.83, Linux, Nút 0.6.13, Express mới nhất). Bạn nên kiểm tra kỹ xem nó có thực sự ở chế độ sản xuất hay không.

Accept-Ranges:bytes 
Cache-Control:public, max-age=31557600 
Connection:keep-alive 
Date:Fri, 23 Mar 2012 22:52:24 GMT 
ETag:"120877-1278958150000" 
Last-Modified:Mon, 12 Jul 2010 18:09:10 GMT 
X-Powered-By:Express 
+1

Vì vậy, tôi là một thằng ngốc ... Tôi đã nhìn vào tiêu đề Cache-Control của yêu cầu của tôi chứ không phải phản hồi. Nhưng tôi vẫn gặp sự cố với kiểm tra của Chrome ... khi tôi chạy nội bộ ở chế độ sản xuất, mọi thứ đều ổn: Kiểm soát bộ nhớ cache của tiêu đề chính xác và kiểm tra của Chrome không phàn nàn. Khi tôi triển khai đến Nodejitsu, tuy nhiên, Cache-Control vẫn chính xác (có nghĩa là nó phải đang sử dụng chế độ sản xuất) nhưng bây giờ kiểm tra của Chrome nói không có gì là bộ nhớ đệm. – JacobEvelyn