1、客戶端快取
標籤,這是進行頁面快取最基本的方法。
1
2
傳送到瀏覽器的html頁面中的meta標籤告訴瀏覽器頁面的快取時間以及是否啟用快取等,programa:no-cache內容並不是保證,但大多數瀏覽器都遵從這個約定。
更好的方法是使用header函式,傳送http頭。
1
<?php
2
header(
'expires: mon, 25 feb 2014 00:00:00 gmt'
);
3
header(
'pragma: no-cache'
);
4
?>
可以進一步使用http1.1版本的cache-control頭:
1
<?php
2
header(
'expires: mon,25 feb 2014 00:00:00 gmt'
);
3
header(
'cache-control: no-store, no-cache, must-revalidate'
);
4
header(
'cache-control: post-check=0, pre-check=0'
, false);
5
header(
'pragma: no-cache'
);
6
?>
為了更好控制客戶端快取,可以根據客戶端的請求來判斷,用到的是last-modified和if-modified-since頭,這種行為稱為執行乙個有條件的get請求。
這種方法要求每次訪問php檔案時候都要傳送last-modified頭,瀏覽器下次請求頁面時傳送包含乙個更新時間的if-modified-since頭,指令碼判斷從這個時間之後是否更新了頁面內容。沒有更新就返回乙個304狀態碼後退出。
01
<?php
02
...
//get the filemtime
03
header(
'last-modified: '
.
gmdate
(
'd, d m y h:i:s'
,
$lastfilemtime
).
' gmt'
);
04
05
$request
=
getallheaders
();
06
if
(isset(
$requeset
[
'if-modified-since'
]))
07
11
else
12
15
if
(
$lastmodified
<=
$ifmodifiedsince
)
16
20
....
//output content
21
?>
2、伺服器端快取——使用php的輸出緩衝
php內建的快取機制是輸出緩衝器。當使用echo或者print的情形,可以使用輸出控制函式(以ob開頭)將內容儲存在記憶體緩衝器中。
首先可以將請求的頁面在輸出前,儲存在緩衝器中,如果頁面出現了錯誤,可以隱藏錯誤而不被訪問者看到。
其次可以將輸出緩衝器的內容儲存到乙個檔案中,在下一次請求時判斷修改時間然後沒有過期的話就直接輸出檔案而提高**的訪問效能。這也是進行動態**靜態快取的非常好的實現方式。
01
<?php
02
if
(file_exist(
'./cache.page'
) &&
$lasttime
>=
filemtime
(
'./cache.page'
) )
03
07
08
ob_start();
09
echo
<<
10.......
11
.......
12
eot;
13
14
$buffer
= ob_get_contents();
15
ob_end_flush();
16
17
$fp
=
fopen
(
'./cache.page'
,
'w'
);
18
fwrite(
$fp
,
$buffer
);
19
fclose(
$fp
);
同時,使用這種方法可以將頁面中額某些不常改變的部分快取到不同的檔案中,然後在請求的時候組裝整個頁面來返回響應
快取的概念
許多人認為,快取 是記憶體的一部分 許多技術文章都是這樣教授的 但是還是有很多人不知道快取在什麼地方,快取是做什麼用的 其實,快取是cpu的一部分,它存在於cpu中 cpu訪問資料的速度非常的快,一秒鐘能夠訪問 處理十億條指令和資料 術語 cpu主頻1g 而記憶體就慢很多,快的記憶體能夠達到幾十兆就...
快取的概念
網上整理的資料1 快取的概念 許多人認為,快取 是記憶體的一部分 許多技術文章都是這樣教授的 但是還是有很多人不知道快取在什麼地方,快取是做什麼用的 其實,快取是cpu的一部分,它存在於cpu中 cpu訪問資料的速度非常的快,一秒鐘能夠訪問 處理十億條指令和資料 術語 cpu主頻1g 而記憶體就慢很...
快取概念(一)
一般情況下,乙個 或者乙個應用,它的一般形式是 瀏覽器請求應用伺服器,應用伺服器做一堆計算後再請求資料庫,資料庫收到請求後再作一堆計算後把資料返回給應用伺服器,應用伺服器再作一堆計算後把資料返回給瀏覽器。這個是乙個標準流程.但是隨著互連網的普及,上網的人越來越多,網上的資訊量也越來越多,一般的劃分方...