国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

PHP內(nèi)核探索 —— Zend引擎:Zend引擎是PHP實(shí)現(xiàn)的核心

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

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

Zend引擎是PHP實(shí)現(xiàn)的核心,提供了語言實(shí)現(xiàn)上的基礎(chǔ)設(shè)施。例如:PHP的語法實(shí)現(xiàn),腳本的編譯運(yùn)行環(huán)境, 擴(kuò)展機(jī)制以及內(nèi)存管理等,當(dāng)然這里的PHP指的是官方的PHP實(shí)現(xiàn)(除了官方的實(shí)現(xiàn), 目前比較知名的有facebook的hiphop實(shí)現(xiàn),不過到目前為止,PHP還沒有一個(gè)標(biāo)準(zhǔn)的語言規(guī)范),而PHP則提供了請(qǐng)求處理和其他Web服務(wù)器的接口(SAPI)。

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

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

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

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

目前PHP的實(shí)現(xiàn)和Zend引擎之間的關(guān)系非常緊密,甚至有些過于緊密了,例如很多PHP擴(kuò)展都是使用的Zend API, 而Zend正是PHP語言本身的實(shí)現(xiàn),PHP只是使用Zend這個(gè)內(nèi)核來構(gòu)建PHP語言的,而PHP擴(kuò)展大都使用Zend API, 這就導(dǎo)致PHP的很多擴(kuò)展和Zend引擎耦合在一起了,后來才有PHP核心開發(fā)者就提出將這種耦合解開的建議。

目前PHP的受歡迎程度是毋庸置疑的,但凡流行的語言通常都會(huì)出現(xiàn)這個(gè)語言的其他實(shí)現(xiàn)版本, 這在Java社區(qū)里就非常明顯,目前已經(jīng)有非常多基于JVM的語言了,例如IBM的Project Zero就實(shí)現(xiàn)了一個(gè)基于JVM的PHP實(shí)現(xiàn), .NET也有類似的實(shí)現(xiàn),通常他們這樣做的原因無非是因?yàn)椋核麄兿矚g這個(gè)語言,但又不想放棄原有的平臺(tái), 或者對(duì)現(xiàn)有的語言實(shí)現(xiàn)不滿意,處于性能或者語言特性等(HipHop就是這樣誕生的)。

很多腳本語言中都會(huì)有語言擴(kuò)展機(jī)制,PHP中的擴(kuò)展通常是通過Pear庫或者原生擴(kuò)展,在Ruby中則這兩者的界限不是很明顯, 他們甚至?xí)峁﹥商讓?shí)現(xiàn),一個(gè)主要用于在無法編譯的環(huán)境下使用,而在合適的環(huán)境則使用C實(shí)現(xiàn)的原生擴(kuò)展, 這樣在效率和可移植性上都可以保證。目前這些為PHP編寫的擴(kuò)展通常都無法在其他的PHP實(shí)現(xiàn)中實(shí)現(xiàn)重用, HipHop的做法是對(duì)最為流行的擴(kuò)展進(jìn)行重寫。如果PHP擴(kuò)展能和ZendAPI解耦,則在其他語言中重用這些擴(kuò)展也將更加容易了。

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 日本韩国一级毛片中文字幕 | 久久国产精品高清一区二区三区 | 无码免费一区二区三区免费播放 | 欧美成人三级伦在线观看 | 午夜视频在线观看一区二区 | 日本亚洲综合 | 精品国产三级a | 国产一久久香蕉国产线看观看 | 一级爱| 欧美一区永久视频免费观看 | 国产精品久久网 | 亚洲欧洲国产成人综合一本 | 99热免费在线 | 欧美性色高清生活片 | 国产1000部成人免费视频 | 国产性精品 | 一本到不卡 | 国产一区二区在线视频播放 | 亚洲精彩视频在线观看 | 1级a的观看视频 | 久久综合色播 | 国产免费一区二区三区在线观看 | 99热久久国产精品这 | 精品国产品香蕉在线观看 | 亚洲天堂男人的天堂 | 黄色成人在线网站 | 亚洲综合色视频在线观看 | 模特精品一区二区三区 | 日本在线加勒比 | 久久国产精品免费一区二区三区 | 婷婷亚洲久悠悠色在线播放 | 老师张开腿让我爽了一夜视频 | 精品日本一区二区三区在线观看 | 亚洲人成片在线观看 | 国产在线精品一区二区三区 | 日韩午夜在线观看 | 欧美中文一区 | 日韩一区二区三区精品 | 狠狠色丁香婷婷综合 | 亚洲一区视频在线 | 午夜精品同性女女 |