讓你的網站更好地利用瀏覽器緩衝

來源:互聯網
上載者:User

當我們想盡辦法提高伺服器負載能力的時候,是否曾想過,其實瀏覽器也有緩衝功能,我們也可以利用瀏覽器的緩衝功能來減少伺服器的負載,提高網站輸送量?本章我們就來講講瀏覽器的緩衝功能並加以利用。 

當我們使用抓包工具查看http狀態時,我們可以看到200,304,from cache之類的標識,也許你也早已注意到了他們,並明白他們的意思。但是,你是否想過在你的程式中加入代碼主動告訴瀏覽器,更好地利用瀏覽器緩衝。 

備忘:本章所有案例都是使用chrome 17.0.963.79 m瀏覽器,測試方式為每次開啟瀏覽器新視窗的方式測試,而不是F5重新整理。 

我們先做一個沒有緩衝的頁面,叫做nocache.php
代碼如下:

 
  1. <?php 
  2. echo time(); 
  3. ?> 

用瀏覽器開啟,我們可以看到每次開啟頁面,都是列印新的時間,返回的狀態代碼是200,表明在預設情況下,我們的瀏覽器沒有使用緩衝。

我們再做一個頁面,叫做last_modified.php
代碼如下:

 
  1. <?php 
  2. $cache_time = 3600; 
  3. $modified_time = @$_SERVER['HTTP_IF_MODIFIED_SINCE']; 
  4. if( strtotime($modified_time)+$cache_time > time() ){ 
  5.     header("HTTP/1.1 304"); 
  6.     exit; 
  7. header("Last-Modified: ".gmdate("D, d M Y H:i:s", time() )." GMT");  
  8. echo time(); 
  9. ?> 

用瀏覽器開啟,我們可以看到第一次開啟,返回的狀態代碼為200,列印時間為最新時間。然後我們第二次開啟,可以看到狀態代碼為304,時間和剛才的時間一樣,表明我們是使用到緩衝了。我們刪除last_modified.php檔案,然後第三次開啟頁面,瀏覽器返回404錯誤,可見Last-Modified雖然使用了緩衝,但是每次開啟頁面依然需要向伺服器發起http請求,瀏覽器根據使用者的$_SERVER['HTTP_IF_MODIFIED_SINCE']來判斷瀏覽器的內容是否到期,沒到期的話返回304狀態,瀏覽器內容從緩衝中讀取。

我們再做一個頁面,叫做 expires.php
代碼如下:

 
  1. <?php 
  2. $cache_time = 3600; 
  3. header("Expires: ".gmdate("D, d M Y H:i:s", time()+$cache_time )." GMT");    
  4. echo time(); 
  5. ?> 

用瀏覽器開啟,我們可以看到第一開啟,返回的狀態為200,時間為最新的時間。然後我們第二次開啟,可以看到狀態代碼依然是200,時間依然是舊的時間,Size欄目顯示為from cache,表示內容是直接從瀏覽器讀取。我們刪除expires.php檔案,然後第三次在新視窗中開啟,可以看到返回200狀態代碼,列印時間依然是舊的,Size依然提示為from cache,由此可見,設定了Expires,就算刪除頁面,瀏覽器端依然可以顯示,表明瀏覽器根本就沒有向伺服器發起http請求。 

到這裡,也許你會感覺Expires比Last-Modified緩衝效果更好是吧,因為本地有快取資料時,不需要向伺服器發起http請求,伺服器的並發數會明顯的減少,可以少處理很多http請求。但是Expires也有缺點,那就是設定的到期時間是伺服器的時間,而不是你本地的時間,這樣如果伺服器時間跟你本地時間不一致時,可能並沒有起到緩衝的效果。HTTP/1.1為了彌補Expirse的不足,引入了Cache-Control標記。格式如下Cache-Control: max-age=<second>,這個時間是相對瀏覽器本地時間,所以更加準確。

我們再做一個頁面,叫做cached_control.php
代碼如下:

 
  1. <?php 
  2. $cache_time = 3600; 
  3. header("Cache-Control: max-age=".$cache_time); 
  4. echo time(); 
  5. ?> 

我們測試可以得到設定Expires一樣的效果,也就是緩衝後,刪除檔案,依然在瀏覽器緩衝有效期間內可以正常訪問頁面。 

好了,over了,下次當你伺服器並發太高,伺服器資源和頻寬資源不足時,請記住偉大的瀏覽器緩衝吧!也許你依然不以為然,覺得提高伺服器的輸送量有很多辦法,比如在伺服器端做緩衝,把頁面靜態化,等等。但是我相信有一個東西你應該會在意,沒錯,就是頻寬,在意吧?如果能利用好瀏覽器緩衝,將可以降低你的寬頻資源,這樣不是很好嗎。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.