PHP頁(yè)面靜態(tài)化的優(yōu)缺點(diǎn)與實(shí)現(xiàn)
前言
隨著網(wǎng)站的內(nèi)容的增多和用戶訪問(wèn)量的增多,網(wǎng)站加載會(huì)越來(lái)越慢,受限于帶寬和服務(wù)器同一時(shí)間的請(qǐng)求次數(shù)的限制,,我們往往需要在此時(shí)對(duì)我們的網(wǎng)站進(jìn)行代碼優(yōu)化和服務(wù)器配置的優(yōu)化。
一、頁(yè)面靜態(tài)化概念
靜態(tài)化定義
靜態(tài)化就是指把原本的動(dòng)態(tài)生成的 html 頁(yè)面變成靜態(tài)內(nèi)容保存起來(lái),當(dāng)用戶客戶端請(qǐng)求的時(shí)候,直接返回靜態(tài)頁(yè)面,不用再經(jīng)過(guò)服務(wù)渲染,不用查詢數(shù)據(jù)庫(kù),可以大大減少服務(wù)器和數(shù)據(jù)庫(kù)壓力,顯著提升網(wǎng)站性能。
靜態(tài)頁(yè)面
靜態(tài)頁(yè)面,即靜態(tài)網(wǎng)頁(yè),是實(shí)際存在的,無(wú)需經(jīng)過(guò)服務(wù)器的編譯,直接加載到客戶瀏覽器上顯示出來(lái)。靜態(tài)頁(yè)面需要占一定的服務(wù)器空間,且不能自主管理發(fā)布更新的頁(yè)面,如果想更新網(wǎng)頁(yè)內(nèi)容,要通過(guò)FTP軟件把文件DOWN下來(lái)用網(wǎng)頁(yè)制作軟件修改(通過(guò)fso等技術(shù)例外)。常見的靜態(tài)頁(yè)面舉例:.html擴(kuò)展名的、.htm擴(kuò)展名的。
動(dòng)態(tài)頁(yè)面
動(dòng)態(tài)頁(yè)面是通過(guò)執(zhí)行asp,php,jsp,.net等程序生成客戶端網(wǎng)頁(yè)代碼的網(wǎng)頁(yè)。 動(dòng)態(tài)頁(yè)面通??梢酝ㄟ^(guò)網(wǎng)站后臺(tái)管理系統(tǒng)對(duì)網(wǎng)站的內(nèi)容進(jìn)行更新管理。發(fā)布新聞,發(fā)布公司產(chǎn)品,交流互動(dòng),博客,網(wǎng)上調(diào)查等,這都是動(dòng)態(tài) 網(wǎng)站的一些功能。也是我們常見的。 動(dòng)態(tài)頁(yè)面常見的擴(kuò)展名有:.asp .php .jsp .cgi.aspx 等。 注意:動(dòng)態(tài)頁(yè)面的“動(dòng)態(tài)”是網(wǎng)站與客戶端用戶互動(dòng)的意思,而非網(wǎng)頁(yè)上有動(dòng)畫的就是動(dòng)態(tài)頁(yè)面。
靜態(tài)化分類
- 從形式看:純靜態(tài)和偽靜態(tài)
- 從范圍看:整體靜態(tài)化和局部靜態(tài)
靜態(tài)化優(yōu)點(diǎn)和缺點(diǎn)
優(yōu)點(diǎn):
- 適合 SEO,有利于搜索引擎收錄
- 提升網(wǎng)站速度和穩(wěn)定性
- 網(wǎng)站更加安全,HTML 頁(yè)面避免 PHP 相關(guān)漏洞
缺點(diǎn):
- 生成靜態(tài)頁(yè)面多,占用更多的存儲(chǔ)空間
- 增加網(wǎng)站開發(fā)成本和維護(hù)成本
二、靜態(tài)化實(shí)現(xiàn)
認(rèn)識(shí) PHP Buffer
在php中,buffer其實(shí)就是緩沖區(qū),一個(gè)內(nèi)存地址空間,主要用于存儲(chǔ)數(shù)據(jù);默認(rèn)是開啟狀態(tài),大小默認(rèn)4096,在php.ini文件中由output_buffering配置,只有當(dāng)緩沖區(qū)滿了或者 php 運(yùn)行完畢,才將數(shù)據(jù)輸出去。
php.ini 代碼示例:
output_buffering = on #打開output緩沖,默認(rèn)打開的。
緩沖流程:
# 詳細(xì)了解輸出過(guò)程,大家可以自行查閱
1.打開了 php 輸出緩存: echo,print -> php output_buffring -> server buffering -> browser buffering -> browser display
2.未打開 php 輸出緩存: echo,print -> server buffering -> browser buffering -> browser display
原生PHP輸出(創(chuàng)建 index.php 文件,本地配置虛擬域名"www.test.vip")。
代碼如下(示例):
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<title>網(wǎng)頁(yè)靜態(tài)化</title>
</head>
<body>
<h1>排名</h1>
<ul>
<?php for ($i = 1; $i <= 5; $i++) { ?>
<li>No.<?php echo $i; ?></li>
<?php } ?>
</ul>
<?php ?>
</body>
</html>請(qǐng)求如下(www.test.vip/index.php):

使用PHP文件讀寫功能生成靜態(tài)頁(yè)面
代碼如下(示例):
<?php
$data = '<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<title>網(wǎng)頁(yè)靜態(tài)化</title>
</head>
<body>
<h1>排名</h1>
<ul>
<li>No.1</li>
<li>No.2</li>
<li>No.3</li>
<li>No.4</li>
<li>No.5</li>
</ul>
</body>
</html>';
$fp = fopen("index.html", "w");
if (!$fp) {
echo "System Error";
exit();
}
fwrite($fp, $data);
fclose($fp);
echo "生成 index.html 成功!";其中"$data"數(shù)據(jù)是解析好的前端代碼,若包含 PHP 原生代碼是無(wú)法解析的,那如何把動(dòng)態(tài)的 PHP 語(yǔ)言靜態(tài)化?
PHP OB 緩存機(jī)制生成靜態(tài)頁(yè)面
代碼如下(示例):
<?php
ob_start();
require_once('index.php'); // 引入模版文件
$data = ob_get_contents();
file_put_contents('index.html', $data); // 生成靜態(tài)文件 index.html
ob_end_clean(); // 輸出信息并清除緩存
$fp = fopen("index.html", "w");
if (!$fp) {
echo "System Error";
exit();
}
fwrite($fp, $data);
fclose($fp);
echo "生成 index.html 成功!";其他
ob_start() // 打開輸出控制緩沖,若 php.ini 已經(jīng)開啟,那么這里會(huì)開啟一個(gè)新的輸出緩沖區(qū);
ob_get_length() // 返回輸出緩沖區(qū)的長(zhǎng)度
ob_get_level() // 返回輸出緩沖區(qū)的嵌套級(jí)別
ob_get_status() // 返回輸出緩沖區(qū)的狀態(tài)(數(shù)組形式返回,默認(rèn)返回最頂層,參數(shù)為true時(shí)返回所有)
ob_get_contents() // 返回輸出緩沖區(qū)的內(nèi)容
ob_get_clean() // 以字符串格式返回當(dāng)前輸出緩沖區(qū)并關(guān)閉輸出緩沖,等價(jià)于ob_get_contents和ob_end_clean);
ob_end_clean() // 清空(擦除)緩沖區(qū)并關(guān)閉輸出緩沖
ob_get_flush() // 以字符串返回輸出緩沖區(qū)內(nèi)容并關(guān)閉緩沖
ob_end_flush() // 沖刷出(送出)輸出緩沖區(qū)內(nèi)容緩沖并關(guān)閉輸出緩沖
到此這篇關(guān)于PHP頁(yè)面靜態(tài)化的優(yōu)缺點(diǎn)與實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)PHP頁(yè)面靜態(tài)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- PHP實(shí)現(xiàn)頁(yè)面靜態(tài)化深入講解
- PHP頁(yè)面靜態(tài)化——純靜態(tài)與偽靜態(tài)用法詳解
- PHP單例模式數(shù)據(jù)庫(kù)連接類與頁(yè)面靜態(tài)化實(shí)現(xiàn)方法
- 實(shí)例講解PHP頁(yè)面靜態(tài)化
- PHP 實(shí)現(xiàn)頁(yè)面靜態(tài)化的幾種方法
- 利用php的ob緩存機(jī)制實(shí)現(xiàn)頁(yè)面靜態(tài)化方法
- 詳解php實(shí)現(xiàn)頁(yè)面靜態(tài)化原理
- PHP實(shí)現(xiàn)頁(yè)面靜態(tài)化的超簡(jiǎn)單方法
- PHP實(shí)現(xiàn)HTML頁(yè)面靜態(tài)化的方法
相關(guān)文章
php正則匹配文章中的遠(yuǎn)程圖片地址并下載圖片至本地
這篇文章主要介紹了php正則匹配文章中的遠(yuǎn)程圖片地址并下載圖片至本地的實(shí)現(xiàn)技巧,可實(shí)現(xiàn)采集并保存遠(yuǎn)程圖片的功能,是非常實(shí)用的技巧,感興趣的小伙伴可以參考一下2015-09-09
PHP大文件及斷點(diǎn)續(xù)傳下載實(shí)現(xiàn)代碼
這篇文章主要介紹了PHP大文件及斷點(diǎn)續(xù)傳下載實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
PHP轉(zhuǎn)換文本框內(nèi)容為HTML格式的方法
這篇文章主要介紹了PHP轉(zhuǎn)換文本框內(nèi)容為HTML格式的方法,通過(guò)自定義函數(shù)實(shí)現(xiàn)字符串轉(zhuǎn)換為HTML格式的功能,涉及php針對(duì)HTML標(biāo)簽的替換技巧,需要的朋友可以參考下2016-07-07
Fatal error: Call to undefined function curl_init()解決方法
Fatal error: Call to undefined function curl_init()解決方法2010-04-04
在zblog首頁(yè)調(diào)用不同欄目的列表數(shù)據(jù)
這篇文章主要介紹了在zblog首頁(yè)調(diào)用不同欄目的列表數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-08-08
PHP常用特殊運(yùn)算符號(hào)和函數(shù)總結(jié)(php新手入門必看)
新手經(jīng)常會(huì)有一些PHP特殊符號(hào)的問(wèn)題,這里把常用的特殊符號(hào)整理一下。如果你全部都會(huì)用,那就當(dāng)是溫故知新吧2013-02-02

