PHP中opcode緩存簡(jiǎn)單用法分析
本文實(shí)例講述了PHP中opcode緩存簡(jiǎn)單用法。分享給大家供大家參考,具體如下:
1.什么是opcode
解釋器分析代碼之后,生成可以直接運(yùn)行的中間代碼,就稱(chēng)做操作碼,opcode
2.解釋器與編譯器的區(qū)別
解釋器是生成了中間代碼后直接運(yùn)行中間代碼,運(yùn)行時(shí)的控制權(quán)還是在解釋器手里。
編譯器則是生成了中間代碼之后還進(jìn)一步優(yōu)化代碼,生成可以直接運(yùn)行的目標(biāo)程序 ,但不執(zhí)行,等待用戶(hù)觸發(fā)執(zhí)行,他的控制權(quán)在目標(biāo)程序,和編譯器無(wú)關(guān)。
3.php是解釋型語(yǔ)言,他的原理與編譯有點(diǎn)相似,包括詞法分析,語(yǔ)法分析,語(yǔ)義分析.....,php解釋器的核心引擎就是zend engine
4.php如何查看一段代碼的opcode
安裝php的parsekit擴(kuò)展,通過(guò)擴(kuò)展的api就可以查看php的opcode,如parsekit_compile_string()
php -r "var_dump(parsekit_compile_string('print 1+1;'));"
5.opcode有生成
首先要經(jīng)過(guò)詞法分析,腳本代碼可以看做是一系列單詞組合,解釋器要對(duì)這些單詞進(jìn)行分類(lèi),并打上記號(hào)
比如print,我們查看php源碼包中的zend/zend_language_scanner.l在這個(gè)文件中我們就可以查找到pirnt對(duì)應(yīng)的標(biāo)記。T_PRINT
找到標(biāo)記之后接下來(lái)就是語(yǔ)法分析,在zend/zend_language_parser.y中,我們可以找到T_PRINT對(duì)應(yīng)的函數(shù)
接著在zend/zend_compile.c中找到這個(gè)函數(shù)實(shí)現(xiàn)代碼,這個(gè)函數(shù)就是實(shí)現(xiàn) 了opcode的轉(zhuǎn)換。所有的opcode都是用戶(hù)整數(shù)來(lái)表示 的。
6、 開(kāi)啟opcode緩存
生成opcode是需要系統(tǒng)開(kāi)銷(xiāo)的,每一次執(zhí)行都要生成一次opcode,這樣的開(kāi)銷(xiāo)還是可觀的,所以php的優(yōu)化必須開(kāi)啟opcode的緩存,來(lái)避免重復(fù)的編譯。
php的opcode緩存有APC,eAccelerator,XCache,這些都是把opcode放在共享內(nèi)存中。
以APC為例:在php.ini中設(shè)置
apc.cache_by_default = on
通過(guò)
<?php print_r(apc_cache_info());?>
可以查看緩存的情況,
7.opcode緩存過(guò)期
opcode緩存是會(huì)過(guò)期的,如果過(guò)期就要得新生成一次,當(dāng)然也可以跳過(guò)過(guò)期檢查的機(jī)制,在php.ini中設(shè)置
apc.stat=off
這樣程序代碼的修改得通過(guò)重啟服務(wù)器來(lái)生效。
8.腳本的跟蹤與分析,可以使用xdebug來(lái)跟蹤,用xdebug可以實(shí)現(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的報(bào)告文件。
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《php緩存技術(shù)總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《PHP基本語(yǔ)法入門(mén)教程》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP正則替換函數(shù)preg_replace和preg_replace_callback使用總結(jié)
這篇文章主要介紹了PHP正則替換函數(shù)preg_replace和preg_replace_callback使用總結(jié),本文是在寫(xiě)一個(gè)模板引擎遇到一個(gè)特殊需求時(shí)總結(jié)而來(lái),需要的朋友可以參考下2014-09-09PHP has encountered an Access Violation at 7C94BD02解決方法
PHP has encountered an Access Violation at 7C94BD02解決方法2009-08-08DedeCMS 核心類(lèi)TypeLink.class.php摘要筆記
DedeCMS 核心類(lèi)TypeLink.class.php摘要筆記,學(xué)習(xí)php就是借鑒與分析,讓自己的掌握的更多。2010-04-04學(xué)習(xí)php設(shè)計(jì)模式 php實(shí)現(xiàn)備忘錄模式(Memento)
這篇文章主要介紹了php設(shè)計(jì)模式中的備忘錄模式,使用php實(shí)現(xiàn)備忘錄模式,感興趣的小伙伴們可以參考一下2015-12-12PHP實(shí)現(xiàn)隨機(jī)調(diào)用圖片的示例代碼
在Web開(kāi)發(fā)中,使用PHP可以輕松實(shí)現(xiàn)各種有趣的功能,這篇文章主要為大家介紹了如何使用PHP來(lái)實(shí)現(xiàn)隨機(jī)調(diào)用圖片,感興趣的小伙伴可以了解一下2023-08-08