本文實例講述了PHP中opcode緩存簡單用法。分享給大家供大家參考,具體如下:
1.什么是opcode
解釋器分析代碼之后,生成可以直接運行的中間代碼,就稱做操作碼,opcode
2.解釋器與編譯器的區(qū)別
解釋器是生成了中間代碼后直接運行中間代碼,運行時的控制權(quán)還是在解釋器手里。
編譯器則是生成了中間代碼之后還進一步優(yōu)化代碼,生成可以直接運行的目標程序 ,但不執(zhí)行,等待用戶觸發(fā)執(zhí)行,他的控制權(quán)在目標程序,和編譯器無關(guān)。
3.php是解釋型語言,他的原理與編譯有點相似,包括詞法分析,語法分析,語義分析.....,php解釋器的核心引擎就是zend engine
4.php如何查看一段代碼的opcode
安裝php的parsekit擴展,通過擴展的api就可以查看php的opcode,如parsekit_compile_string()
php -r "var_dump(parsekit_compile_string('print 1+1;'));"
5.opcode有生成
首先要經(jīng)過詞法分析,腳本代碼可以看做是一系列單詞組合,解釋器要對這些單詞進行分類,并打上記號
比如print,我們查看php源碼包中的zend/zend_language_scanner.l在這個文件中我們就可以查找到pirnt對應的標記。T_PRINT
找到標記之后接下來就是語法分析,在zend/zend_language_parser.y中,我們可以找到T_PRINT對應的函數(shù)
接著在zend/zend_compile.c中找到這個函數(shù)實現(xiàn)代碼,這個函數(shù)就是實現(xiàn) 了opcode的轉(zhuǎn)換。所有的opcode都是用戶整數(shù)來表示 的。
6、 開啟opcode緩存
生成opcode是需要系統(tǒng)開銷的,每一次執(zhí)行都要生成一次opcode,這樣的開銷還是可觀的,所以php的優(yōu)化必須開啟opcode的緩存,來避免重復的編譯。
php的opcode緩存有APC,eAccelerator,XCache,這些都是把opcode放在共享內(nèi)存中。
以APC為例:在php.ini中設(shè)置
apc.cache_by_default = on
通過
?php print_r(apc_cache_info());?>
可以查看緩存的情況,
7.opcode緩存過期
opcode緩存是會過期的,如果過期就要得新生成一次,當然也可以跳過過期檢查的機制,在php.ini中設(shè)置
這樣程序代碼的修改得通過重啟服務器來生效。
8.腳本的跟蹤與分析,可以使用xdebug來跟蹤,用xdebug可以實現(xiàn)性能跟蹤器,找到程序的執(zhí)行瓶頸,從而優(yōu)化程序。
xdebug.profiler_output_dir = /tmp/xdebug
xdebug.profiler_output_name = cachegrind.out.%p
xdebug的函數(shù)跟蹤:
xdebug.trace_output_dir = /tmp/xdebug
xdebug.trace_output_name = trace.%c
window下可以用wincachegrind查看xdebug的報告文件。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php緩存技術(shù)總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP基本語法入門教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
您可能感興趣的文章:- 為PHP5.4開啟Zend OPCode緩存
- PHP OPCode緩存 APC詳細介紹
- 利用PHP擴展vld查看PHP opcode操作步驟
- 深入理解PHP之OpCode原理詳解
- 理解php原理的opcodes(操作碼)
- PHP內(nèi)核學習教程之php opcode內(nèi)核實現(xiàn)
- 如何使用PHP Embed SAPI實現(xiàn)Opcodes查看器
- PHP7如何開啟Opcode打造強悍性能詳解