20150321--模板替換+OB緩存+頁面靜態化

回顧: php

靜態化的分類: html

真靜態: linux

僞靜態: apache

實現真靜態的方式: 編程

(1)使用ob緩存 windows

ob_start();ob緩存的數據是:響應的主體數據, 緩存

程序緩存:緩存的數據,http返回的數據(頭和主體) 服務器

(2)使用模板替換技術, 併發

1、使用模板替換技術實現真靜態。

一、實現方式: ide

(1)在添加新聞內容的時候,生成對應的新聞詳情的靜態頁面。

(2)在修改新聞內容的時候,要從新生成新聞詳情的靜態頁面。

(3)在訪問新聞詳情頁面的時候,直接訪問生成的靜態頁面

二、基本原理

wps3A38.tmp

三、開始實現:

(1)新建一個新聞表:

create table news(

        id int unsigned primary key auto_increment,

        title varchar(32) not null comment '新聞的標題',

        content text comment '新聞的內容',

        filename varchar(64) not null default '' comment '存儲生成的對應的新聞詳情頁面的路徑'

)engine myisam charset utf8;

(2)action.php頁面代碼:

添加新聞的。核心代碼:

wps3A59.tmp

(3)建立一個新聞列表頁面,

index.php頁面:

核心代碼是新聞詳情的鏈接。

wps3A69.tmp

(4)當修改新聞的時候,則從新生成靜態頁面。

2、擴展,使用模板替換技術實現真靜態

剛纔的案例缺點:

真實的項目中,應該是分前臺和後臺的,

讓前臺靜態化,後臺無需生成靜態頁面。

要讓前臺的首頁也生成一個靜態頁面。

一、項目規劃 :

wps3A6A.tmpwps3A6B.tmpwps3A7C.tmpwps3A7D.tmpwps3A7E.tmpwps3A8E.tmpwps3A9F.tmp

二、action.php頁面完成添加

三、生成前臺的首頁面。

//新建一個後臺的首頁,

3、僞靜態:

從形式上看是一個靜態地址,實際上仍是訪問的動態地址,

好比:訪問:http://www.abc.com/news-sport-id123.html

其實是:http://www.abc.com/news.php?type=sprot&id=123;

主要是利於seo,靜態頁面的方式,比較容易被搜索引擎給蒐集。

一、實現原理:

使用apac he的rewrite機制。

rewrite機制:就是一個url的重寫機制,

好比:請求的url是  abc.html      重寫到abc.php

123.php      abc.php

wps3AB0.tmp

二、如何開啓重寫模塊,

在httpd.conf文件中進行開啓。

wps3AC0.tmp

三、入門案例:

若是請求abc.html   重寫成請求index.php

咱們使用.htaccess來進行配置。使用該文件要保證虛擬主機裏面的allowoverride all爲all

wps3AD1.tmpwps3AD2.tmpwps3AF2.tmp

具體的.htaccess文件中的配置:

wps3B03.tmp

wps3B04.tmp

效果訪問:

訪問abc.html  實際上返回的是運行index.php的結果。

wps3B14.tmp

四、具體的語法:

RewriteEngine on  #開啓重寫引擎

RewriteCond  重寫條件,要知足必定的條件才重寫。

RewriteCond條件的語法:

RewriteCond   判斷依據   條件表達式 [條件標誌]

(1)判斷依據:可使用服務器變量:

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

好比:%{REQUEST_FILENAME}  表示請求的文件名稱

好比:%{HTTP_REFERER}:表示請求的來源。

wps3B35.tmp

(2)條件表達式:能夠是一些標誌,或者字符串

好比:

-d   表示是一個目錄

-f    表示是一個文件

RewriteCond %{REQUEST_FILENAME} !-d  //若是請求的路徑不是一個目錄

RewriteCond %{REQUEST_FILENAME} !-f  //若是請求的路徑不是一個文件

(3)[條件標誌]

[NC]表示不區分大小寫

[OR],在默認狀況下多個條件(RewriteCond)之間是而且的關係。若是咱們使用或關係則後臺添加[OR]標誌。

案例1:好比咱們請求,123.html,若是123.html文件存在,則請求123.html文件,若是不存在則執行重寫規則。

RewriteCond   %{REQUEST_FILENAME} !-f

RewriteRule  123.html   index.php

RewriteRule  語法規則

RewriteRule   規則的url(可使用正則)  目標url  [規則標誌]

規則標誌:

[F] 表示:表示禁止重寫

[NC] 表示:不區分大小寫

五、使用重寫機制來完成一個防盜鏈效果:

referer信息表示:請求的來源,使用哪一個文件請求的。

wps3B45.tmp

思路:經過請求資源的referere信息獲取當前的域名,好比域名爲www.demo.com,若是referer中沒有該域名,則禁止訪問。

wps3B46.tmpwps3B47.tmpwps3B58.tmp

能夠添加一張圖片給一個提示;

wps3B69.tmp

六、在ecshop裏面是使用rewrite機制來完成僞靜態。

在沒有使用僞靜態地址是:

http://www.itecshop.com/goods.php?id=5

ec裏面默認的僞靜態地址:

http://www.itecshop.com/goods-9.html

咱們本身要作的就是:

http://www.itecshop.com/goods-9.html地址重寫成

http://www.itecshop.com/goods.php?id=9便可

RewriteRule  goods-(\d+).html  goods.php?id=$1

$1是捕捉到第一個子模式,即 (\d+)的內容。

擴展:好比訪問:http://www.abc.com/news-sport-id100.html

重寫成http://www.abc.com/news.php?type=sport&id=100

RewriteRule news-(music|sposrt)-id(\d+).html   news.php?type=$1&id=$2    

wps3B79.tmp

七、規則標誌[QSA]的使用

查詢的字符串追加:

定義的規則

wps3B7A.tmp

在沒有使用[QSA]以前:

wps3B8B.tmp

在規則後面添加[QSA]

wps3B9B.tmp

使用效果:

wps3BAC.tmp

4、網站併發測試工具

主要測試網站的代碼的執行速度。

wps3BBD.tmp

基本使用:

語法:

wps3BBE.tmp

ab.exe  -n 訪問的總的次數  -c 併發量  頁面的url地址。wps3BCE.tmp

wps3BCF.tmpwps3BD0.tmpwps3BD1.tmpwps3BD2.tmpwps3BE3.tmpwps3BE4.tmp

一、在默認狀況下,apache的最大併發爲150個,所以須要調整

首先搞清楚當前apache是什麼MPM(多路處理模塊), 通俗講就是apache處理多併發的方式,

常見的有三種

(1)perfork(預派生模式)

wps3C14.tmp

(2)worker(工做者模式)

wps3C24.tmp

(3)winnt模式(windows下默認的模式)

wps3C35.tmp

二、開啓MPM(處理併發的方式)

在httpd.conf文件中,開啓

wps3C46.tmp

主要是使用httpd-mpm.conf文件進行配置。

wps3C56.tmp

三、如何查看當前apache使用哪種MPM

httpd.exe –l

wps3C67.tmpwps3C68.tmpwps3C79.tmp

在window是主要使用winntmpm,

在linux下面經常使用,perfork(預派生模式)

linux下通常是perfor模式

給你們一個合理的建議配置. 對大部分網站,中型網站,配置:

<IfModule mpm_prefork_module>
              StartServers         5      #預先啓動
              MinSpareServers      5
              MaxSpareServers      10  #最大空閒進程
              ServerLimit          1500   #用於修改apache編程參數
              MaxClients           1000   #最大併發數
              MaxRequestsPerChild  0  #一個進程對應的線程數,對worker    更有效果。若是是0則不讓進程死掉。

</IfModule>

若是你的網站pv值  百萬

ServerLimit          2500   #用於修改apache編程參數
MaxClients           2000   #最大併發數

image

相關文章
相關標籤/搜索