2010-05-30 47 views
5

想象一下以下的用例:HTTP標頭:Last-Modified - 它如何最大限度地減少服務器負載?

我使用AJAX請求得到一些信息關於Item和使用這個網址:http://domain/items/show/1

我的數據庫中的所有項目都有一個名爲modified_at我們存儲的時刻,本場項目先前已修改。

如果我們需要每次在服務器端處理此請求,Last-Modified服務器HTTP頭如何響應可以最大限度地減少加載/減少請求/提高響應速度?看起來我們不會減少具有該響應的HTTP請求數量,也不會減少服務器上的負載。

誰還需要這個?

我說得對,它主要用於節省帶寬?

回答

3

其目的是節省帶寬,而不是在您的服務器上,但在客戶端上。無法訪問的AJAX請求可能會讓訪問者的UI變得非常慢,而不必一遍又一遍地傳輸數據,從而大大提高了客戶端瀏覽器的性能。

如果你想減少reqs的數量,你應該在響應中設置一個明確的Expires標題。在Expires設置的時間用完之前,客戶端不會請求資源。

1

如果你的實現總是需要一個數據庫查詢,那麼實現304的機會不會有太大的好處。您可能只會保存呈現響應所需的資源。如果您的渲染需要大量處理,即使您需要數據庫查詢,它仍然值得。但是,如果您有一種將請求uri映射到expires日期而不使用數據庫的機制,則可能會注意到響應時間和保存的服務器資源有了較大的改進。

我如何實現一個類似的方案,是通過緩存每個請求到磁盤。文件中的第一行(以不需要掃描的方式命名)包含元數據,如etagttl。根據文件的修改時間和存儲在其中的ttl,我可以通過從磁盤只讀取一行,決定是否應發送304響應(返回客戶端),緩存文件的內容(新客戶端,或者返回沒有看到最近呈現的客戶端),或者通常處理請求,同時緩存刷新的結果。

有關實現304響應的更多信息,請參閱此問題。 Is my implementation of HTTP Conditional Get answers in PHP is OK?

相關問題