亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

PHP內核探索 —— Zend引擎:Zend引擎是PHP實現的核心

瀏覽:2日期:2022-09-16 11:22:29

相信很多人都聽說過 Zend Engine 這個名詞,也有很多人知道 Zend Engine 就是 PHP 語言的核心,但若要問一句:Zend Engine 到底存在于何處?或者說,Zend Engine 究竟是在什么時候怎么發揮作用讓 PHP 源碼輸出我們想要的東西的?

Zend引擎是PHP實現的核心,提供了語言實現上的基礎設施。例如:PHP的語法實現,腳本的編譯運行環境, 擴展機制以及內存管理等,當然這里的PHP指的是官方的PHP實現(除了官方的實現, 目前比較知名的有facebook的hiphop實現,不過到目前為止,PHP還沒有一個標準的語言規范),而PHP則提供了請求處理和其他Web服務器的接口(SAPI)。

要理解 Zend Engine 的作用,就不能不理解為什么會出現,PHP 為什么需要 Zend Engine, Zend Engine 的出現為 PHP 解決了什么問題。PHP 發展到 3.0 版本的時候,此時 PHP 已經很普及了。“在 PHP3 的頂峰,Internet 上 10% 的 web 服務器上都安裝了它”,PHP Manual 如是說。廣泛的應用必然帶來更高的要求。但此時的 PHP3 卻有些力不從心了,這主要是因為 PHP3 采用的是邊解釋邊執行的運行方式,運行效率很受其影響。其次,代碼整體耦合度比較高,可擴展性也不夠好,不利于應付各種各樣需求。因此,此時在 PHP 界里已經有點中流砥柱作用的 Zeev Suraski 和 Andi Gutmans 決定重寫代碼以解決這兩個問題。最終他們倆把該項技術的核心引擎命名為 Zend Engine,Zend 的意思即為 Zeev + Andi 。

Zend Engine 最主要的特性就是把 PHP 的邊解釋邊執行的運行方式改為先進行預編譯(Compile),然后再執行(Execute)。這兩者的分開給 PHP 帶來了革命性的變化:執行效率大幅提高;由于實行了功能分離,降低了模塊間耦合度,可擴展性也大大增強。此時 PHP 已經能很方便的應付各種各樣的 BT 需求了,而伴隨 PHP 4.4.x ―可能是 PHP4 系列的最后一個分支―的發布,PHP 的大部分開發人員已經將注意力放在了 PHP5 或者 PHP6 上面,以后發布的基本上就是一些 Bug Fix Release。可以說第一代的 Zend Engine 是已經在站最后一班崗了。

2004 年 7 月,PHP 5 發布,支持 PHP5 的是 Zend Engine 2.0 版本。這個版本主要是對 PHP 的 OO 功能進行了改進(我沒有提集成 SQLite、PDO 等特性是因為我們現在談的主要是 Zend Engine 而非 PHP)。核心執行方式(非 OO 部分)較PHP4 的1.0 版本變動不大,所以 PHP5 純粹的執行速度相對于 PHP4 沒有大的提高。而預計將于本月中旬發布的 PHP 5.1 版本則會攜帶 Zend Engine 2.1 版本,這個版本將提供新的執行方式,執行速度也會快上許多,至少要比 PHP5.0 相對于 PHP4.x 的差別要大很多,所以,PHP 5.1 將會是一個很了很令人期待的版本。

但并非 PHP5 系列的 Zend Engine 2 就完美無缺了。前面已經提到過,Zend Engine 將代碼分成編譯和執行兩大部分。一般情況下,我們的代碼完成以后就很少再去改變了。但執行時 PHP 卻不得不還得一次又一次的重復編譯,這根本就是毫無必要的。而且通常情況下,編譯的所花費的時間并不比執行少多少,說是五五開并不為過,因此這極大的浪費了機器的 CPU。基于 Zend Engine 3.0 的 PHP6 將試圖解決這個問題。除此之外,目前的 PHP 對多字節的字符處理也是 PHP 的一大致命缺陷。這在人們聯系日益國際化的今天幾乎是不可忍受的。而無數人在抨擊 PHP 或 比較 ASP 等同類語言時總是不可避免的要提到這一點。同時受到 IBM 方面的壓力,PHP6 也將會把對多字節字符的處理提到首要日程。這在 PHP6 的 Dev 版本中已經得到體現。

目前PHP的實現和Zend引擎之間的關系非常緊密,甚至有些過于緊密了,例如很多PHP擴展都是使用的Zend API, 而Zend正是PHP語言本身的實現,PHP只是使用Zend這個內核來構建PHP語言的,而PHP擴展大都使用Zend API, 這就導致PHP的很多擴展和Zend引擎耦合在一起了,后來才有PHP核心開發者就提出將這種耦合解開的建議。

目前PHP的受歡迎程度是毋庸置疑的,但凡流行的語言通常都會出現這個語言的其他實現版本, 這在Java社區里就非常明顯,目前已經有非常多基于JVM的語言了,例如IBM的Project Zero就實現了一個基于JVM的PHP實現, .NET也有類似的實現,通常他們這樣做的原因無非是因為:他們喜歡這個語言,但又不想放棄原有的平臺, 或者對現有的語言實現不滿意,處于性能或者語言特性等(HipHop就是這樣誕生的)。

很多腳本語言中都會有語言擴展機制,PHP中的擴展通常是通過Pear庫或者原生擴展,在Ruby中則這兩者的界限不是很明顯, 他們甚至會提供兩套實現,一個主要用于在無法編譯的環境下使用,而在合適的環境則使用C實現的原生擴展, 這樣在效率和可移植性上都可以保證。目前這些為PHP編寫的擴展通常都無法在其他的PHP實現中實現重用, HipHop的做法是對最為流行的擴展進行重寫。如果PHP擴展能和ZendAPI解耦,則在其他語言中重用這些擴展也將更加容易了。

標簽: PHP
相關文章:
主站蜘蛛池模板: pans全部视频在线观看 | 国产在线小视频 | 中文字幕亚洲欧美日韩不卡 | 色五夜婷婷 | 日本不卡免费新一二三区 | er久99久热只有精品国产 | 琪琪五月天综合婷婷 | 国产午夜视频在线观看 | 国产成人永久免费视 | 久久久国产99久久国产久 | 中国女人野外做爰视频在线看 | 亚洲精品乱码久久久久久蜜桃欧美 | 中文字幕永久在线视频 | 故意坐公交忘穿内裤被挺进小说 | 视频一区二区三区在线观看 | 高h喷水荡肉爽文1v1 | 国产二区视频在线观看 | 国产观看精品一区二区三区 | 能看av的网址 | 久久在线视频免费观看 | 色婷婷精品免费视频 | 婷婷中文在线 | 国产精品新婚门 | 女人被男人狂躁的视频免费 | 三级午夜宅宅伦不卡在线 | 丝袜无码一区二区三区 | 欧美日韩高清不卡免费观看 | 综合久久婷婷 | 成人黄色片网站 | 99视频在线观看视频一区 | 91精品国产91久久久久久 | 午夜视频福利在线 | 国产三级日本三级在线播放 | 亚洲日本国产 | 国产精品怕怕怕视频免费 | 黑人欧美一级毛片 | 精品哟哟哟国产在线观看不卡 | 怡红院男人天堂 | 三级在线国产 | 国产精品亚洲精品爽爽 | 国产精品免费观看 |