国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

如何讓PHP性能問題不再飽受詬病

warnerwu / 888人閱讀

摘要:作為開發中應用最廣泛的開源腳本語言,憑借庫類豐富,使用簡單,安全等特點,成為和等互聯網巨頭和全球超過網站的主要開發語言,然而性能問題是一直以來飽受詬病的,來自開發組的高馳濤同學將為我們帶來他對性能優化方面的思考和建議。

PHP作為Web開發中應用最廣泛的開源腳本語言,憑借庫類豐富,使用簡單,安全等特點,成為Facebook和BAT等互聯網巨頭和全球超過70%網站的主要開發語言,然而性能問題是PHP一直以來飽受詬病的,來自PHP/PECL開發組的高馳濤同學將為我們帶來他對PHP性能優化方面的思考和建議。

本期主講:高馳濤,Neeke Gao,PHP/PECL開發組成員,同時是SeasLog,JsonNet-PHP的作者,目前在云智慧擔任架構師。
今天主要從PHP的發展和性能優化歷史,來談PHP語言在性能優化方面所做過的努力,以及我們的一些研究成果。
談起PHP,我們先來了解幾個數字:

1995年, PHP發布了第一個版本,這要感謝PHP之父Rasmus Lerdorf的辛苦努力。PHP在問世之初是Personal Home Page的縮寫,那時候只是被當作制作個人網頁的一門簡單語言;后來隨著互聯網的發展以及開源社區的貢獻,PHP逐步成長成為一門被廣泛應用的高級語言,其英文含義也進化為PHP: Hypertext Preprocessor,即超級文本預處理語言。

官方統計數字顯示,全球排名前1000萬的網站應用中,有81.9%是使用PHP語言開發的。而且,每天有416個新增PHP網站進入全球前1000萬排名,數量還在不斷增加。發展到今天,PHP經歷了4,5,7幾個非常重大的版本迭代,最新的release版本是7.0.6。在二十多年的發展過程中,應用最廣泛的PHP版本是PHP 5,同時也是目前全球互聯網上應用最為廣泛的一個語言版本。

為什么沒有PHP6,而是直接從PHP5到PHP7,這里面有一個小故事。目前的PHP5.6,其實就是原預計發布的PHP6,但由于各項改動不足以支撐一個全新的PHP分支,組織內投票沒有通過發布,而最終作為了PHP5.6進行發布。

PHP7又稱為PHP NG,即“PHP Next Generation(下一代PHP)”,在性能和穩定性方面做了非常大的提升。為什么這么說呢,要從PHP的業務模型說起。

1、PHP Transaction Module業務模型
下面我先帶大家過一下PHP5幾個重大版本改動中的性能優化點,下面這張圖是PHP整個運行過程中的幾個關鍵點。

在PHP運行過程中,在Script Entry接收到請求之后。
首先經過語法解析器(Parser),此時會拋出一些致命的語法錯誤或警告(后續的版本改動中,會有一些致命錯誤轉換為exception拋出);
其次經過編譯器(Compiler),這部分內容中會進行更高級的解析,并測試將PHP高級語言編譯成OpCode;

然后交給Execute進行執行;執行過程中發現有新的文件或類被引入,會再進行Compiler,往復執行。

從這里可以看出,其實PHP也是“編譯型”語言,只不過是每次請求都編譯,或稱動態編譯。那么,后續的優化過程中就可以進行針對性優化,即:將編譯后的內容緩存起來,直接執行,以節省編譯時間。

了解一點PHP的同學都知道,PHP通常被認為是簡單、低效,這并不是沒有道理。我們來看一段PHP源碼,從而向大家解釋為什么“簡單”,為什么“低效”。

這段結構是PHP5及以前版本中所有變量和方法執行的核心,這是通用的變量存儲結構。可以看到,同一個變量能夠同時有多個屬性,或long,或double,或char,或int,或array,或Object。這給工程師以充分的自由度,同樣的一個數字,或字符串,不需要預設類型,就可以直接生成并使用。這就是為什么“簡單”,這是對工程師來說的。

而同時丟給Zend引擎(解析執行引擎)的,有著大量的負擔,因為需要引擎在每一次使用或運算時,都要不停的判斷類型究竟是什么類型屬性。這就是為什么“低效”的一個最直接原因。

2、PHP Performance Difficulty 性能之坑
對于一個使用PHP開發的應用來說,經過大量的實踐,可以總結出4個最影響性能的點:

IO, Memory, CPU, NetWork,是不是非常眼熟?沒錯,這其實并不單單是PHP語言的性能瓶頸,任何一門語言,或者就目前我們所處的世界中,凡是使用計算機語言開發的服務或應用,都存在這4個瓶頸。

3、Optimize from PHP5 to PHP7 優化之旅
下面就為大家介紹一下PHP5圍繞以上4個點所做的一些性能優化。在聊具體的性能優化方法之前,我們可以拋開之前的知識儲備,打開腦洞,發散思維,思考應該如何入手。每個人的想法完全不一樣,我的想法是這樣的:

?會不會是PHP本身的運行模型(或業務模型)或者Zend引擎設計存在問題?
?有沒有可能將PHP語言在發布運行之前進行預編譯,把它轉變成Bytecode?
?有沒有可能通過一種解析器把PHP轉變成C或C++語言,然后進行make或build?
?能不能開發另一套解析運行引擎?
?會不會出現另一套完全不一樣的運行模型(或業務模型)?
?等等。

這些想法在PHP社區內屢見不鮮,并不僅僅是我一個人在這么想,非常多PHP資深專家也在思考,而且在各個方向上都有一些開源的工具或服務發布了。由于PHP5有非常多版本,這里我們僅就應用最廣的PHP5.4和PHP5.5-5.6版本來簡要說明性能優化的幾個點。

PHP5.4 最主要的性能改進是在數組的生成和應用上面,一個簡單的延后分配節省了非常大量的內存,因為多數情況數組在直接引用上并不進行運算,從而并不進行內存建立與分配工作。另外,PHP5.4在運行時中添加了Literal Table和Binding Cache操作,這兩個改動相對上面延后分配內存是更復雜一些的,它在運行過程中節省了大量的CPU運算。

PHP5.5及5.6放在一起來說,因為它們真的很像,而且在目前PHP5整個大分支的維護過程中,一般是在PHP5.5上進行,然后把相關修改向5.6同步。5.5和5.6最重要的一個性能改進,是使用了編譯Cache。前面我們了解了PHP的運行過程中會存在“編譯->OpCode->執行”的過程,而將編譯結果緩存起來是一個重要的性能優化點,OpCache就是做這個工作的。OpCache從此進入了PHP的內核,而不再是一個第三方擴展。

同時Zend引擎還有同樣一個Cache優化擴展版本產生,即Zend O+,可以認為是Zend的Plus版本,在內存和CPU上,都做了一些改進。

最后來看看PHP7的幾個優化點:PHP7直接修改了Zend Zval結構,這算得上是一個很大改動。同時在PHP7中,數組的結構也變得更加的不一樣,這又是一個傷筋動骨的改動。官方數據中PHP7較PHP5.6有近兩倍的性能提升,主要就集中在這兩個點上。
看一下PHP源碼:

在一個Zval結構中,一個變量仍然可以屬于各種類型的,但在使用的時候,可以快速判斷是哪種類型,因為不同的類型會存儲在不同的指針中;而且內存使用也由于不同的指針類型而大量地降低;由于內存使用大量降低,從而為CPU更快地尋址和操作帶來了更好的可能性。所以有了Zval的結構變動帶來35%性能提升的結論。

同一個數組,在PHP5中的內存使用是跳躍不連貫的,而在PHP7中是連續有序的,這使得內存使用和CPU使用都更加地高效,數組的結構變動,給PHP7帶來了接近50%的性能提升。
4、PHP Performance Tools 工具推薦

前面在我們發散思維時列舉了很多PHP性能優化的點,幾個開源社區中已經發布過針對這些的優化工具,給大家推薦一些:
Facebook發布的HHVM:

HHVM (HipHop Virtual Machine)類似于C#的CLR和Java的JVM,會將PHP代碼轉換成高級別的字節碼(通常稱為中間語言),然后在運行時通過即時(JIT)編譯器將這些字節碼轉換為x64的機器碼。
下面是一些在開發調試過程中經常使用的工具和軟件服務:


此類開發工具和服務很多,可以為開發者和運維同學節省大量的定位和解決問題時間。
以我開發的SeasLog為例,由于使用內存buffer/批量IO,替代直接IO,可以直接為服務的QPS能力提升帶來強勁動力,下圖是SeasLog和log4php的性能對比:

最后為東家打個小廣告,云智慧的APM應用性能管理產品透視寶www.toushibao.com,可以提供更為強勁的性能管理分析的商業支持方案,目前支持包括PHP,Java,DotNet,Python,IOS,Android在內各種主流應用的性能監測和管理分析能力,歡迎大家交流體驗。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21703.html

相關文章

  • 小程序跨平臺開發解決方案探索

    摘要:繼微信正式推出微信小程序后,各個大廠陸續發布了各自的小程序平臺支付寶小程序百度小程序頭條小程序,跨小程序平臺開發也成為了眾多小程序開發者要面臨的問題。 繼微信正式推出微信小程序后,各個大廠陸續發布了各自的小程序平臺 —— 支付寶小程序、百度小程序、頭條小程序,跨小程序平臺開發也成為了眾多小程序開發者要面臨的問題。 Antmove - 小程序跨平臺解決方案 小程序開發血淚史 小程序發展初...

    xiangzhihong 評論0 收藏0
  • 云計算發展備受矚目的五大方向

    摘要:云計算發展備受矚目的五大方向云計算帶來了前所未有的工作方式,也改變了傳統軟件工程企業。云端安全仍不容忽視云計算自備受關注之日起其安全性就飽受詬病,這個永恒的話題,一直高燒不退。  自2006年3月亞馬遜(Amazon)推出彈性計算云服務起,云計算就引起了業內外人士廣泛關注。在這將近八年的時間里,其作為一個新的技術趨勢已經得到了快速的發展。2015年,互聯網、金融、制造、物流等行業內企業根據自...

    liuchengxu 評論0 收藏0
  • 微博什么技術啊……還說支持八個明星并發出軌,結果…

    摘要:然而,悲傷的是,她已不再是國民媳婦了事后,于是網絡上就有人報怨微博的技術能力了,還說同時支持八個,一個明星結婚就頂不住了。關于微博能同時支持八個明星并發出軌,現在都成了一個埂,成就了一個個段子在博主朋友圈刷屏。。 showImg(https://segmentfault.com/img/remote/1460000016709618?w=870&h=601); 是的,大家可能都知道了,...

    LeoHsiun 評論0 收藏0
  • 云計算正在打開局面 未來發展遵從這幾大方向

    摘要:云計算在消費領域的普及應用,極大地改變了人類的生活方式。云端安全仍不容忽視云計算自備受關注之日起其安全性就飽受詬病,這個永恒的話題,一直高燒不退。  云計算最早是由谷歌提出來的概念,其核心是將IT基礎設施互聯網化,而將云計算更好地規模化、產業化的則是亞馬遜。從云計算概念的提出,到云計算的發展與落成。這位云姑娘(云計算),從翩然而至我們生活,到如今毅然融入我們生活,成就了我們當今科技社會發展中...

    hsluoyz 評論0 收藏0

發表評論

0條評論

warnerwu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<