BC PHP —— 改寫(xiě)PHP的編譯器
BC PHP,全稱(chēng)是ByteCode PHP,是一個(gè)基于 PHP 代碼的編譯器。我們可以把 PHP 程序中的源代碼,翻譯成一種高效的二進(jìn)制表示形式,這個(gè)二進(jìn)制代碼稱(chēng)為字節(jié)碼。這樣,一旦 PHP 源代碼被翻譯成字節(jié)碼,每次使用時(shí)都不必重新解析源代碼,因此可以快速地執(zhí)行程序。類(lèi)似于 Java 中的翻譯過(guò)程,我們可以先將 Java 代碼編譯為字節(jié)碼,再使用對(duì)應(yīng)的虛擬機(jī)運(yùn)行。
那么,BC PHP 更快嗎?讓我們看一下以下代碼:
``````
首先,我們使用內(nèi)置函數(shù) `opcache_compile_file` 將代碼編譯成字節(jié)碼。在輸出字節(jié)碼的前 30 行,你會(huì)看到以下內(nèi)容:
```
00000000: 00000000 00000000 00000000 77524100 00000000 // ......wRA.....
0000000c: 78650000 00000000 00000000 00010000 00000000 // xe.............
00000018: f3c20300 00005b00 00010000 27000000 06000000 // ....[....'.....
00000024: 00000000 06000000 00000000 00000000 00000000 // ................
00000030: 00000000 00000000 00000002 2d020000 5b000000 // .........-...[..
```
這就是你的代碼的二進(jìn)制表示形式。與源代碼相比,很難閱讀也很難編輯,但在運(yùn)行時(shí),它們將更快。
為了比較 BC PHP 與源代碼之間的性能差異,我們可以使用 PHP 函數(shù) `microtime`。以下代碼使用 PHP 代碼來(lái)輸出“Hello World”,然后輸出它的時(shí)間:
``````
將輸出:
```
Hello World!
2.6941299438477E-5seconds
```
現(xiàn)在,我們使用 BC PHP,但是我們不必改變要執(zhí)行的 PHP 代碼本身。將上面的文件編譯為字節(jié)碼文件,并執(zhí)行 :
```
php -d opcache.file_cache=/tmp -d opcache.enable=1 \
-d opcache.enable_cli=1 -d opcache.file_cache_only=1 \
-d opcache.optimization_level=3 \
/path/to/helloworld.php
```
結(jié)果輸出:
```
Hello World!
7.5101852416992E-6seconds
```
即使在簡(jiǎn)單的腳本中,這里的差異可能并不明顯。但是,隨著應(yīng)用程序規(guī)模的增長(zhǎng),BC PHP 明顯比執(zhí)行 PHP 腳本的速度更快。
BC PHP 可以作為 Zend 的替代品,以提供更快的 PHP 執(zhí)行速度。這也是 Laravel 框架默認(rèn)打開(kāi) opcache 特性的原因之一。
總之,BC PHP 為我們提供了一個(gè)更快速的 PHP 執(zhí)行方式。雖然開(kāi)發(fā)者需要探索一些新工具和技術(shù),但是 BC PHP 的使用是一項(xiàng)有利的嘗試。如果你是一個(gè) PHP 開(kāi)發(fā)者,那么你應(yīng)該嘗試使用 BC PHP 來(lái)進(jìn)行性能測(cè)試和分析。
網(wǎng)站導(dǎo)航
- zblogPHP模板zbpkf
- zblog免費(fèi)模板zblogfree
- zblog模板學(xué)習(xí)zblogxuexi
- zblogPHP仿站zbpfang