1. 程式人生 > >php OPcache

php OPcache

medium 存在 ron 語言 edi ext processor num print

眾所周知php是一種解釋型語言,它的執行可分為如下幾個流程:

  1. Scanning(Lexing) ,將PHP代碼轉換為語言片段(Tokens)
  2. Parsing, 將Tokens轉換成簡單而有意義的表達式
  3. Compilation, 將表達式編譯成Opocdes
  4. Execution, 順次執行Opcodes,每次一條,從而實現PHP腳本的功能。

這樣一來的話,對於同一個文件,反復請求,就要不斷解析、編譯和執行PHP腳本,消耗過多資源。

php傳統運行方式:

技術分享

為了解決這個問題,opcode緩存技術應運而生。

那麽什麽是 opcode 緩存?

當解釋器完成對腳本代碼的分析後,便將它們生成可以直接運行的中間代碼,也稱為操作碼(Operate Code,opcode)。Opcode 緩存就是將編譯好的Opcode碼緩存在內存中,下次再執行這個腳本時,直接會去找到緩存下的opcode碼,直接執行最後一步,而不再需要中間的步驟了,其目地是避免重復編譯,減少 CPU 和內存開銷。

當解釋器完成對腳本代碼的分析後,便將它們生成可以直接運行的中間代碼,也稱為操作碼(Operate Code,opcode)。Opcode 緩存就是將編譯好的Opcode碼緩存在內存中,下次再執行這個腳本時,直接會去找到緩存下的opcode碼,直接執行最後一步,而不再需要中間的步驟了,其目地是避免重復編譯,減少 CPU 和內存開銷。

緩存運行方式:

技術分享

opcache就是一種opcode緩存工具。

Opcache其他的緩存工具最大的不同,也可以說是優勢,就是它已經進入php源碼樹,成為官方產品,會一直跟著php更新,而其他的已經很久不更新了,目前對於新版的php都不支持或者兼容性很差。其次,經過測試,opcache的效率也比其他工具高。

那麽如何開啟使用opcache呢?

既然opcahce已經進入php源碼樹,那麽作為內置的工具,開啟方式肯定很簡單了,下面便是推薦配置:

zend_extension=.././...php_opcache.dll(路徑)
opcache.memory_consumption=128   #共享內存
opcache.interned_strings_buffer=8   #存儲臨時字符串
opcache.max_accelerated_files=4000   #緩存文件數
opcache.revalidate_freq=60  #緩存時間
opcache.fast_shutdown=1
opcache.enable_cli=1 
opcache.enable=1   #是否開啟opcode緩存
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

你只需要將前面的;去掉就可以了。

當然opcache有很多配置,這裏就不一一列舉,上面這幾條是標配,可以滿足一般需求。

理論上講,php文件越大,邏輯越復雜,那麽opcache的效果就越明顯,而且在速度和抗並發上有非常大的作用。

在本地環境測試結果如下(電腦性能有限):

技術分享

服務器測試:

技術分享

技術分享

有明顯的效率提升。

需要註意到是,opcache既然會緩存住文件第一次執行的opcode,那麽在測試環境就不要開了,原因你懂得,開發時代碼改來改去,結果卻不變………..

要手動清除opcache緩存,需要運行opcache_reset()來清除,所以線上如果配置了opcache,需要清除的話可以用這個函數。

轉自: http://qqfe.org/archives/240?utm_source=tuicool&utm_medium=referral

鳥哥的解釋

http://www.laruence.com/2008/06/18/221.html

另一個解釋

http://www.pdosgk.com/index.php/Home/News/show/id/172417.html

php OPcache