日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
簡(jiǎn)單說(shuō)說(shuō)PHP優(yōu)化

我們?cè)诰帉?xiě)程序時(shí),總是想要使自己的程序占用資源最小,運(yùn)行速度更快,代碼量更少。往往我們?cè)谧非筮@些的同時(shí)卻失去了很多東西。下面我想講講我對(duì)PHP優(yōu)化的理解。優(yōu)化的目的是花最少的代價(jià)換來(lái)最快的運(yùn)行速度與最容易維護(hù)的代碼。

揭東網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,揭東網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為揭東1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的揭東做網(wǎng)站的公司定做!

進(jìn)行大范圍的優(yōu)化,而不是死啃某些程序代碼

我這里所說(shuō)的優(yōu)化,基本上都是從服務(wù)器,Apache,數(shù)據(jù)庫(kù)這些方面來(lái)進(jìn)行的優(yōu)化,而并不是對(duì)你的PHP代碼加以改進(jìn)從而提高程序的運(yùn)行速度,因?yàn)楸绕鹉銓⒊绦蛑械恼齽t優(yōu)化為字符串處理函數(shù)從而提升程序速度來(lái)說(shuō),在大范圍內(nèi)進(jìn)行的優(yōu)化所需要的代價(jià)要比這個(gè)小的多,而獲得報(bào)酬卻要豐厚的多。

在非代碼處進(jìn)行優(yōu)化有以下好處:

1、通常情況下能夠大大提高效率

2、不會(huì)危及到代碼的完整性

3、能夠快速部署

緩存技術(shù)

下面來(lái)說(shuō)說(shuō)常用的緩存技術(shù),通過(guò)這些緩存技術(shù)能夠大大的提高效率

在說(shuō)到緩存技術(shù)的時(shí)候不得不提到memcached ,memcached是高效、快速的分布式內(nèi)存對(duì)象緩存系統(tǒng),主要用于加速 WEB 動(dòng)態(tài)應(yīng)用程序。

Memcached的原理

memcached 是以守護(hù)程序方式運(yùn)行于一個(gè)或多個(gè)服務(wù)器中,等待接收客戶(hù)端的連接操作,客戶(hù)端可以由各種語(yǔ)言編寫(xiě)(例如PHP)。PHP 等客戶(hù)端在與 memcached 服務(wù)建立連接之后,接下來(lái)的事情就是存取對(duì)象了,每個(gè)被存取的對(duì)象都有一個(gè)唯一的標(biāo)識(shí)符 key,存取操作均通過(guò)這個(gè) key 進(jìn)行,保存到 memcached 中的對(duì)象實(shí)際上是放置內(nèi)存中的,并不是保存在 cache 文件中的,這也是為什么 memcached 能夠如此高效快速的原因。

說(shuō)完memcached,下面來(lái)說(shuō)說(shuō)常用的緩存方法

1、編譯與OPCODE緩存

因?yàn)镻HP是解釋型的語(yǔ)言,所以每個(gè)PHP文件在運(yùn)行的時(shí)候都需要編譯后再執(zhí)行,同一個(gè)文件,不同的用戶(hù)訪(fǎng)問(wèn),或者同一個(gè)用戶(hù)不同時(shí)間訪(fǎng)問(wèn)同一個(gè)文件,每次都需要重新編譯然后運(yùn)行,這樣就耗費(fèi)了大量時(shí)間。

通過(guò)編譯緩存每個(gè)文件在修改之后只編譯一次這樣就減少了文件IO操作,用戶(hù)訪(fǎng)問(wèn)后機(jī)器指令直接從內(nèi)存中取出并執(zhí)行而不是硬盤(pán)中讀出。

最常見(jiàn)的PHP編譯緩存工具有:APC,Accelerator,xcache

2、全局頁(yè)面緩存-- Squid Cache

Squid Cache(簡(jiǎn)稱(chēng)為Squid)是一個(gè)流行的自由軟件(GNU通用公共許可證)的代理服務(wù)器和Web緩存服務(wù)器,Squid作為網(wǎng)頁(yè)服務(wù)器的前置cache服務(wù)器通過(guò)緩存相關(guān)請(qǐng)求來(lái)提高Web服務(wù)器的速度。

3、局部緩存之SQL緩存

在大多數(shù)應(yīng)用程序中主要的瓶頸往往可以追溯到數(shù)據(jù)庫(kù)的操作中,一般都是因?yàn)閺?fù)雜的數(shù)據(jù)庫(kù)查詢(xún)而耗費(fèi)了大量時(shí)間,而SQL緩存可以大大降低復(fù)雜查詢(xún)?cè)斐傻呢?fù)荷。

SQL緩存的例子(使用了memcached擴(kuò)展)

代碼片段:

 
 
 
  1. $key = md5(“some sort of sql query”);  
  2. if (!($result = memcache_get($key))) {  
  3. $result = $pdo->query($qry)->fetchAll();  
  4. // 緩存查詢(xún)結(jié)果一小時(shí)  
  5. memcache_set($key, $result, NULL, 3600);  

4、局部緩存之代碼塊緩存

為了優(yōu)化PHP程序,有時(shí)候我們不得不優(yōu)化一個(gè)個(gè)代碼段來(lái)減少那么一點(diǎn)點(diǎn)的執(zhí)行的時(shí)間,但是比起優(yōu)化復(fù)雜的不同的PHP代碼段還不如通過(guò)緩存來(lái)直接忽略這些代碼段的優(yōu)化,這樣做的好處是:

1、能夠很快的看到效果 

2、不會(huì)破壞以前的代碼

3、速度要比優(yōu)化代碼要快得多

代碼塊緩存的列子(同樣使用了memcached擴(kuò)展)

代碼片段:

 
 
 
  1. function complex_function_abc($a, $b, $c) {  
  2. $key = __FUNCTION__ . serialize  
  3. (func_get_args());  
  4. if (!($result = memcache_get($key))) {  
  5. $result = //函數(shù)代碼  
  6. // 儲(chǔ)存執(zhí)行結(jié)果1小時(shí)   
  7. memcache_set($key, $result, NULL, 3600);  
  8. }  
  9. return $result;  

當(dāng)然除了上述方法外還可以用到文件緩存(將數(shù)據(jù)庫(kù)中的數(shù)據(jù)取出儲(chǔ)存在文件中),還可以生成靜態(tài)HTML文件等,但是這些方法的緩存還是將文件儲(chǔ)存在硬盤(pán)上而不是內(nèi)存中。

輸出控制

除了上述緩存技術(shù)外還可以通過(guò)輸出控制來(lái)讓程序執(zhí)行的時(shí)間更少

下面通過(guò)PHP與APACHE來(lái)說(shuō)說(shuō)輸出控制

1、PHP輸出控制

這里最主要用到ob_start()以及PHP中的OB系列函數(shù),這些函數(shù)可以做什么呢?

第一就是靜態(tài)模版技術(shù)。所謂靜態(tài)模版技術(shù)就是通過(guò)某種方式,使得用戶(hù)在client端得到的是由PHP產(chǎn)生的html頁(yè)面。如果這個(gè)html頁(yè)面不會(huì)再被更新,那么當(dāng)另外的用戶(hù)再次瀏覽此頁(yè)面時(shí),程序?qū)⒉粫?huì)再調(diào)用PHP以及相關(guān)的數(shù)據(jù)庫(kù),對(duì)于某些信息量比較大的網(wǎng)站,例如sina,163,sohu。類(lèi)似這種的技術(shù)帶來(lái)的好處是非常巨大的。

代碼示例:

 
 
 
  1. ob_start(); //打開(kāi)緩沖區(qū)  
  2. ?>  
  3. php頁(yè)面的全部輸出  
  4. $content = ob_get_contents(); //取得php頁(yè)面輸出的全部?jī)?nèi)容  
  5. $fp = fopen("output.html", "w"); //創(chuàng)建一個(gè)文件,并打開(kāi),準(zhǔn)備寫(xiě)入  
  6. fwrite($fp, $content); //把php頁(yè)面的內(nèi)容全部寫(xiě)入output.html,然后……  
  7. fclose($fp);  
  8. ?> 

當(dāng)然這個(gè)ob系列函數(shù)還有其他很多用處我就不在這里一一說(shuō)明了。

2、apache輸出控制

將SendBufferSize設(shè)置為頁(yè)面大小,這樣就能將頁(yè)面一次性放在發(fā)送緩沖區(qū)從而增加處理速度。
SendBufferSize 指令

說(shuō)明:TCP發(fā)送緩沖區(qū)大小(字節(jié))

語(yǔ)法:SendBufferSize bytes

默認(rèn)值:SendBufferSize 0

作用域:server config

狀態(tài):MPM

模塊:beos, mpm_netware, mpm_winnt, mpmt_os2, prefork, worker

這個(gè)指令設(shè)置服務(wù)器的TCP發(fā)送緩沖區(qū)的大小(字節(jié))。提高這個(gè)值會(huì)導(dǎo)致兩個(gè)后果:高速度和高潛伏時(shí)間(100ms左右)。如果設(shè)置為"0",將使用操作系統(tǒng)默認(rèn)值。

通過(guò)源代碼方式編譯你的Apache/PHP/Database 可讓你的程序增加10--15%的速度

下面再說(shuō)說(shuō)在代碼優(yōu)化的時(shí)候應(yīng)該注意的

1、短代碼不等于快的代碼

很多人在寫(xiě)程序時(shí)希望將代碼寫(xiě)的越簡(jiǎn)潔越好,但是越短的代碼有時(shí)候反而需要更長(zhǎng)的執(zhí)行時(shí)間,所以哪怕是用更多的代碼也不使用速度慢的代碼

2、在寫(xiě)程序的時(shí)候更應(yīng)該注重程序的擴(kuò)展性,而不是追求速度

3、在優(yōu)化你的代碼之前,先看看跟數(shù)據(jù)庫(kù)有關(guān)的部分,因?yàn)榇蠖鄶?shù)應(yīng)用程序的瓶頸在數(shù)據(jù)庫(kù)而不是代碼

4、微優(yōu)化得不償失

什么叫做微優(yōu)化?就像前面所說(shuō)的將正則表達(dá)式部分的代碼改用字符串函數(shù)代替。這樣做有以下缺點(diǎn):

(1)花費(fèi)時(shí)間較長(zhǎng)

(2)不會(huì)解決你的性能問(wèn)題

(3)很有可能會(huì)破壞以前的代碼從而產(chǎn)生未知的錯(cuò)誤

(4)付出大于回報(bào)

這里還不得不提到一個(gè)誤區(qū),有些人為了讓程序更加優(yōu)化,在分析業(yè)務(wù)邏輯的時(shí)候便將優(yōu)化考慮在內(nèi)了,從而為了得到更優(yōu)的代碼而改動(dòng)業(yè)務(wù)邏輯。這是十分愚蠢的想法,因?yàn)槌绦虻哪康谋闶菫榱颂幚憩F(xiàn)實(shí)中遇到的問(wèn)題,是為這些問(wèn)題服務(wù)的,怎么能本末倒置呢。


網(wǎng)頁(yè)名稱(chēng):簡(jiǎn)單說(shuō)說(shuō)PHP優(yōu)化
網(wǎng)站鏈接:http://www.5511xx.com/article/dhgisgc.html