大型網站提速方法

如何為(wèi)大型網站提速?緩存技(jì )術memcache、  靜态化、 mysql優化,分(fēn)别從内存,文(wén)件,數據庫三個方面來進行優化達到給網站提速的目的.
 

1. 訪問php的速度比html慢

在apache / bin /ab.exe  可(kě)以做壓力測試,該工(gōng)具(jù)可(kě)以模拟多(duō)人,并發訪問某個頁(yè)面.

基本的用(yòng)法

//–n 10000 請求多(duō)少次

//–c 10   

 ab.exe –n 10000  –c 10

-n 表示 請求多(duō)少次

-c 表示 多(duō)少人

2. 靜态化利于seo

3. 防止sql注入

① 真靜态

方法1: 使用(yòng)php自身的緩存機制

       output_buffering 緩存

       程序緩存

如果要測試php自己的緩存機制, 需要做配置.

php.ini 文(wén)件

display_errors=On

output_buffering=Off

error_reproting= 設置錯誤級别

看一段代碼

<?php

echo “yyy”;

header(“content-type:text/htm;charset=utf-8”);

echo “hello”;

?>

開啓緩存:  1.   Ob_start();

            2.   Php.ini

Ob_get_contents() 獲取 output_buffering 的内容

Ob_clean();清空 output_buffering 的内容

Ob_end_clean() 關閉緩存 并删除ob 内容

Ob_end_flush() 輸出緩存ob内容并關閉緩存

Ob_flush() 輸出緩存ob内容并清空

Flush() 刷新(xīn)程序緩存的内容

Str_repeat("",100);  //顯示100個空白

這裏我們看一個綜合案例,需求如下:

傳統解決方法:

頁(yè)面靜态化思路:

因為(wèi)新(xīn)聞這種信息不是對實時性要求高,并且比較穩定,所以我們可(kě)以這樣做,當第一個用(yòng)戶訪問某條新(xīn)聞後,我們使用(yòng)ob的緩存機制,把内容緩存到html頁(yè)面,當下一次訪問時,直接訪問html即可(kě).

問題?

1. 如果我們的新(xīn)聞更新(xīn)了,這樣我們的靜态頁(yè)面不變->解決

解決方法1,我們可(kě)以判斷靜态頁(yè)面是否過期(30s) ,如果過期,則重新(xīn)創建

代碼:-->

if(file_exists($html_filename)&& filemtime($html_filename)+30>time()){

//直接訪問html頁(yè)面(把html頁(yè)面的内容 echo 浏覽器)

echo file_get_contents($html_filename);

exit;

}

難道這樣就完美了嗎?

1. news_list.php頁(yè)面中(zhōng)點擊 查看時候,仍然是一個php頁(yè)面-> html網址

2. 實時性不夠好,30s的延時..

解決思想:

當我們添加新(xīn)聞或者更新(xīn)新(xīn)聞的時候,就同步的更新(xīn)html靜态頁(yè)面,通常的做法,設計模闆文(wén)件(網頁(yè)設計師/美工(gōng)),通過模闆創建靜态頁(yè)面.

整理(lǐ)思路

提出為(wèi)什麽需要靜态化.

靜态化的方式( 使用(yòng)ob 緩存來實現靜态化 問題1 實時性不好,有(yǒu)延時, 2, 請求某個查詢頁(yè)面時使用(yòng) php動态網站)

真靜态 (在 添加和修改的時候,可(kě)以實時的處理(lǐ)靜态頁(yè)面 問題 如果數據時海量的,造成真靜态的html 文(wén)件過多(duō),占用(yòng)磁盤很(hěn)大.)僞靜态技(jì )術

② 僞靜态

我們可(kě)以有(yǒu)兩種方法來處理(lǐ)

1. 在php文(wén)件中(zhōng),直接使用(yòng)正則表達式技(jì )術處理(lǐ)

代碼:

<?php

//echo "hello ok";

//echo "<pre>";

//print_r($_SERVER);

//echo "</pre>";

$parameters=$_SERVER['PATH_INFO'];

if(preg_match('/^\/(\d+),(\d+),(\d+)\.html/si',$parameters,$arr)){

echo $arr[1]."<br/>";

echo $arr[2]."<br/>";

echo $arr[3]."<br/>";

}else{

echo "輸入的地址有(yǒu)誤!";

}

?>

課後練習:

請使用(yòng)正則表達式完成

在news.php頁(yè)面中(zhōng)可(kě)以獲取到

news  sport  5

提出問題?

 

相當向 http://localhost/news.php?class=sport&id=56

2. 配置apache的rewrite來處理(lǐ)

快速入門案例

請求

原理(lǐ)圖

如何使用(yòng)rewrite步驟:

1. 配置apache,啓用(yòng)rewrite機制

在httpd.conf中(zhōng)啓用(yòng)rewrite

LoadModule rewrite_module modules/mod_rewrite.so

2. 配置虛拟主機

到 c盤 hosts文(wén)件添加你的 ip 和 域名(míng)對應

127.0.0.1      

在 http.conf 文(wén)件中(zhōng)啓用(yòng)虛拟主機

# Virtual hosts 啓用(yòng)虛拟主機

Include conf/extra/httpd-vhosts.conf

3. 配置 httpd_vhosts.conf文(wén)件

在 <Direcotry >段的配置,默認值,是在httpd.conf 的中(zhōng)配置,看根目錄.

<VirtualHost *:80>

    #ServerAdmin webmaster@dummy-host2.somenet.com

    #文(wén)檔的根目錄

    DocumentRoot "C:/myenv/apache/htdocs/static3"

    #域名(míng)

    ServerName www.hsp.com

    ErrorLog "logs/dummy-host2.somenet.com-error.log"

    #CustomLog "logs/dummy-host2.somenet.com-access.log" common

    #配置rewrite相關選項,

    <Directory "C:/myenv/apache/htdocs/static3">

    #拒絕所有(yǒu)的訪問

    #Deny from all

    Allow from all

    #是否顯示列表(在發布項目後一般是不啓用(yòng),對于這個配置,針對 DocumentRoot在htdos外的目錄生效)

    #Options +indexes

    #是否啓用(yòng)rewrite

    #Allowoverride  all

    </Directory>

</VirtualHost>

4.在目錄下添加了一個 .htaccess  文(wén)件,這個文(wén)件時配置rewrite機制和規則

<IfModule rewrite_module>

#寫你的rewrite規則

RewriteEngine On

#news-id(\d+)\.html$ 是規則  news.php?id=$1 是轉發的頁(yè)面

#正則 子表達式 捕獲 反向引用(yòng)

#  "news-id33.html"

# 可(kě)以配置多(duō)個規則,匹配的順序是從上到下

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

RewriteRule  news-id(\d+)\.html$     error.php

</IfModule>

綜合使用(yòng)案例

4. 這個rewrite的規則也直接在 < Direcotry > 段直接配置

<Directory "C:/myenv/apache/htdocs/static3">

    #拒絕所有(yǒu)的訪問

    #Deny from all

    Allow from all

    #是否顯示列表(在發布項目後一般是不啓用(yòng),對于這個配置,針對 DocumentRoot在htdos外的目錄生效)

    #Options +indexes

    #是否啓用(yòng)rewrite

    Allowoverride  all

    #我們有(yǒu)時候,也可(kě)以把rewrite機制和規則寫這裏

    #RewriteEngine On

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

    </Directory>

使用(yòng)僞靜态來完成簡單的新(xīn)聞查詢.

☞ 僞靜态是站在seo角度看.,他(tā)對于的頁(yè)面不是存在的,而是每次查詢數據庫得到的信息,

真靜态的頁(yè)面是真的存在.

如果隻是為(wèi)了seo, 完全不希望有(yǒu)html ,那就隻使用(yòng) 僞靜态.

如果的網址要seo ,項目 數據大(1000 w) 你就希望僞靜态同時ob 來緩存.

如何更好的使用(yòng) 僞靜态+ob

在windows 下

① 編寫一個 clear.php 文(wén)件,可(kě)以去檢測某個目錄下的文(wén)件是否過期

② 在編寫my.bat文(wén)件

"C:\\myenv\\apache\\bin\\ab.exe" -n 1 -c 1

③ 在windows使用(yòng)任務(wù)計劃.

④ ok

在linux

使用(yòng)crontab 參看 linux視頻.

面試題: 請說明一下僞靜态和真靜态的特點和區(qū)别

①真靜态訪問效率高,利于seo.可(kě)以減少對數據庫的操作(zuò)。但是會占用(yòng)大量

的磁盤.

②僞靜态一、可(kě)以方便的實現對搜索引擎的優化,二、占空間比較小(xiǎo)。三、通過生成不同view-id2.hmtl 可(kě)以實現内容的變化.四有(yǒu)效的防止了注入攻擊

小(xiǎo)結: 如果一個網頁(yè)會被頻繁的訪問(比如百萬級别),通過該網頁(yè)每次都會去操作(zuò)數據庫,可(kě)以考慮使用(yòng)真靜态(建議有(yǒu)針對性的使用(yòng)),如果一個網頁(yè)為(wèi)了實現對搜索引擎的優化,提供網站的安(ān)全性,使用(yòng)僞靜态.

補充知識 php中(zhōng)如何 使用(yòng)正則表達式?

<?php

//案例

$str="akfdka1234 kafdla 9000";

//需求: 把 四個連續的數找到

//preg_match 函數隻匹配第一個目标,$arr[0] 就存放匹配到得結果,

//$arr[1] 會匹配 模式中(zhōng)第一個子表達式的結果

//$arr[n] 會匹配 模式中(zhōng)第n個子表達式的結果

preg_match("/(\d\d)(\d\d)/si",$str,$arr);

echo "<pre>";

print_r($arr);

echo "</pre>";

//preg_match_all 函數匹配所有(yǒu)目标,$arr[0] 就存放匹配到得所有(yǒu)結果,

//$arr[0][1] 存放第一個匹配的結果

//$arr[0][n] 存放第n個匹配的結果

//$arr[1][0] 放入第一個匹配到得結果中(zhōng)的第一個子表達式的結果

//$arr[1][n] 放入第n+1個匹配到得結果中(zhōng)的第一個子表達式的結果

preg_match_all('/(\d\d)(\d\d)/si',$str,$arr);

echo "<pre>";

print_r($arr);

echo "</pre>";

$str="111-999-444 ka345-900-890 jdl90akjdfals";

preg_match('/(\d)\1{2}-(\d)\2{2}-(\d)\3{2}/si',$str,$arr);

echo "<pre>";

print_r($arr);

echo "</pre>";

 

 

點擊閱讀下一篇...

設計的四大基本規則

HOW TO FIND US ! !

為(wèi)客戶提供高要求品質(zhì)的互聯網服務(wù),作(zuò)為(wèi)吉林網絡公(gōng)司為(wèi)社會貢獻自己的一份力量!

如果您有(yǒu)這方面的需求,請按照下面的聯系方式聯系我們,很(hěn)高興見到你。
  • 吉林省吉林市昌邑區(qū)神華萬利城7号樓6号網點

  • 0432-62555849
    138-4322-6959
    138-4322-6952
    151-4321-9157

  • EMAIL:
    1416042127@qq.com

HTTP://WWW.JLLY.NET

友情鏈接: 吉林市網站建設 吉林市博物(wù)館 廣州網站建設

吉林市領域網絡科(kē)技(jì )有(yǒu)限公(gōng)司 版權所有(yǒu)
Copyright © 2011 JLLY.NET.