服務端優化 動態語言靜態化 php 生成html

1 什麼是動態語言靜態化

 將現有的php 等動態語言的邏輯代碼生成爲靜態的html文件,用戶訪問動態腳本重定向到靜態html 文件的過程就是動態語言靜態化。

2 爲什麼要進行靜態化處理

 請求php 文件的過程:

用戶打開瀏覽器 輸入域名--> 找到對應ip地址(dns 服務器進行解析)--> ip返回客戶端 -->客戶端找到真實服務器--> 真實服務器找到相應端口的web服務 (比如80端口)--> 服務器(nginx 反向代理給 php-fpm ,fpm php 解析器)--> 解析成html 瀏覽器能看懂的文件--> 返回html;

如果是請求的html文件則不需要解析php文件以及訪問數據庫,可大大節省數據的查詢。

原因:

  1. 動態腳本通常會做邏輯計算和數據查詢,訪問量越大,服務器壓力越大。
  2. 訪問量大時可能會造成CPU負載過高,數據庫壓力過大。
  3. 靜態化類降低邏輯處理壓力,降低數據庫服務器查詢壓力

ps:但是隻有對實時性要求不高的頁面進行靜態化緩存。

3 靜態化實現的方式

1 使用模板引擎

使用smarty 的緩存機制生成靜態html緩存文件 

2 利用ob系列的函數

//主要用到一下幾個函數
ob_start();// 打開輸出控制緩衝
ob_get_contents(); // 返回輸出緩衝區內容
ob_clean(); //清空輸出緩衝區
ob_end_flush(); // 沖刷出輸出緩衝區內容並關閉緩衝區
<?php
// html to php 動態語言靜態化

if(!empty($_GET['id'])) {
    $id = $_GET['id'];
}else{
    $id = '';
}
$cache_name = md5(__FILE__).'-'.$id.'.html';
$cache_lifetime = 3600;
// 判斷文件是否存在並且未過期
if( file_exists($cache_name) &&
    (filemtime(__FILE__) <= filemtime($cache_name)) &&
    ((filemtime($cache_name) + $cache_lifetime )> time() )){
    echo '這裏走html 緩存';
    include $cache_name;
    exit;
}
//打開輸出控制緩衝
ob_start();
?>
<b>
    this is php to html <?php echo $id;?>;
</b>
<?php
// 返回輸出緩衝區的內容
$content= ob_get_contents();

//沖刷出(送出)輸出緩衝區內容並關閉緩衝
ob_end_flush();
$handle = fopen($cache_name,'w');// 打開文件或者 URL
fwrite($handle,$content);//寫入文件(可安全用於二進制文件)
fclose($handle);//關閉一個已打開的文件指針

?>

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章