Github歡樂(lè)多 PHP神級(jí)代碼引發(fā)吐槽熱
前日,github的PHP板塊驚現(xiàn)一段能夠提升70%運(yùn)行效率的代碼,引發(fā)了全世界眾多網(wǎng)友的吐槽和調(diào)侃,“awesome!”、“well done!”、“PHP是世界第一語(yǔ)言!”平時(shí)不茍言笑,埋頭苦干的程序員們充分發(fā)揮了其幽默的一面,github成為了歡樂(lè)的海洋。
先來(lái)看看這一段神級(jí)的代碼:
這段代碼所做的就是一件事情:禁用PHP的垃圾回收器。然后網(wǎng)友測(cè)試在使用禁用PHP的垃圾回收器后帶來(lái)的效果就是:
Before: Memory usage: 163.66MB (peak: 403.82MB), time: 246.25sAfter: Memory usage: 163.34MB (peak: 350.36MB), time: 99.55s某個(gè)PHP程序運(yùn)行所需時(shí)間從246.25秒降低到99.55秒!
Before: Memory usage: 152.71MB (peak: 335.9MB), time: 195.99sAfter: Memory usage: 164MB (peak: 308.02MB), time: 104.06s某個(gè)PHP程序運(yùn)行所需時(shí)間從195.99秒降低到104.06秒!
……
總的說(shuō)來(lái),就是禁用垃圾回收器可以提升PHP70%運(yùn)行效率。
既然,PHP的垃圾回收如此不靠譜,那么它以前設(shè)計(jì)的初衷是什么呢?
因?yàn)樵贑/C++中,內(nèi)存管理是一件很麻煩的事情,內(nèi)存的使用和釋放都需要程序員編寫(xiě)程序手動(dòng)操作,如果有所遺漏,就可能造成資源浪費(fèi)甚至內(nèi)存泄露。因此PHP在設(shè)計(jì)的時(shí)候?yàn)榱艘?guī)避這個(gè)問(wèn)題,引入了垃圾回收器來(lái)用于自動(dòng)釋放無(wú)用對(duì)象的內(nèi)存。
值得一提的是PHP在運(yùn)行循環(huán)回收算法的時(shí)候,會(huì)產(chǎn)生額外的時(shí)間消耗。雖然在較小的項(xiàng)目中,這種額外消耗微乎其微,但是當(dāng)運(yùn)行大項(xiàng)目時(shí),由于同時(shí)啟動(dòng)了多個(gè)循環(huán)回收的線程,這種消耗將會(huì)產(chǎn)生很大的影響,最直觀的表現(xiàn)就是程序運(yùn)行時(shí)間變長(zhǎng)了。
禁用PHP的垃圾回收,是提高程序運(yùn)行效率的最簡(jiǎn)單粗暴的方式。這就如同腿腳受傷了,最簡(jiǎn)單的方式就是截肢一樣。
當(dāng)該神級(jí)代碼一公布,github的程序員們便樂(lè)開(kāi)了花:
首先到來(lái)的homm表達(dá)了對(duì)這種處理方式的驚訝以及不明白為什么要這么做,并客觀評(píng)價(jià)了這個(gè)處理方式看起來(lái)并不好:
接著到來(lái)的smileytechguy便開(kāi)始調(diào)侃了:“恩,沒(méi)有注釋?zhuān)屛覀儼裀HP的內(nèi)核禁用了吧,我們也不會(huì)解釋為什么這樣做的。”
然后就開(kāi)始一發(fā)不可收拾了:
有打醬油的:
有吐槽和調(diào)侃的:
光是說(shuō)PHP是世界第一語(yǔ)言的就有幾個(gè)國(guó)家的版本,話說(shuō)只用幾段代碼就能提高70%效率,PHP世界第一語(yǔ)言當(dāng)之無(wú)愧:
還有賣(mài)萌的:
PHP的垃圾回收機(jī)制成為大家的笑料,我們也很清楚簡(jiǎn)單的禁用PHP垃圾回收并不能解決內(nèi)存溢出等問(wèn)題,PHP未來(lái)如何處理好內(nèi)存管理與運(yùn)行效率之間的矛盾將是一件任重而道遠(yuǎn)的事情。
via:evget
相關(guān)文章:
1. PHP字符串前后字符或空格刪除方法介紹2. ASP基礎(chǔ)入門(mén)第三篇(ASP腳本基礎(chǔ))3. 解決ajax的delete、put方法接收不到參數(shù)的問(wèn)題方法4. css進(jìn)階學(xué)習(xí) 選擇符5. JSP之表單提交get和post的區(qū)別詳解及實(shí)例6. html清除浮動(dòng)的6種方法示例7. PHP循環(huán)與分支知識(shí)點(diǎn)梳理8. Python基于Serializer實(shí)現(xiàn)字段驗(yàn)證及序列化9. 使用AJAX(包含正則表達(dá)式)驗(yàn)證用戶(hù)登錄的步驟10. JavaScript實(shí)現(xiàn)組件化和模塊化方法詳解
