1.什么是opcode
解釋器分析代碼之后,生成可以直接運(yùn)行的中間代碼飞蛹,就稱做操作碼清焕,opcode
目的:將生成的中間代碼放到共享內(nèi)存中提升PHP性能,省去了每次加載和解析PHP腳本的開銷蝠猬。
2.解釋器與編譯器的區(qū)別
解釋器是生成了中間代碼后直接運(yùn)行中間代碼切蟋,運(yùn)行時的控制權(quán)還是在解釋器手里。
編譯器則是生成了中間代碼之后還進(jìn)一步優(yōu)化代碼榆芦,生成可以直接運(yùn)行的目標(biāo)程序 柄粹,但不執(zhí)行喘鸟,等待用戶觸發(fā)執(zhí)行,他的控制權(quán)在目標(biāo)程序驻右,和編譯器無關(guān)什黑。
3.php是解釋型語言,他的原理與編譯有點(diǎn)相似堪夭,包括詞法分析愕把,語法分析,語義分析.....,php解釋器的核心引擎就是zend engine
4.php如何查看一段代碼的opcode
安裝php的parsekit擴(kuò)展森爽,通過擴(kuò)展的api就可以查看php的opcode恨豁,如parsekit_compile_string()
5.opcode緩存相當(dāng)于是加密PHP代碼的一種機(jī)制。
6.PHP中幾種opcode
opcache 官方推薦
商業(yè)代碼 5.2之前是zend optimizer 5.3+ zend guard loader.
6爬迟、 開啟opcode緩存
生成opcode是需要系統(tǒng)開銷的橘蜜,每一次執(zhí)行都要生成一次opcode,這樣的開銷還是可觀的付呕,所以php的優(yōu)化必須開啟opcode的緩存计福,來避免重復(fù)的編譯。
php的opcode緩存有APC,eAccelerator,XCache徽职,這些都是把opcode放在共享內(nèi)存中象颖。
7.opcode緩存過期
opcode緩存是會過期的,如果過期就要得新生成一次姆钉,當(dāng)然也可以跳過過期檢查的機(jī)制力麸,在php.ini中設(shè)置apc.stat=off
這樣程序代碼的修改得通過重啟服務(wù)器來生效。
(本文為轉(zhuǎn)載+部分原創(chuàng))