首頁 >後端開發 >php教程 >PHP中opcode快取使用詳解

PHP中opcode快取使用詳解

php中世界最好的语言
php中世界最好的语言原創
2018-05-17 14:19:311593瀏覽

這次帶給大家PHP中opcode快取使用詳解,PHP中opcode快取使用的注意事項有哪些,以下就是實戰案例,一起來看一下。

1.什麼是opcode

解釋器分析程式碼之後,產生可以直接運行的中間程式碼,就稱做操作碼,opcode

2.解釋器與編譯器的差異

解釋器是產生了中間程式碼後直接執行中間程式碼,運行時的控制權還是在解譯器手上。

編譯器則是生成了中間代碼之後還進一步優化代碼,生成可以直接運行的目標程序 ,但不執行,等待用戶觸發執行,他的控制權在目標程序,和編譯器無關。

3.php是解釋型語言,他的原理與編譯有點相似,包括詞法分析,語法分析,語意分析.....,php解釋器的核心引擎就是zend engine

4.php如何查看一段程式碼的opcode

安裝#php的parsekit擴展,透過擴展的api就可以查看php的opcode,如 parsekit_compile_<a href="http://www.php.cn/wiki/57.html" target="_blank">string</a>()

php -r "var_dump(parsekit_compile_string(&#39;print 1+1;&#39;));"

5.opcode有產生

首先要經過詞法分析,腳本程式碼可以看做是一系列單字組合,解釋器要將這些單字分類,並打上記號

例如print,我們查看php原始碼套件中的zend/zend_language_scanner.l在這個檔案中我們就可以查找到pirnt對應的標記。 T_PRINT

找到標記之後接下來就是語法分析,在zend/zend_language_parser.y中,我們可以找到T_PRINT對應的函數

#接著在zend/zend_compile.c中找到這個函數實作程式碼,這個函數就是實作了opcode的轉換。所有的opcode都是用戶整數來表示 的。

6、開啟opcode快取

產生opcode是需要係統開銷的,每次執行都要產生一次opcode,這樣的開銷還是可觀的,所以php的最佳化必須開啟opcode的緩存,來避免重複的編譯。

php的opcode快取有APC,eAccelerator,XCache,這些都是把opcode放在共享記憶體中。

以APC為例:在php.ini中設定

apc.cache_by_default = on

透過

<?php print_r(apc_cache_info());?>

可以查看快取的情況,

7.opcode快取過期

opcode快取是會過期的,如果過期就要得新產生一次,當然也可以跳過過期檢查的機制,在php.ini中設定

apc.stat=off

這樣程式碼的修改得透過重啟伺服器來生效。

8.腳本的追蹤與分析,可以使用xdebug來追蹤,用xdebug可以實現效能追蹤器,找到程式的執行瓶頸,從而優化程式。

<p style="margin-bottom: 7px; margin-top: 14px;">xdebug.profiler_output_dir = /tmp/xdebug<br/>xdebug.profiler_output_name = cachegrind.out.%p</p>

xdebug的函數追蹤:

xdebug.trace_output_dir = /tmp/xdebug
xdebug.trace_output_name = trace.%c

window下可以用wincachegrind查看xdebug的報告檔。

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

PHP中單雙號與變數使用詳解

Laravel ORM對Model::find緩存方法詳解

以上是PHP中opcode快取使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn