做開源也有4, 5年的時間了, 從最初的Yaf, 到今天的PHP7, 我參與的項目越來越多, 使用我代碼的用戶也越來越多, 明天就要發布的PHP7, 絕對是我從事開源以來的一個最重要里程碑, 我應該紀念一下今天, 就讓我稍微感性一次吧.
PHP7項目開始于去年春節的時候, 那個時候我們基于PHP-5.5的Opcache JIT項目基本上因為無法得到期望的結果而擱置了, 一些在做JIT的時候收集到的信息讓我們認識到, 基礎部分還不夠好, 并不能很好的支持JIT, 所以在2014年2月左右吧, 我們開始了重構項目, 當時的希望是說通過重構, 能得到30%以上的性提升, 為將來的進一步優化提供基礎.
那時還沒有給這個項目起名字, 我們只是試試, 那幾個月是我最忙碌的時刻, 因為只有我們倆個人在這個項目中, 我還因為自身微博的工作也比較忙, 所以基本上只晚上的時間都撲在了上面. 不過好在, 我和另外一個人有5個小時的時差, 所以很多工作可以串行起來.
隨著項目的推進, 我們驚喜的發現性能提升比我們想象的還要大, 到4月的時候另外一個人也加入了進來, 到5月基本上已經完成了大部分的工作, 于是我們公布了這一個成果, 定名為PHP NG項目.
但我沒想到的是, 我們遇到了社區很大的阻力, 因為在我們秘密開發PHP NG的時候, 社區還并行著一個主要是微軟的同學們發起的64位支持的項目, 當我們公開PHP NG的時候, 他們質疑說, 突然拿著這么大的一個Patch出來, 沒有其他人懂, 后續如何維護, 如何和64位支持的分支合并等, 繼而反對采納PHP NG分支. 當時我是非常沮喪的, 持續好久的爭吵也讓我感到非常疲倦, 最后因為我實在無法排遣, 一腔怒火的也不管自己蹩腳的英文, 在郵件組回了一封吐槽郵件, 呼吁大家珍惜這個性能提升分支.
還有個很好玩的插曲, PHP NG的支持者很多, 他們也對這樣的爭吵很郁悶, 某天, 有一些支持者就在PHP官網上發布了這樣的一個新聞: http://php.net/archive/2014.php#id2014-05-27-1 其中寫到: "When we aren't looking for pictures of kittens on the internet, internals developers are nearly always looking for ways to improve PHP, a few developers have a focus on performance.", 但當天反對者們就說, 不行, PHP NG還沒有被接納, 要求刪除這篇文章, 好在考慮到文章已經發出去了, 最后就在首頁上下掉了這個文章的入口, 只是在存檔中保留了內容. 很多媒體都感受到了這次的烏龍.
爭執不下之后, 不得已, 我們只能發起投票, 來決定是否接納PHP NG, 好在, 最后投票的時候, 絕大部分人都支持了PHP NG項目, 并決定以PHP NG為基礎, 開始我們的新版的PHP的開發. 當時還沒有確定用PHP6還是PHP7版本號(后來投票決定PHP7). 我現在經常會說這次經歷, 讓我感受到了"民主之痛".
之后的事情大家就都能看到了, 在這近兩年的時間里, 各種新特性的加入, 性能的持續提升, 很多以前不合理的地方改進等等, 都加入到了PHP7, 讓PHP7越來越豐滿. 從最底層的ZVAL的改變, 到標量類型提示, 從最初的30%的性能提升, 到現在超過100%的性能飛躍, 每一處變化都讓人值得期待. 然后經過幾次不情愿的跳票, 終于, 到今天, 這一切都將呈現于你面前.
有的時候我會想, 我是幸運的, 幸運在一直有機會做沒做過并且有挑戰的事情, 幸運在一直能感受到自己的成長, 幸運在所做的大部分努力, 終究看到了效果, 得到了回報. 也衷心的希望我的幸運可以激勵更多的人參與到開源中來.
未來, 我們還會一如既往的致力于提升PHP的性能, 提升PHP的品質, 讓更多的PHPer們, 可以持續享受到透明的提升.
最后, 做開源這么久, 帶給了我很多的收獲, 我要謝謝大家, 謝謝這些鼓勵, 也謝謝那些善意的謬贊.
PS: 本來想等到PHP7發布以后再發的, 但是想到可以為它的到來造勢, 就先發布罷. PHP7 目前已經可以下載, 官方宣布考慮到時差問題, 后天早上來看吧. 目前下載地址: http://php.net/get/php-7.0.0.tar.gz/from/a/mirror enjoy!
> 惠新宸,人稱鳥哥,前微博平臺與大數據部任總架構師,現任鏈家網技術副總裁兼總架構師,也是優才學院顧問團成員之一,曾在雅虎工程技術部、百度商務搜索部從事軟件研發及部分管理工作;在開源方面惠新宸是PHP語言官方開發組的核心成員,PECL開發者,PHP7的主要開發者之一;PHP商業公司Zend的特聘顧問;作為PECL開發者貢獻了Yaf (Yet another framework),Yar(Yet another RPC framework) 以及Yac(Yet another Cache)、Taint等多個優秀開源作品,同時也是APC ,Opcache ,Msgpack等項目的維護者。擁有西安交通大學計算機及國際關系學院網絡安全碩士學位。在系統研發,性能優化,以及Web架構調優等方面有著深厚的經驗。
- PHP技術文章
- PHP中session和cookie的區別
- php設計模式(一):簡介及創建型模式
- php設計模式結構型模式
- Php設計模式(三):行為型模式
- 十款最出色的 PHP 安全開發庫中文詳細介紹
- 12個提問頻率最高的PHP面試題
- PHP 語言需要避免的 10 大誤區
- PHP 死鎖問題分析
- 致PHP路上的“年輕人”
- PHP網站常見安全漏洞,及相應防范措施總結
- 各開源框架使用與設計總結(一)
- 數據庫的本質、概念及其應用實踐(二)
- PHP導出MySQL數據到Excel文件(fputcsv)
- PHP中14種排序算法評測
- 深入理解PHP原理之--echo的實現
- PHP性能分析相關的函數
- PHP 性能分析10則
- 10 位頂級 PHP 大師的開發原則
- 30條爆笑的程序員梗 PHP是最好的語言
- PHP底層的運行機制與原理
- PHP 性能分析與實驗——性能的宏觀分析
- PHP7 性能翻倍關鍵大揭露
- 鳥哥:寫在PHP7發布之際一些話
- PHP與MySQL通訊那點事
- Php session內部執行流程的再次剖析
- 關于 PHP 中的 Class 的幾點個人看法
- PHP Socket 編程過程詳解
- PHP過往及現在及變革
- PHP吉祥物大象的由來
- PHP生成靜態頁面的方法
- 吊炸天的 PHP 7 ,你值得擁有!
- PHP開發中文件操作疑難問答
- MongoDB PHP Driver的連接處理解析
- PHP 雜談《重構-改善既有代碼的設計》之二 對象
- 在php中判斷一個請求是ajax請求還是普通請求的方法
- 使用HAProxy、PHP、Redis和MySQL支撐10億請求每周架構細節
- HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、Web Services 是什么?
- 重構-改善既有代碼的設計
- PHP場景中getshell防御思路分享
- 移動互聯時代,你看看除了PHP你還會些什么
- 安卓系統上搭建本地php服務器環境
- PHP中常見的緩存技術!
- PHP里10個鮮為人知但卻非常有用的函數
- 成為一名PHP專家其實并不難
- PHP 命令行?是的,您可以!
- PHP開發提高效率技巧
- PHP八大安全函數解析
- PHP實現四種基本排序算法
- PHP開發中的中文編碼問題
- php.get.post
- php發送get、post請求的6種方法簡明總結
- 中高級PHP開發者應該掌握哪些技術?
- 前端開發
- web前端知識體系大全
- 前端工程與性能優化(下)
- 前端工程與性能優化(上)
- 2016 年技術發展方向
- Web應用檢查清單
- 如何成為一名優秀的web前端工程師
- 前端組件化開發實踐
- 移動端H5頁面高清多屏適配方案
- 2015前端框架何去何從
- 從前端看“百度遷徙”的技術實現(一)
- 從前端看“百度遷徙”的技術實現(二)
- 前端路上的旅行
- 大公司里怎樣開發和部署前端代碼?
- 5個經典的前端面試問題
- 前端工程師新手必讀
- 手機淘寶前端的圖片相關工作流程梳理
- 一個自動化的前端項目實現(附源碼)
- 前端代碼異常日志收集與監控
- 15年雙11手淘前端技術總結 - H5性能最佳實踐
- 深入理解javascript原型和閉包系列
- 一切都是對象
- 函數和對象的關系
- prototype原型
- 隱式原型
- instanceof
- 繼承
- 原型的靈活性
- 簡述【執行上下文】上
- 簡述【執行上下文】下
- this
- 執行上下文棧
- 簡介【作用域】
- 【作用域】和【上下文環境】
- 從【自由變量】到【作用域鏈】
- 閉包
- 完結
- 補充:上下文環境和作用域的關系
- Linux私房菜