OPcache是一個(gè)用于緩存PHP腳本的擴(kuò)展模塊,它可以模擬PHP腳本的解釋執(zhí)行過(guò)程,并將其編譯成opcode(操作碼),從而在以后的相同請(qǐng)求中直接使用緩存的opcode,避免了重復(fù)的解釋和編譯過(guò)程,從而提高了PHP腳本的執(zhí)行效率。
具體來(lái)說(shuō),當(dāng)一個(gè)PHP腳本第一次被執(zhí)行時(shí),OPcache將對(duì)該腳本進(jìn)行解釋和編譯,并將編譯后的opcode存儲(chǔ)在內(nèi)存中,以后在訪問(wèn)該腳本時(shí),只需直接使用緩存的opcode即可,從而大大減少了計(jì)算和I/O操作,提高了運(yùn)行效率。 OPcache緩存是PHP的一個(gè)內(nèi)置緩存機(jī)制,在PHP 5.5及以上版本中已經(jīng)默認(rèn)開啟。
什么是 zend opcache?Zend OPcache 通過(guò) opcode 緩存和優(yōu)化提供更快的 PHP 執(zhí)行過(guò)程。它將預(yù)編譯的腳本文件存儲(chǔ)在共享內(nèi)存中供以后使用,從而避免了從磁盤讀取代碼并進(jìn)行編譯的時(shí)間消耗。同時(shí),它還應(yīng)用了一些代碼優(yōu)化模式,使得代碼執(zhí)行更快。
當(dāng)解釋器完成對(duì)腳本代碼的分析后,便將它們生成可以直接運(yùn)行的中間代碼,也稱為操作碼(Operate Code,opcode)。Opcode cache 的目地是避免重復(fù)編譯,減少 CPU 和內(nèi)存開銷。如果動(dòng)態(tài)內(nèi)容的性能瓶頸不在于 CPU 和內(nèi)存,而在于 I/O 操作,比如數(shù)據(jù)庫(kù)查詢帶來(lái)的磁盤 I/O 開銷,那么 opcode cache 的性能提升是非常有限的。但是既然 opcode cache 能帶來(lái) CPU 和內(nèi)存開銷的降低,這總歸是好事!
現(xiàn)代操作碼緩存器(Optimizer+,APC2.0+,其他)使用共享內(nèi)存進(jìn)行存儲(chǔ),并且可以直接從中執(zhí)行文件,而不用在執(zhí)行前“反序列化”代碼。這將帶來(lái)顯著的性能加速,通常降低了整體服務(wù)器的內(nèi)存消耗,而且很少有缺點(diǎn)。