2015-08-22 15 views
10

Trong ExpressJS cho NodeJS, chúng ta có thể làm như sau:Tệp express.static() có trong bộ nhớ cache không?

app.use(express.static(__dirname + '/public')); 

để phục vụ tất cả các CSS tĩnh, JS, và các tập tin hình ảnh. Câu hỏi của tôi là:

1) Khi thực hiện điều đó, Express có tự động lưu các tệp trong bộ nhớ của máy chủ hoặc đọc từ đĩa cứng mỗi khi một trong các tài nguyên được phân phối không?

2) Khi thực hiện điều đó, Express, sử dụng ETag theo mặc định, lưu tài nguyên trên đĩa cứng của máy khách hoặc chỉ trên bộ nhớ của máy khách?

+1

1 Xin lưu ý rằng ngay cả khi thể hiện không làm điều này (Tôi không chắc chắn), hệ điều hành của bạn thực sự có thể làm. –

Trả lời

25
  1. Phần mềm trung gian tĩnh không có bộ đệm ẩn phía máy chủ. Nó cho phép bạn thực hiện hai phương pháp client-side caching: ETag và Max-Tuổi:

Nếu trình duyệt thấy ETag với trang, nó sẽ lưu nó. Lần sau khi trình duyệt tải trang, nó sẽ kiểm tra các thay đổi số ETag. Nếu tập tin là chính xác như nhau, và do đó là ETag của nó - máy chủ đáp ứng với một HTTP 304 ("không sửa đổi") mã trạng thái thay vì gửi tất cả các byte một lần nữa và tiết kiệm một loạt các băng thông. ETag được bật-on theo mặc định nhưng bạn có thể tắt nó đi như thế này:

app.use(express.static(myStaticPath, { 
    etag: false 
})) 

Max-tuổi là sẽ thiết lập max-age với một số lượng thời gian để trình duyệt sẽ chỉ yêu cầu tài nguyên sau một ngày trôi qua.

app.use(express.static(myStaticPath, { 
    maxage: '2h' 
})) 

Để biết thêm chi tiết bạn có thể đọc article

  1. Theo mặc định nó trên ổ cứng, nhưng ai đó có thể sử dụng giống như this
+0

Vì vậy, nó cố gắng để đọc từ đĩa cứng máy chủ mỗi lần ... Làm thế nào về trình duyệt? Trình duyệt có còn nhớ tài nguyên khi trình duyệt đã bị đóng không? –

+0

Nếu bộ nhớ cache vẫn còn. –

+0

Dan D. ...... Tôi đoán bạn đang nói rằng các tài nguyên thực sự được lưu trữ trong ổ đĩa cứng của khách hàng ... Trong điều kiện nào bộ nhớ cache tồn tại và không tồn tại? –

Các vấn đề liên quan