2015-08-22 66 views
10

在ExpressJS爲的NodeJS,我們可以做到以下幾點:在內存中執行express.static()緩存文件嗎?

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

,爲所有的靜態CSS,JS和圖像文件。我的問題是這樣的:

1)當我們這樣做時,Express會自動緩存服務器內存中的文件還是每次提供其中一個資源時都從硬盤讀取文件?

2)當我們這樣做時,Express,默認情況下使用ETag,將資源保存在客戶端的硬盤上,還是僅保存在客戶端的內存上?

+1

1請注意,即使快遞不這樣做(我不確定),您的操作系統可能確實會這樣做。 –

回答

25
  1. 靜態中間件沒有服務器端緩存。它可以讓你做客戶端緩存的方法有兩種:ETag的和最大年齡:

如果瀏覽器看到的ETag與網頁,它會緩存它。下次瀏覽器加載頁面時,它會檢查ETag號碼的變化。如果文件完全相同,其ETag也是一樣的 - 服務器用HTTP 304(「未修改」)狀態碼進行響應,而不是再次發送所有字節並節省一堆帶寬。 Etag的導通,在默認情況下,但你可以關閉它是這樣的:

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

最大年齡是將最大年齡設定一定的時間,因此瀏覽器將只請求後資源有一天已經過去了。

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

有關詳細信息,你可以閱讀本article

  • 默認情況下,它的硬盤驅動器上,但有人可以使用類似於this
  • +0

    因此它每次都嘗試從服務器硬盤讀取......瀏覽器如何?瀏覽器關閉時瀏覽器是否還記得資源? –

    +0

    如果緩存持續存在。 –

    +0

    Dan D. ......我假設你說的是資源確實存儲在客戶端的硬盤上......在什麼情況下緩存會保持並不會持續? –