1. <em id="g3zke"><tr id="g3zke"></tr></em>
    2. <dd id="g3zke"></dd>
          1. 當前位置:首頁 » 網站相關 » 正文

            網站訪問速度對一個網站來說是非常重要的,訪問慢會流失用戶,訪問快會大大的提高用戶體驗。提升網站訪問速度的方式很多,比如這里提升PHP程序運行速度的幾個優化方案,但火端今天要介紹的是HTTP緩存,也可以叫瀏覽器緩存。

            瀏覽器緩存大概有兩種,200 OK (from memory/disk cache)304 Not Modified各有各的優勢,把他們發揮好可以大大的提升訪問速度。

            1、200 OK (from memory/disk cache)

            這種緩存方式已經很普遍,大部分網站的靜態文件都采用了,200 OK (from memory cache)或者200 OK (from disk cache)都是直接讀取客戶端的緩存,無需再請求服務器。一般是在Apache或者Nginx里設置,比如Nginx配置里會有類似這樣的配置:

            location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
                        {
                            expires      30d;
                        }
            
                        location ~ .*\.(js|css)?$
                        {
                            expires      12h;
                        }
            這樣就可以給靜態文件緩存了,在有效期內,瀏覽器會直接讀取客戶端的緩存,而不用再請求服務器,除非用戶清除了緩存或者使用Ctrl+F5強制刷新了頁面。


            比如上圖,是已經緩存過了的,至于有些是200 OK (from memory cache)有些會是200 OK (from disk cache)都差不多,只是從客戶端取的位置不一樣而已。除了給靜態文件做200 OK (from cache)緩存外,其實我們也可以給某些頁面做,比如一些不經常改變內容的ajax頁面。

            舉個例子:

            一個在線手冊網站,左側是導航,用戶瀏覽手冊時可能會頻繁在不同的文檔頁面來回切換,如果不啟用HTTP緩存,體驗會非常差,如果使用Ajax切換,再加上200 OK (from cache)就可以做到快速切換了,無刷新、無白屏,體驗棒棒噠!

            200緩存能大大的提升速度,但是如果網站內容有更新,訪客是無法及時的獲取最新的內容。這時候我們一般是采用在靜態文件后面加參數來解決,比如 /statis/js/jquery.js?20180505 ,因為是一個新的URL,所以瀏覽器沒有緩存可取,只能取新內容。

            2、304 Not Modified

            304緩存和上面最大的區別是瀏覽器需要向服務器詢問一次,如果服務器端認為沒有內容更新,直接返回304狀態碼,無需返回body內容,瀏覽器就會直接取緩存內容輸出,這樣省掉了沒必要的數據傳輸,也就提升了訪問速度。

            要實現304緩存,我們需要在瀏覽器首次訪問時返回過期時間等header,比如如下PHP代碼:

            $time=86400; //單位秒
            header('Cache-Control:max-age=' . $time);
            header("Expires: " . gmdate("D, d M Y H:i:s", time() + $time) . " GMT");
            header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

            上面的代碼就告訴了瀏覽器緩存時間,下次瀏覽器再訪問該頁面的時候會帶上名叫IF_MODIFIED_SINCE的請求頭來訪問,這時候我們可以用PHP變量:$_SERVER['HTTP_IF_MODIFIED_SINCE']來獲取瀏覽器記錄的緩存時間,如果沒有內容更新,我們直接返回304狀態碼即可,如果有更新直接輸出新內容,并返回新的過期時間給瀏覽器。大概的代碼如下:

            <?php
            $time = 86400;
            if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
                $is_update=0;//判斷是否有更新
                if($c_time > time()){
                    header('Cache-Control:max-age='.$time);
                    header("Expires: " . gmdate("D, d M Y H:i:s",time()+$time)." GMT");
                    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
                    header('HTTP/1.1 304 Not Modified');
                    exit();
                }
            }
            header('Cache-Control:max-age=' . $time);
            header("Expires: " . gmdate("D, d M Y H:i:s", time() + $time) . " GMT");
            header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
            

            具體使用還需要考慮一些其它問題,本站就已經在很多頁面使用了304緩存功能,返回狀態如下圖:

            如何來判斷服務器內容是否有更新有很多種方式,比如Etag功能就可以,關于Etag的介紹可以百度下。網站訪問速度很重要,能快一點,就讓它快一點吧!搞網站就在于折騰,哈!

            本文地址:http://www.nyyv.tw/statuscode-200-304.html
            本文作者:火端,轉載請務必以超鏈接形式注明出處。
            本文標簽:站長,緩存
             關鍵詞: HTTP緩存  200 OK (from cache)  304 Not Modified  
            發表評論

            昵稱 (必填)

            郵箱 (選填,可收到作者回復信息)

            網址 (選填)

            站內搜索

            江苏快3开奖结果今天