非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/article/142454php
惠新宸@Laruence,是國內最有影響力的PHP技術專家,PHP開發組核心成員,PECL開發者,Zend公司外聘顧問。他曾供職於雅虎,百度,如今新浪微博任平臺及數據部總架構師兼首席PHP顧問。惠新宸 是PHP NG核心開發者,PHP5.4,5.5的主要開發者。做爲PECL開發者貢獻了Yaf ,Yar以及Yac、Taint等多個優秀開源做品,同時也是APC,Opcache,Msgpack等項目的維護者。面試
從一個在網上搜PHP教程的初學者,到PHP開發組核心成員,惠新宸以爲整個過程就像「打怪升級」。和Java同樣也被稱爲藍領語言的PHP,在他看來偏偏是可以培養更多編程者的搖籃,而人人都能編程的時代,勢必會產生更多可以推進技術進步的牛人。他在博客風雪之隅上分享關於PHP語言和Zend引擎相關的研究、技術、新聞。左手代碼,右手詩。sql
問:你是如何開始對編程感興趣的?編程
我第一次進行「編程」好像仍是在小霸王學習機上。後來大學學的是計算機,研究生的時候負責學校校園化建設,主動或者被動地作了不少Web開發工做,包括當時學校不少二級部門的網站,校園BBS的維護等。 想一想好像也沒有那麼一件事,或者一個契機說我就喜歡上編程了。就感受很天然地就作了這個行業,也沒有以爲不喜歡,就這麼作下來了。緩存
問:你是如何喜歡上PHP的?你又是如何成爲PHP開發組核心成員的?性能優化
當時在研究生的時候要作一個網站,徹底不會的狀況下就去網上搜,恰好搜到一個PHP的教程,教怎麼作一個簡單的網站,因而試着照着作了一下,發現不管從安裝、部署(當時尚未那種集中化部署工具,不過也有不少教程教怎麼部署LAMP)、編寫代碼,測試都很方便,語法還和C語言很像,甚至不少API的名字也和libc API的同樣。因而就這樣開始了和PHP的不解之緣。微信
應該是在2011年吧,那個時候爲百度開發了Ap(Yaf的前身項目),當時在百度內部用的還不錯,因而我想着要貢獻到PECL上去,修改了一些之後,更名爲Yaf(Yet another framework,這個名字也是有點自嘲的意思,由於PHP的框架很是多),就發郵件到PHP的郵件組,由於英語比較爛,因此過程仍是比較曲折,好在當時Pierre Joye幫助我了不少,讓Yaf進入了PECL。架構
另外在提交Yaf以前我其實一直都在研究PHP的源代碼,因此也提交了很多Bug和Fix,好比我記得有一天中午,Rasmus(PHP之父)在IRC上說發現一個Bug,我差很少5分鐘後就給出了Fix。框架
等慢慢的和一些人熟悉,獲得了你們的信任之後,我就發起申請,以後就得到了PHP核心代碼的提交權限,參與到PHP的直接開發和Bug修復中,成爲了開發組的一員。編程語言
至於說核心麼,那是慢慢積累來的,其實也是一個互信的過程。若是你的工做你們承認,那麼就會尊重你的意見。我慢慢地和Dmitry Stogov變的熟了起來,獲得了Zend核心部分的提交權限,提交了不少核心Bug的修復和新特性,再後來成爲了Zend外聘顧問,慢慢成爲了Core Developer。
聽起來好像有點打怪升級的感受吧。
問:你是在什麼樣的契機下開發了Yaf?當時百度是如何支持Yaf開發的?
在Yaf以前,關於使用不使用框架其實一直有一個經典的爭論就是:「使用框架會下降性能,而不使用框架會下降開發效率。」
當時百度內部的框架不少,包括開源的Yii,ZF之類的,也包括有的團隊本身寫的。這樣有一個問題就是類庫,一些周邊設施沒有辦法互通。
還有一個緣由就是,不少框架做者把框架發佈出去之後,會發現不一樣的人會對框架作各類修改,致使時間久了,一個框架發出去,就變成了各類變種,後續統一升級也變得不可能。
因此,我決定要用PHP擴展實現一個框架來解決這些問題,固然在寫這個擴展以前其實也不是頗有信心,不知道採用擴展能帶來多大的性能提高。好在最後的結果是很好的。
問:爲何選擇用C語言來寫Yaf?
PHP是C語言寫的,因此他的擴展也是採用C語言來寫的,因而就選擇了C語言來寫Yaf。
問:爲何會離開百度,來到新浪微博?
這個其實緣由不少,好比當時在百度是T7了,業務上的事情參與得少了,感受本身好像沒有那麼多事情要作,有點虛度的感受。
另外,我當時在百度的商業搜索部,並不直接接觸訪問量大的系統,因此也但願找個大的平臺再鍛鍊下,而微博恰好就是這樣一個平臺。
來了微博之後,確實接觸到了不少以前沒有遇到過的挑戰,也感受本身的知識有了更大的舞臺能夠發揮。
問:你如今在新浪微博具體負責的工做是什麼?
我如今在微博技術部,帶着一個基礎服務小組,咱們主要的工做也分階段,前兩年的主要工做就是作微博LAMP的性能優化,包括各類基礎框架,工具研發,環境優化,規範制定等等。
這兩年,微博的LAMP架構已經趨於穩定,總體性能也有幾倍的提高。咱們也有了一套本身的高性能LAMP總體解決方案。因此LAMP優化的工做少了一些。如今主要精力都放在基礎設施的研發上,好比緩存中間層,轉碼服務,通訊平臺等等。
問:PHP7(PHPNG)有沒有把新浪微博平臺使用PHP的需求和痛點當作重要的反饋?
這個固然是有的,自從我加入開發組以來,和很多的其餘成員有過相似的爭論就是:我認爲性能很重要,而有人會認爲新特性很重要,那麼當一個新特性影響性能的時候咱們就會發生爭執。
我很偏執於性能提高,這也是爲何我後來和Dmitry Stogov合做比較多的緣由,由於他也特別關心性能。
而我關心性能的主要緣由就是,對於每1%的性能提高能給微博這樣的國內最大的LNMP平臺帶來的價值我有很真實的體會。目前咱們微博的總體性能雖然相比兩年前有了很大的提高,可是我認識到在不影響開發效率的狀況下,進一步的提高只能依賴於語言、環境的性能提高。因此這部分也就是微博對PHP的需求。
PHP7在Wordpress上相比於5.6,有100%以上的真實性能提高(QPS),我相信明年,等PHP7發佈之後,咱們微博的總體LAMP平臺的各項業務也能夠獲得100%的性能提高。
問:你參與PHP7(PHPNG)開發的流程是什麼樣的?你是如何和其餘開發組成員合做的?
PHPNG當時是一個祕密的項目,最初的參與者只有Dmitry和我,我還記得是今年開春的時候,當時咱們作的基於PHP5的JIT項目由於效果不理想因此擱置了,你們都比較鬱悶。
Dmitry說他有個想法,把ZVAL從新設計下,壓縮一下大小來減小內存佔用。而後咱們倆我的討論了一下,由於其實咱們天天都會有各類想法,因此當時也只是以爲:嗯,這個想法也許能Work。但還不是頗有信心。
當時的主要想法是趕忙作出一個能運行的原型來測試下效果。這個過程當中咱們主要是討論想法,而後各自實現要作的部分,再合併。
合做的主要工具仍是靠Skype,不過由於他在聖彼得堡,和咱們有時差,因此也會藉助於郵件交流,經過Github來Review代碼。
等到後來項目差很少有告終論,咱們發現,「嘿,這個主意不錯,起做用了」。而後就公開了。以後就變成了正常的你們協做模式,有想法就提交RPC,提交Patch,投票,你們Reivew,而後合併。
問:PHP7到目前爲止已經增長或減小了哪些特性?在發佈以前,還將如何提高性能?
有不少,除了PHPNG這個分支主要提供性能提高之外,咱們還有AST(抽象語法樹)的支持,Uniform Variable syntax,64bits length string supports,一些新的語法糖,以及最近的Native TLS等。
PHP7將在2015年10月正式發佈, 在這以前,咱們還有一些想法要嘗試,好比使用zend_array直接替代Hashtable;好比經過指定函數從新分節,排序來減小iTLB miss;好比把JIT的一部分優化手段(類型推倒)引入到PHP中,配合一些類型專有的OPCodeHandler來提速;再好比進一步提升代碼數據局部性減小Cache miss等等。
固然,咱們還有一個並行在作的JIT項目,只不過我很擔憂這個項目能不能在PHP7發佈的時候準備就緒。
問:PHP的新版本將跨過PHP6直接升級爲PHP7嗎?爲何?
這個主要的緣由是,當年PHP有過一個開發版本叫作PHP6,但後來這個版本失敗了,沒有發佈。因此,此次的版本也就應該是PHP7了。
問:Facebook發佈的語言Hack和PHP是什麼關係?Hack的目的是要取代PHP嗎?這兩種語言相比各自有什麼優點?
沒什麼太大的關係,Hack is not PHP。要說取代的話,我相信他們(Facebook)可能會有這樣的想法吧,不過這個要看社區接受不接受了。
對於Hack我不是特別熟悉,很差具體評價。
問:有人認爲因爲PHP易於學習,門檻低,因此致使一些並不適合編程的人涌了進來,你怎麼看待這種觀點?
這個觀點我實在不敢贊同。我在本科畢業的時候,也嘗試找了一些開發工做,面試了幾個單位,都被拒了,也許在當時面試個人那些人眼裏,我就是一個不適合編程的人吧。
可是PHP由於門檻低,讓人能夠很快看到本身「編程」的成果,會對新手產生一個正向反饋激勵的做用,讓有興趣的人變得更有興趣。 而編程的人越多,那麼產生大牛、對整個技術進步作出貢獻的人出現的機率也越大。
而且,將來的編程語言必定是朝着易用性發展,進一步下降編程的門檻,也許會有一天人人都能編程也說不定呢!
問:一名合格的PHP工程師的知識結構是怎樣的?
我記得之前有一句話說:「 PHP工程師都是萬金油」,其實這句話不只僅對PHP工程師適用,應該對全部的工程師都適用。
知識結構要很廣。Web開發涉及的技術點是比較多的,HTML、CSS、JS、SQL這些之外,還要懂得一些Nginx、Linux、Mysql的配置、維護、排錯經常使用的辦法,這些都應該懂一些。
問:除了技術能力以外,你在面試的時候還會注重什麼?
我會特別注意思惟清晰、溝通、談吐。其實說穿了就是將來一塊兒共事的話,會不會有障礙,以及成長潛力是否大。
問:曾經的phpe.net站長陳伯樂如今在賣男人襪。你對將來的打算是什麼?會一直都是一位coder嗎?
其實我是一個很懶的人,歷來不會考慮得很遠,今朝有酒今朝醉。因此對將來其實我也不是很清楚,我只是以爲如今我仍是喜歡編程,喜歡經過本身的工做讓你們受益並得到社區的讚譽,我以爲這樣挺好的,我會繼續作下去的。