中山網(wǎng)絡(luò)公司,中山網(wǎng)絡(luò)制作愛(ài)途科技公司2014-07-05日?qǐng)?bào)
如何為大型網(wǎng)站提速( 靜態(tài)化、 緩存技術(shù)memcache、 mysql優(yōu)化)
提出問(wèn)題->引出新技術(shù)->小案例(快速入門(mén))->細(xì)節(jié)—(長(zhǎng)期)---->使用項(xiàng)目
重要的概念① 靜態(tài)網(wǎng)址
② 動(dòng)態(tài)網(wǎng)址
③ 偽靜態(tài)網(wǎng)址
傳統(tǒng)的做法->動(dòng)態(tài)網(wǎng)址
2.(減少sql注入攻擊風(fēng)險(xiǎn))
補(bǔ)充說(shuō)明
Seo (search engine optimization 搜索引擎優(yōu)化)
頁(yè)面靜態(tài)化的分類為什么要靜態(tài)化
1. 訪問(wèn)php的速度比html慢
在apache / bin /ab.exe 可以做壓力測(cè)試,該工具可以模擬多人,并發(fā)訪問(wèn)某個(gè)頁(yè)面.
基本的用法
//–n 10000 請(qǐng)求多少次
//–c 10
ab.exe –n 10000 –c 10
-n 表示 請(qǐng)求多少次
-c 表示 多少人
2. 靜態(tài)化利于seo
3. 防止sql注入
① 真靜態(tài)
方法1: 使用php自身的緩存機(jī)制
output_buffering 緩存
程序緩存
如果要測(cè)試php自己的緩存機(jī)制, 需要做配置.
php.ini 文件
display_errors=On
output_buffering=Off
error_reproting= 設(shè)置錯(cuò)誤級(jí)別
看一段代碼
<?php
echo “yyy”;
header(“content-type:text/htm;charset=utf-8”);
echo “hello”;
?>
開(kāi)啟緩存: 1. Ob_start();
2. Php.ini
Ob_get_contents() 獲取 output_buffering 的內(nèi)容
Ob_clean();清空 output_buffering 的內(nèi)容
Ob_end_clean() 關(guān)閉緩存 并刪除ob 內(nèi)容
Ob_end_flush() 輸出緩存ob內(nèi)容并關(guān)閉緩存
Ob_flush() 輸出緩存ob內(nèi)容并清空
Flush() 刷新程序緩存的內(nèi)容
Str_repeat("",100); //顯示100個(gè)空白
這里我們看一個(gè)綜合案例,需求如下:
傳統(tǒng)解決方法:
頁(yè)面靜態(tài)化思路:
因?yàn)樾侣勥@種信息不是對(duì)實(shí)時(shí)性要求高,并且比較穩(wěn)定,所以我們可以這樣做,當(dāng)?shù)谝粋€(gè)用戶訪問(wèn)某條新聞后,我們使用ob的緩存機(jī)制,把內(nèi)容緩存到html頁(yè)面,當(dāng)下一次訪問(wèn)時(shí),直接訪問(wèn)html即可.
問(wèn)題?
1. 如果我們的新聞更新了,這樣我們的靜態(tài)頁(yè)面不變->解決
解決方法1,我們可以判斷靜態(tài)頁(yè)面是否過(guò)期(30s) ,如果過(guò)期,則重新創(chuàng)建
代碼:-->
if(file_exists($html_filename)&& filemtime($html_filename)+30>time()){
//直接訪問(wèn)html頁(yè)面(把html頁(yè)面的內(nèi)容 echo 瀏覽器)
echo file_get_contents($html_filename);
exit;
}
難道這樣就完美了嗎?
1. news_list.php頁(yè)面中點(diǎn)擊 查看時(shí)候,仍然是一個(gè)php頁(yè)面-> html網(wǎng)址
2. 實(shí)時(shí)性不夠好,30s的延時(shí)..
解決思想:
當(dāng)我們添加新聞或者更新新聞的時(shí)候,就同步的更新html靜態(tài)頁(yè)面,通常的做法,設(shè)計(jì)模板文件(網(wǎng)頁(yè)設(shè)計(jì)師/美工),通過(guò)模板創(chuàng)建靜態(tài)頁(yè)面.
整理思路
提出為什么需要靜態(tài)化.
靜態(tài)化的方式( 使用ob 緩存來(lái)實(shí)現(xiàn)靜態(tài)化 問(wèn)題1 實(shí)時(shí)性不好,有延時(shí), 2, 請(qǐng)求某個(gè)查詢頁(yè)面時(shí)使用 php動(dòng)態(tài)網(wǎng)站)
真靜態(tài) (在 添加和修改的時(shí)候,可以實(shí)時(shí)的處理靜態(tài)頁(yè)面 問(wèn)題 如果數(shù)據(jù)時(shí)海量的,造成真靜態(tài)的html 文件過(guò)多,占用磁盤(pán)很大.)偽靜態(tài)技術(shù)② 偽靜態(tài)
我們可以有兩種方法來(lái)處理
1. 在php文件中,直接使用正則表達(dá)式技術(shù)處理
代碼:
<?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 "輸入的地址有誤!";
}
?>
課后練習(xí):
請(qǐng)使用正則表達(dá)式完成
在news.php頁(yè)面中可以獲取到
news sport 5
提出問(wèn)題?
相當(dāng)向 http://localhost/news.php?class=sport&id=56
2. 配置apache的rewrite來(lái)處理
快速入門(mén)案例
請(qǐng)求
原理圖
如何使用rewrite步驟:
1. 配置apache,啟用rewrite機(jī)制
在httpd.conf中啟用rewrite
LoadModule rewrite_module modules/mod_rewrite.so
2. 配置虛擬主機(jī)
到 c盤(pán) hosts文件添加你的 ip 和 域名對(duì)應(yīng)
127.0.0.1
在 http.conf 文件中啟用虛擬主機(jī)
# Virtual hosts 啟用虛擬主機(jī)
Include conf/extra/httpd-vhosts.conf
3. 配置 httpd_vhosts.conf文件
在 <Direcotry >段的配置,默認(rèn)值,是在httpd.conf 的中配置,看根目錄.
<VirtualHost *:80>
#ServerAdmin [email protected]
#文檔的根目錄
DocumentRoot "C:/myenv/apache/htdocs/static3"
#域名
ServerName www.hsp.com
ErrorLog "logs/dummy-host2.somenet.com-error.log"
#CustomLog "logs/dummy-host2.somenet.com-access.log" common
#配置rewrite相關(guān)選項(xiàng),
<Directory "C:/myenv/apache/htdocs/static3">
#拒絕所有的訪問(wèn)
#Deny from all
Allow from all
#是否顯示列表(在發(fā)布項(xiàng)目后一般是不啟用,對(duì)于這個(gè)配置,針對(duì) DocumentRoot在htdos外的目錄生效)
#Options +indexes
#是否啟用rewrite
#Allowoverride all
</Directory>
</VirtualHost>
4.在目錄下添加了一個(gè) .htaccess 文件,這個(gè)文件時(shí)配置rewrite機(jī)制和規(guī)則
<IfModule rewrite_module>
#寫(xiě)你的rewrite規(guī)則
RewriteEngine On
#news-id(\d+)\.html$ 是規(guī)則 news.php?id=$1 是轉(zhuǎn)發(fā)的頁(yè)面
#正則 子表達(dá)式 捕獲 反向引用
# "news-id33.html"
# 可以配置多個(gè)規(guī)則,匹配的順序是從上到下
RewriteRule news-id(\d+)\.html$ news.php?id=$1
RewriteRule news-id(\d+)\.html$ error.php
</IfModule>
綜合使用案例
4. 這個(gè)rewrite的規(guī)則也直接在 < Direcotry > 段直接配置
<Directory "C:/myenv/apache/htdocs/static3">
#拒絕所有的訪問(wèn)
#Deny from all
Allow from all
#是否顯示列表(在發(fā)布項(xiàng)目后一般是不啟用,對(duì)于這個(gè)配置,針對(duì) DocumentRoot在htdos外的目錄生效)
#Options +indexes
#是否啟用rewrite
Allowoverride all
#我們有時(shí)候,也可以把rewrite機(jī)制和規(guī)則寫(xiě)這里
#RewriteEngine On
#RewriteRule news-id(\d+)\.html$ news.php?id=$1
</Directory>
使用偽靜態(tài)來(lái)完成簡(jiǎn)單的新聞查詢.
? 偽靜態(tài)是站在seo角度看.,他對(duì)于的頁(yè)面不是存在的,而是每次查詢數(shù)據(jù)庫(kù)得到的信息,
真靜態(tài)的頁(yè)面是真的存在.
如果只是為了seo, 完全不希望有html ,那就只使用 偽靜態(tài).
如果的網(wǎng)址要seo ,項(xiàng)目 數(shù)據(jù)大(1000 w) 你就希望偽靜態(tài)同時(shí)ob 來(lái)緩存.
如何更好的使用 偽靜態(tài)+ob
在windows 下
① 編寫(xiě)一個(gè) clear.php 文件,可以去檢測(cè)某個(gè)目錄下的文件是否過(guò)期
② 在編寫(xiě)my.bat文件
"C:\\myenv\\apache\\bin\\ab.exe" -n 1 -c 1
③ 在windows使用任務(wù)計(jì)劃.
④ ok
在linux
使用crontab 參看 linux視頻.
面試題: 請(qǐng)說(shuō)明一下偽靜態(tài)和真靜態(tài)的特點(diǎn)和區(qū)別
①真靜態(tài)訪問(wèn)效率高,利于seo.可以減少對(duì)數(shù)據(jù)庫(kù)的操作。但是會(huì)占用大量
的磁盤(pán).
②偽靜態(tài)一、可以方便的實(shí)現(xiàn)對(duì)搜索引擎的優(yōu)化,二、占空間比較小。三、通過(guò)生成不同view-id2.hmtl 可以實(shí)現(xiàn)內(nèi)容的變化.四有效的防止了注入攻擊
小結(jié): 如果一個(gè)網(wǎng)頁(yè)會(huì)被頻繁的訪問(wèn)(比如百萬(wàn)級(jí)別),通過(guò)該網(wǎng)頁(yè)每次都會(huì)去操作數(shù)據(jù)庫(kù),可以考慮使用真靜態(tài)(建議有針對(duì)性的使用),如果一個(gè)網(wǎng)頁(yè)為了實(shí)現(xiàn)對(duì)搜索引擎的優(yōu)化,提供網(wǎng)站的安全性,使用偽靜態(tài).
補(bǔ)充知識(shí) php中如何 使用正則表達(dá)式?
<?php
//案例
$str="akfdka1234 kafdla 9000";
//需求: 把 四個(gè)連續(xù)的數(shù)找到
//preg_match 函數(shù)只匹配第一個(gè)目標(biāo),$arr[0] 就存放匹配到得結(jié)果,
//$arr[1] 會(huì)匹配 模式中第一個(gè)子表達(dá)式的結(jié)果
//$arr[n] 會(huì)匹配 模式中第n個(gè)子表達(dá)式的結(jié)果
preg_match("/(\d\d)(\d\d)/si",$str,$arr);
echo "<pre>";
print_r($arr);
echo "</pre>";
//preg_match_all 函數(shù)匹配所有目標(biāo),$arr[0] 就存放匹配到得所有結(jié)果,
//$arr[0][1] 存放第一個(gè)匹配的結(jié)果
//$arr[0][n] 存放第n個(gè)匹配的結(jié)果
//$arr[1][0] 放入第一個(gè)匹配到得結(jié)果中的第一個(gè)子表達(dá)式的結(jié)果
//$arr[1][n] 放入第n+1個(gè)匹配到得結(jié)果中的第一個(gè)子表達(dá)式的結(jié)果
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>";
隨著全球經(jīng)濟(jì)的快速發(fā)展,外貿(mào)行業(yè)已經(jīng)成為了許多企業(yè)重要的經(jīng)濟(jì)來(lái)源。而中山作為廣東省經(jīng)濟(jì)實(shí)力強(qiáng)大的地區(qū)之一,其外貿(mào)市場(chǎng)也日益壯大。在這樣的大環(huán)境下,搭建一座專業(yè)化的中山外貿(mào)網(wǎng)站已經(jīng)成為了中山企業(yè)拓展國(guó)際市場(chǎng)必不可少的一項(xiàng)工作。 一個(gè)好的中山外貿(mào)網(wǎng)站應(yīng)該具備哪些特點(diǎn)呢? 首先,中山外貿(mào)網(wǎng)站應(yīng)該具備專業(yè)性。...
在網(wǎng)站建設(shè)的過(guò)程中,安全設(shè)計(jì)是一項(xiàng)至關(guān)重要的工作。我們致力于為貴公司提供安全可靠的網(wǎng)絡(luò)環(huán)境,確保網(wǎng)站能夠穩(wěn)定運(yùn)行,并能妥善保障每個(gè)用戶的個(gè)人信息以及各種重要數(shù)據(jù)的安全性。為此,我們建議貴公司時(shí)刻關(guān)注并保證所使用的軟硬件系統(tǒng)都能夠獲得最新的功能更新。這些更新不僅能夠有效地預(yù)防目前已經(jīng)被公之于眾的各種安...
在網(wǎng)戰(zhàn)設(shè)計(jì)領(lǐng)域之中,對(duì)于用戶體驗(yàn)的關(guān)注、對(duì)于視覺(jué)藝術(shù)美的深度挖掘及對(duì)內(nèi)容策略的科學(xué)謀劃等重大議題,均貫穿了設(shè)計(jì)師們工作的每一個(gè)環(huán)節(jié)。為了締造更為卓越的網(wǎng)絡(luò)設(shè)計(jì)杰作,設(shè)計(jì)師們應(yīng)當(dāng)深度研究并深刻洞察這些關(guān)鍵議題,并傾注更多的時(shí)間和精力到其中。對(duì)于設(shè)計(jì)師們來(lái)說(shuō),他們還需不時(shí)進(jìn)行A/B測(cè)試以優(yōu)化改進(jìn)方案,以便...
網(wǎng)站建設(shè)對(duì)于互聯(lián)網(wǎng)公司來(lái)說(shuō),可謂是重中之重了!針對(duì)每一公司來(lái)說(shuō),網(wǎng)站建設(shè)不但有益于公司的管理,更有利于促進(jìn)公司的品牌推廣,達(dá)到宣傳目的。 網(wǎng)站建設(shè)有哪些具體步驟? 1.先做好網(wǎng)站定位 先將公司做好一個(gè)準(zhǔn)確的定位,想好需要做的是什么類型的公司網(wǎng)站,對(duì)網(wǎng)站的主要內(nèi)容和主題有明顯的確定。最好做個(gè)公司業(yè)務(wù)市場(chǎng)的調(diào)...
本文可被看作是評(píng)估一家電商網(wǎng)站體驗(yàn)的10個(gè)檢查點(diǎn),這10點(diǎn)不僅側(cè)重于可用性,更強(qiáng)調(diào)成功和失敗的電商網(wǎng)站在哪些方面有區(qū)別,這意味著這些區(qū)別能直接影響轉(zhuǎn)化、激活以及用戶的參與度。 ????1.網(wǎng)站的易發(fā)現(xiàn)性 ????我們的顧客是通過(guò)互聯(lián)網(wǎng)發(fā)現(xiàn)我們的嗎?他們是在網(wǎng)上發(fā)現(xiàn)我們的...