福州網(wǎng)站建設(shè)>網(wǎng)站新聞>php技術(shù)

        了解php到瀏覽器的緩存機(jī)制

        發(fā)布日期:2018-05-26瀏覽次數(shù):1182 來源:福州網(wǎng)站建設(shè)

        所有的php程序員都知道在php腳本里面執(zhí)行 echo “1”;訪客的瀏覽器里面就會(huì)顯示“1”。

        但是我們執(zhí)行下面的代碼的時(shí)候,并不是顯示“1”之后5秒再顯示“2”,而是等待5秒后直接顯示“12”

        echo '1';
        sleep(5);
        echo '2';


        這就涉及到幾個(gè)緩存機(jī)制,為了更高的薪水,同學(xué)們非常有必要把這個(gè)緩存機(jī)制學(xué)習(xí)好。

        通常情況下,我們的web應(yīng)用由以下幾個(gè)要素構(gòu)成:

        php->apache->瀏覽器。這篇文章我們就以這個(gè)架構(gòu)為例來講解數(shù)據(jù)是如何在整個(gè)“鏈條”上流通的。

         

         

        看了上面的圖,我們終于知道上面為什么會(huì)同時(shí)顯示“12”了,因?yàn)閑cho '1'還沒有裝滿php的緩存,所以“1”還在php的緩存里面,沒有到瀏覽器,等到程序結(jié)束后“12”才一起到瀏覽器。

        當(dāng)然我們也可以手動(dòng)刷新緩存

        echo '1';
        ob_flush(); //把php緩存寫入apahce緩存
        flush(); //把a(bǔ)pahce緩存寫入瀏覽器緩存
        sleep(5);
        echo '2';

        我們把代碼改成如上之后,瀏覽器還是要等5秒才同時(shí)顯示“12”,這是因?yàn)?ldquo;1”雖然已經(jīng)發(fā)送給瀏覽器,但是瀏覽器緩存還沒有裝滿,并沒有渲染,一直到等到程序結(jié)束后才渲染出“12”。

        我們以谷歌瀏覽器為例(緩存1000bytes),通過下面的代碼,我們就可以實(shí)現(xiàn)先顯示“1”,隔5秒再顯示“2”

        echo str_repeat(' ' ,1000); //這里會(huì)把瀏覽器緩存裝滿
        echo '1';
        ob_flush(); //把php緩存寫入apahce緩存
        flush(); //把a(bǔ)pahce緩存寫入瀏覽器緩存
        sleep(5);
        echo '2';

         講到這里,我們不得不提一下“ob_start()”這個(gè)函數(shù),這個(gè)函數(shù)的作用就是開啟一個(gè)新的php緩存,但是這個(gè)緩存遠(yuǎn)遠(yuǎn)不止4096,php文檔中描述的是這個(gè)緩存足夠大。我們還是通過代碼來說明

        復(fù)制代碼
        ob_start();
        echo str_repeat(' ' ,1000); //這里會(huì)把瀏覽器緩存裝滿
        echo '1';
        ob_flush(); 
        flush(); //把a(bǔ)pahce緩存寫入瀏覽器緩存
        sleep(5);
        echo '2';
        復(fù)制代碼

        在原有的基礎(chǔ)上我們僅僅加了個(gè)ob_start(),結(jié)果又變成了等5秒后同時(shí)顯示"12"了。這是因?yàn)槊恳粋€(gè)ob_start()都在原來的緩存空間上開辟一個(gè)子緩存空間,ob_flush()是把當(dāng)前緩存空間輸出到上級(jí)緩存空間,php只有一個(gè)緩存空間的時(shí)候,上級(jí)緩存空間就是apache的緩存,當(dāng)php有多個(gè)緩存空間的時(shí)候,ob_flush()的就不能把php緩存寫入apache緩存了。我們還是借助圖片來理解:

        以上是由福州網(wǎng)站建設(shè)的小編為你分享了"了解php到瀏覽器的緩存機(jī)制"文章,如果你在這方面有什么問題,隨時(shí)聯(lián)系我們

        php技術(shù)有關(guān)的文章
        如果您有什么問題,歡迎咨詢我們客服! 點(diǎn)擊QQ咨詢