成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

php性能怎么優(yōu)化?php性能優(yōu)化及安全策略

番茄西紅柿 / 3364人閱讀

摘要:性能問(wèn)題一般不會(huì)超過(guò)占整個(gè)項(xiàng)目性能的,一般在。內(nèi)置函數(shù)的性能優(yōu)劣。幾乎與在函數(shù)中調(diào)用局部變量的速度相當(dāng)。遞增一個(gè)全局變量要比遞增一個(gè)局部變量慢倍。類(lèi)似的方法調(diào)用所花費(fèi)的時(shí)間接近于次的局部變量遞增操作。

php性能怎么優(yōu)化?性能是網(wǎng)站運(yùn)行是否良好的關(guān)鍵因素, 網(wǎng)站的性能與效率影響著公司的運(yùn)營(yíng)成本及長(zhǎng)遠(yuǎn)發(fā)展,編寫(xiě)出高質(zhì)高效的代碼是我們每個(gè)開(kāi)發(fā)人員必備的素質(zhì),也是我們良好的職業(yè)素養(yǎng)。

什么情況之下,會(huì)遇到PHP性能問(wèn)題?

1:PHP語(yǔ)法使用不恰當(dāng)。

2:使用PHP語(yǔ)言做了它不擅長(zhǎng)的事情。

3:使用PHP語(yǔ)言連接的服務(wù)不給力。

4:PHP自身的短板(PHP自身做不了的事情)。

5:我們也不知道的問(wèn)題?(去探索、分析找到解決辦法,提升開(kāi)發(fā)境界)。

對(duì)線(xiàn)上站點(diǎn)做壓力測(cè)試的時(shí)候,我們一定要將請(qǐng)求數(shù)和并發(fā)數(shù),特別是并發(fā)數(shù)要設(shè)置的比較低,我們不能對(duì)線(xiàn)上的網(wǎng)站造成壓力問(wèn)題,不管是自己的還是別人的。

PHP性能問(wèn)題一般不會(huì)超過(guò)占整個(gè)項(xiàng)目性能的50%,一般在30%~40%。

PHP性能問(wèn)題的解決方向,三個(gè)層級(jí)

1:PHP語(yǔ)言級(jí)的性能優(yōu)化,指的是PHP語(yǔ)法基本功能,這部分優(yōu)化比較簡(jiǎn)單易見(jiàn)、快速可行,比較快速看到效果。

a:少寫(xiě)PHP的代碼,多用PHP自身能力解決問(wèn)題。

性能問(wèn)題

自寫(xiě)代碼冗余較多,可讀性不佳,并且性能低,如代碼很長(zhǎng)很長(zhǎng)…PHP代碼越長(zhǎng)PHP的執(zhí)行效率越慢。

為什么性能低?

PHP代碼需要解析編譯為C語(yǔ)言,底層C語(yǔ)言又要編譯成匯編語(yǔ)言機(jī)器語(yǔ)言才能執(zhí)行,這個(gè)過(guò)程在每次請(qǐng)求過(guò)來(lái)之后都要處理一遍,所以開(kāi)銷(xiāo)很大(項(xiàng)目變大的話(huà)…)。

解決方法:

多使用PHP內(nèi)置的變量、常量、函數(shù)。我們用PHP代碼實(shí)現(xiàn)的功能和使用PHP內(nèi)置的函數(shù)實(shí)現(xiàn)的同樣功能差別是有的。

b:PHP內(nèi)置函數(shù)的性能優(yōu)劣。

情況描述:

PHP內(nèi)置函數(shù)之間依然存在快慢差別;少用PHP魔術(shù)方法;

建議:

多去了解PHP內(nèi)置函數(shù)的執(zhí)行實(shí)現(xiàn)復(fù)雜度。

測(cè)試方法:比較效率測(cè)試,如用microtime()函數(shù),取差值,精確到毫秒級(jí)別;Linux的time命令可以查看開(kāi)銷(xiāo)。

c:產(chǎn)生額外開(kāi)銷(xiāo)的錯(cuò)誤抑制符號(hào)“@”

最好別用(不管是性能優(yōu)化和項(xiàng)目的健壯性等方面)。

@的邏輯是在代碼前和代碼結(jié)束后增加了Opcode,Opcode的作用就是忽略報(bào)錯(cuò),其實(shí)就是相當(dāng)于增加了error_reporting設(shè)置,等級(jí)報(bào)錯(cuò)為忽略(vld擴(kuò)展可以查看被隱藏的Opcode);

d:合理使用內(nèi)存。

情況描述:

PHP有內(nèi)存回收機(jī)制保底,但是也小心使用內(nèi)存;

建議:

利用unset()及時(shí)釋放不使用的內(nèi)存,比如一些數(shù)據(jù)庫(kù)多余字段(注意:unset()有時(shí)會(huì)出現(xiàn)注銷(xiāo)不掉的情況)

e:盡量少用正則表達(dá)式。

情況描述:

正則表達(dá)式的開(kāi)銷(xiāo)大,使用起來(lái)簡(jiǎn)單,但是性能低因?yàn)?,正則表達(dá)式需要回溯;正則表達(dá)式越長(zhǎng),回溯的開(kāi)銷(xiāo)越大,優(yōu)化正則表達(dá)式是需要技術(shù)水平的,正則技術(shù)不達(dá)標(biāo),不要亂用正則。

f:避免在循環(huán)內(nèi)做運(yùn)算。

情況描述:

循環(huán)內(nèi)的計(jì)算式將被重復(fù)計(jì)算(我們?cè)趂or循環(huán)或者while循環(huán),會(huì)有重復(fù)計(jì)算,影響性能問(wèn)題)。

舉例:

錯(cuò)誤用法:

$str = “hello world”;

for($i = 0; $i < strlen($str); $i ++){ …}

正確用法:

$str = “hello world”;

$strlen = strlen($str);

for($i = 0; $i < $strlen; $i++){…}

g:減少計(jì)算密集型業(yè)務(wù)

情況描述:

PHP不適合密集型(大數(shù)據(jù)量)運(yùn)算的場(chǎng)景。

為什么?

PHP的語(yǔ)言特性決定PHP不適合做大數(shù)據(jù)量運(yùn)算,PHP語(yǔ)言由C寫(xiě)的,PHP處于C基礎(chǔ)之上,PHP的所有運(yùn)算處理流程需要轉(zhuǎn)化為C語(yǔ)言,PHP和C想比性能肯定輸了,并且

PHP語(yǔ)言還有一些環(huán)境問(wèn)題、語(yǔ)言特性,相比于C而言的開(kāi)銷(xiāo)要大很多的。PHP一段很長(zhǎng)的代碼,可能C很短就實(shí)現(xiàn)了…

PHP適合場(chǎng)景:

適合銜接WebServer與后端服務(wù),WebServer來(lái)了請(qǐng)求交給PHP,PHP做一些校驗(yàn)、一些初始化數(shù)據(jù)處理,將請(qǐng)求轉(zhuǎn)發(fā)交給后端,等待后臺(tái)響應(yīng),后端可能是緩存、DB等其他業(yè)務(wù),

后端響應(yīng)之后,PHP再作為紐帶,將信息傳遞給WebServer,這是PHP擅長(zhǎng)的。PHP也擅長(zhǎng)做UI呈現(xiàn),也就是配合模板引擎做模板輸出,其實(shí)就是一些字符串文本處理。

h:務(wù)必使用帶引號(hào)字符串做鍵值(數(shù)組的Key字段)。

情況描述

PHP會(huì)將沒(méi)有使用引號(hào)的鍵值當(dāng)做常量,產(chǎn)生查找常量的開(kāi)銷(xiāo),如果查找到了常量有這個(gè)字符串,那么就把常量作為這個(gè)值了。

建議:

嚴(yán)格使用引號(hào)作為鍵值,單引號(hào)即可。

2:PHP周邊的性能優(yōu)化:(PHP前面有WebServer,后面有數(shù)據(jù)庫(kù))

3:PHP語(yǔ)言自身的分析、優(yōu)化(底層C級(jí)別的優(yōu)化)

補(bǔ)充:

1:盡量靜態(tài)化:

如果一個(gè)方法能被靜態(tài),那就聲明它為靜態(tài)的,速度可提高1/4,甚至我測(cè)試的時(shí)候,這個(gè)提高了近三倍。

當(dāng)然了,這個(gè)測(cè)試方法需要在十萬(wàn)級(jí)以上次執(zhí)行,效果才明顯。

其實(shí)靜態(tài)方法和非靜態(tài)方法的效率主要區(qū)別在內(nèi)存:靜態(tài)方法在程序開(kāi)始時(shí)生成內(nèi)存,實(shí)例方法在程序運(yùn)行中生成內(nèi)存,所以靜態(tài)方法可以直接調(diào)用,實(shí)例方法要先成生實(shí)例,通過(guò)實(shí)例調(diào)用方法,靜態(tài)速度很快,但是多了會(huì)占內(nèi)存。

任何語(yǔ)言都是對(duì)內(nèi)存和磁盤(pán)的操作,至于是否面向?qū)ο?只是軟件層的問(wèn)題,底層都是一樣的,只是實(shí)現(xiàn)方法不同。靜態(tài)內(nèi)存是連續(xù)的,因?yàn)槭窃诔绦蜷_(kāi)始時(shí)就生成了,而實(shí)例申請(qǐng)的是離散的空間,所以當(dāng)然沒(méi)有靜態(tài)方法快。

靜態(tài)方法始終調(diào)用同一塊內(nèi)存,其缺點(diǎn)就是不能自動(dòng)進(jìn)行銷(xiāo)毀,而是實(shí)例化可以銷(xiāo)毀。

2.銷(xiāo)毀變量去釋放內(nèi)存,特別是大的數(shù)組;

數(shù)組和對(duì)象在php特別占內(nèi)存的,這個(gè)由于php的底層的zend引擎引起的,

一般來(lái)說(shuō),PHP數(shù)組的內(nèi)存利用率只有 1/10, 也就是說(shuō),一個(gè)在C語(yǔ)言里面100M 內(nèi)存的數(shù)組,在PHP里面就要1G。

特別是在PHP作為后臺(tái)服務(wù)器的系統(tǒng)中,經(jīng)常會(huì)出現(xiàn)內(nèi)存耗費(fèi)太大的問(wèn)題。

以下是我在其他博文收集的php性能優(yōu)化方法:

1、如果能將類(lèi)的方法定義成static,就盡量定義成static,它的速度會(huì)提升將近4倍。

2、$row[’id’] 的速度是$row[id]的7倍。

3、注銷(xiāo)那些不用的變量尤其是大數(shù)組,以便釋放內(nèi)存。

4、盡量避免使用__get,__set,__autoload。

5、require_once()代價(jià)昂貴。

6、include文件時(shí)盡量使用絕對(duì)路徑,因?yàn)樗苊饬薖HP去include_path里查找文件的速度,解析操作系統(tǒng)路徑所需的時(shí)間會(huì)更少。

7、如果你想知道腳本開(kāi)始執(zhí)行(譯注:即服務(wù)器端收到客戶(hù)端請(qǐng)求)的時(shí)刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()

8、函數(shù)代替正則表達(dá)式完成相同功能。

9、str_replace函數(shù)比preg_replace函數(shù)快,但strtr函數(shù)的效率是str_replace函數(shù)的四倍。

10、如果一個(gè)字符串替換函數(shù),可接受數(shù)組或字符作為參數(shù),并且參數(shù)長(zhǎng)度不太長(zhǎng),那么可以考慮額外寫(xiě)一段替換代碼,使得每次傳遞參數(shù)是一個(gè)字符,而不是只寫(xiě)一行代碼接受數(shù)組作為查詢(xún)和替換的參數(shù)。

11、使用選擇分支語(yǔ)句(譯注:即switch case)好于使用多個(gè)if,else if語(yǔ)句。

12、用@屏蔽錯(cuò)誤消息的做法非常低效,極其低效。

13、打開(kāi)apache的mod_deflate模塊,可以提高網(wǎng)頁(yè)的瀏覽速度。

14、數(shù)據(jù)庫(kù)連接當(dāng)使用完畢時(shí)應(yīng)關(guān)掉,不要用長(zhǎng)連接。

15、在方法中遞增局部變量,速度是最快的。幾乎與在函數(shù)中調(diào)用局部變量的速度相當(dāng)。遞增一個(gè)全局變量要比遞增一個(gè)局部變量慢2倍。遞增一個(gè)對(duì)象屬性(如:$this->prop++)要比遞增一個(gè)局部變量慢3倍。遞增一個(gè)未預(yù)定義的局部變量要比遞增一個(gè)預(yù)定義的局部變量慢9至10倍。

16、僅定義一個(gè)局部變量而沒(méi)在函數(shù)中調(diào)用它,同樣會(huì)減慢速度(其程度相當(dāng)于遞增一個(gè)局部變量)。PHP大概會(huì)檢查看是否存在全局變量。

17、方法調(diào)用看來(lái)與類(lèi)中定義的方法的數(shù)量無(wú)關(guān),因?yàn)槲?在測(cè)試方法之前和之后都)添加了10個(gè)方法,但性能上沒(méi)有變化。

18、派生類(lèi)中的方法運(yùn)行起來(lái)要快于在基類(lèi)中定義的同樣的方法。

19、調(diào)用帶有一個(gè)參數(shù)的空函數(shù),其花費(fèi)的時(shí)間相當(dāng)于執(zhí)行7至8次的局部變量遞增操作。類(lèi)似的方法調(diào)用所花費(fèi)的時(shí)間接近于15次的局部變量遞增操作。

20、Apache解析一個(gè)PHP腳本的時(shí)間要比解析一個(gè)靜態(tài)HTML頁(yè)面慢2至10倍。盡量多用靜態(tài)HTML頁(yè)面,少用腳本。

21、除非腳本可以緩存,否則每次調(diào)用時(shí)都會(huì)重新編譯一次。引入一套PHP緩存機(jī)制通??梢蕴嵘?5%至100%的性能,以免除編譯開(kāi)銷(xiāo)。

22、盡量做緩存,可使用memcached。memcached是一款高性能的內(nèi)存對(duì)象緩存系統(tǒng),可用來(lái)加速動(dòng)態(tài)Web應(yīng)用程序,減輕數(shù)據(jù)庫(kù)負(fù)載。對(duì)運(yùn)算碼 (OP code)的緩存很有用,使得腳本不必為每個(gè)請(qǐng)求做重新編譯。

23、當(dāng)操作字符串并需要檢驗(yàn)其長(zhǎng)度是否滿(mǎn)足某種要求時(shí),你想當(dāng)然地會(huì)使用strlen()函數(shù)。此函數(shù)執(zhí)行起來(lái)相當(dāng)快,因?yàn)樗蛔鋈魏斡?jì)算,只返回在zval 結(jié)構(gòu)(C的內(nèi)置數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)PHP變量)中存儲(chǔ)的已知字符串長(zhǎng)度。但是,由于strlen()是函數(shù),多多少少會(huì)有些慢,因?yàn)楹瘮?shù)調(diào)用會(huì)經(jīng)過(guò)諸多步驟,如字母小寫(xiě)化(譯注:指函數(shù)名小寫(xiě)化,PHP不區(qū)分函數(shù)名大小寫(xiě))、哈希查找,會(huì)跟隨被調(diào)用的函數(shù)一起執(zhí)行。在某些情況下,你可以使用isset() 技巧加速執(zhí)行你的代碼。

24、當(dāng)執(zhí)行變量$i的遞增或遞減時(shí),$i++會(huì)比++$i慢一些。這種差異是PHP特有的,并不適用于其他語(yǔ)言,所以請(qǐng)不要修改你的C或Java代碼并指望它們能立即變快,沒(méi)用的。++$i更快是因?yàn)樗恍枰?條指令(opcodes),$i++則需要4條指令。后置遞增實(shí)際上會(huì)產(chǎn)生一個(gè)臨時(shí)變量,這個(gè)臨時(shí)變量隨后被遞增。而前置遞增直接在原值上遞增。這是最優(yōu)化處理的一種,正如Zend的php優(yōu)化器所作的那樣。牢記這個(gè)優(yōu)化處理不失為一個(gè)好主意,因?yàn)椴⒉皇撬械闹噶顑?yōu)化器都會(huì)做同樣的優(yōu)化處理,并且存在大量沒(méi)有裝配指令優(yōu)化器的互聯(lián)網(wǎng)服務(wù)提供商(ISPs)和服務(wù)器。

25、并不是事必面向?qū)ο?OOP),面向?qū)ο笸_(kāi)銷(xiāo)很大,每個(gè)方法和對(duì)象調(diào)用都會(huì)消耗很多內(nèi)存。

26、并非要用類(lèi)實(shí)現(xiàn)所有的數(shù)據(jù)結(jié)構(gòu),數(shù)組也很有用。

27、盡量采用大量的PHP內(nèi)置函數(shù)。

28、如果在代碼中存在大量耗時(shí)的函數(shù),你可以考慮用C擴(kuò)展的方式實(shí)現(xiàn)它們。

29、評(píng)估檢驗(yàn)(profile)你的代碼。檢驗(yàn)器會(huì)告訴你,代碼的哪些部分消耗了多少時(shí)間。Xdebug調(diào)試器包含了檢驗(yàn)程序,評(píng)估檢驗(yàn)總體上可以顯示出代碼的瓶頸。

30、mod_zip可作為Apache模塊,用來(lái)即時(shí)壓縮你的數(shù)據(jù),并可讓數(shù)據(jù)傳輸量降低80%。

31、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情況下,盡量用file_get_contents,因?yàn)樗男矢叩枚?但是要注意file_get_contents在打開(kāi)一個(gè)URL文件時(shí)候的PHP版本問(wèn)題;

32、盡量的少進(jìn)行文件操作,雖然PHP的文件操作效率也不低的;

33、優(yōu)化Select SQL語(yǔ)句,在可能的情況下盡量少的進(jìn)行Insert、Update操作(在update上,我被惡批過(guò));

34、循環(huán)內(nèi)部不要聲明變量,尤其是大變量:對(duì)象(這好像不只是PHP里面要注意的問(wèn)題吧?);

35、多維數(shù)組盡量不要循環(huán)嵌套賦值;

36、在可以用PHP內(nèi)部字符串操作函數(shù)的情況下,不要用正則表達(dá)式;

37、foreach效率更高,盡量用foreach代替while和for循環(huán);

38、用單引號(hào)替代雙引號(hào)引用字符串;

39、“用i+=1代替i=i+1。符合c/c++的習(xí)慣,效率還高”;

40、對(duì)global變量,應(yīng)該用完就unset()掉;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/125729.html

相關(guān)文章

  • 如何使用 APM 搞定 PHP 應(yīng)用的性能優(yōu)化?

    摘要:究竟是什么很多人都是第一次聽(tīng)說(shuō)的概念,本文主要闡述如何使用的解決方案來(lái)實(shí)現(xiàn)應(yīng)用性能的優(yōu)化。智能的報(bào)警機(jī)制,在性能瓶頸出現(xiàn)前,修復(fù)性能問(wèn)題,防止性能問(wèn)題導(dǎo)致用戶(hù)流失。 APM 究竟是什么? 很多人都是第一次聽(tīng)說(shuō) APM 的概念,本文主要闡述如何使用 APM 的解決方案來(lái)實(shí)現(xiàn) PHP 應(yīng)用性能的優(yōu)化。首先先介紹一下 APM (Application Performance Manageme...

    sean 評(píng)論0 收藏0
  • 社交系統(tǒng)ThinkSNS+ 性能簡(jiǎn)述

    摘要:概述微軟雅黑本文主要描述服務(wù)端系統(tǒng)性能服務(wù)端高性能部署方案及優(yōu)化措施服務(wù)端系統(tǒng)持續(xù)優(yōu)化及升級(jí)策略。部署優(yōu)化微軟雅黑使用,較之前的版本性能提升一倍以上。微軟雅黑開(kāi)啟,生產(chǎn)環(huán)境應(yīng)該開(kāi)啟,性能會(huì)有巨大提升。概述 ????????本文主要描述ThinkSNS Plus服務(wù)端系統(tǒng)性能、服務(wù)端高性能部署方案及優(yōu)化措施、服務(wù)端系統(tǒng)持續(xù)優(yōu)化及升級(jí)策略。本文未涉及前端(PC站點(diǎn)、H5站點(diǎn)、Android、IO...

    Hanks10100 評(píng)論0 收藏0
  • PHP面試總結(jié)

    摘要:而在面試過(guò)程中,也是經(jīng)常會(huì)遇到的,所以,無(wú)論是面試準(zhǔn)備還是日常開(kāi)發(fā),我們都應(yīng)該關(guān)注這方面的東西。二分法的基本做法是確定要查找的區(qū)間。區(qū)間內(nèi)選取二分點(diǎn)。根據(jù)二分點(diǎn)的值,綜合左右區(qū)間情況以及求解的目的,舍去一半無(wú)用的區(qū)間。 showImg(https://images.pexels.com/photos/935977/pexels-photo-935977.jpeg); 前言 面試是你進(jìn)入...

    alin 評(píng)論0 收藏0
  • PHP應(yīng)用性能優(yōu)化指南

    摘要:怎樣才算是高性能的應(yīng)用性能和速度不是一對(duì)同義詞。紅線(xiàn)表示針對(duì)速度進(jìn)行了優(yōu)化的腳本,藍(lán)線(xiàn)是可擴(kuò)展性?xún)?yōu)先的腳本。將任何這些功能置于循環(huán)中可能會(huì)導(dǎo)致性能問(wèn)題。完整的代碼檢測(cè)評(píng)估雖然可能很耗時(shí),但它可以為你提供有關(guān)應(yīng)用程序性能的深入信息。 showImg(https://segmentfault.com/img/bVNxDn?w=900&h=500);程序員都喜歡最新的PHP 7,因?yàn)樗筆H...

    EddieChan 評(píng)論0 收藏0
  • 雜貨 - 收藏集 - 掘金

    摘要:消息隊(duì)列技術(shù)介紹后端掘金一消息隊(duì)列概述消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合異步消息流量削鋒等問(wèn)題。的內(nèi)存優(yōu)化后端掘金聲明本文內(nèi)容來(lái)自開(kāi)發(fā)與運(yùn)維一書(shū)第八章,如轉(zhuǎn)載請(qǐng)聲明。 消息隊(duì)列技術(shù)介紹 - 后端 - 掘金一、 消息隊(duì)列概述 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合、異步消息、流量削鋒等問(wèn)題。實(shí)現(xiàn)高性能、高可用、可伸縮和最終一致性架構(gòu)。是大型分布式系...

    loostudy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<