[Modern PHP] 第二章 新特性之6 Zend OPcache

來源:互聯網
上載者:User
[Modern PHP] 第二章 新特性之六 Zend OPcache

Zend OPcache


位元組程式碼快取技術對於PHP來說並不新鮮。我們很早就有了Alternative PHP Cache(APC)、eAccelerator、ionCube和XCache這些獨立的擴充,它們都可以作為我們的可選方案。但是在PHP的每個核心發布版本中都沒有它們的身影。直到現在PHP 5.5.0後,PHP才有了自己內建的位元組程式碼快取:Zend OPcache。


首先,讓我來解釋一下什麼是位元組碼以及它的重要性。PHP是一種解釋語言。當PHP解譯器執行一個PHP指令碼時,解譯器解析PHP的指令碼代碼,將PHP代碼編譯成一組Zend Opcodes(機器碼指令),最終執行這些位元組碼。PHP檔案在每次請求時都會重複上面的步驟。這樣做未免太浪費了,尤其是每次HTTP請求時PHP指令碼都要一次又一次的執行解析、編譯和執行。如果我們有辦法能夠緩衝住這些編譯好的位元組碼就可以縮短應用程式的回應時間,並且能夠減輕系統資源的壓力。你真幸運。


位元組程式碼快取能夠儲存編譯後的PHP位元組碼。這意味著每次請求時PHP解譯器不再需要讀取、解析和編譯PHP代碼,而是可以直接從記憶體中讀取編譯後的位元組碼並執行。這大大節省了時間,極大的提升了應用程式的效能。


開啟Zend OPcache


Zend OPcache預設是不啟用的,你需要在安裝編譯PHP時明確的開啟Zend OPcache才行。


如果你使用的是虛擬機器主機,請確保你選擇的是一家能夠提供PHP 5.5.0及以上版本並且開啟Zend OPcache的優秀服務商。


如果你自己編譯PHP(假設你使用的是VPS或者伺服器託管),你必須在PHP的 ./configure命令後添加一個參數

--enable-opcache

在PHP編譯完成後,你還需要在phpini檔案中指定Zend OPcache擴充的路徑,參照下面的樣本:

zend_extension=/path/to/opcache.so


在PHP編譯成功後會立刻顯示Zend OPcache擴充的檔案路徑的。如果你忘了像我說的這麼做,你也可以執行下面的命令來擷取PHP所有擴充存放的路徑地址:

php-config --extension-dir


如果你在使用無與倫比的Derick Rethans開發流行調試工具Xdebug,在php.ini檔案中,Zend OPcache擴充必須在Xdebug擴充之前載入。


在你更新了php.ini檔案並且重啟PHP進程後就可以使用了。如果需要確認Zend OPcache是否正確安裝,可以建立一個PHP檔案包含下面的內容:


在瀏覽器中查看這個PHP檔案,並且下拉捲軸直到看到Zend OPcache擴充那一段資訊,2-2所示。如果你沒有看到這段資訊,就表示Zend OPcache並沒有在運行。


圖 2-2 Zend OPcache INI設定


配置Zend OPcache


在Zend OPcache啟用的情況下,你可以在php.ini設定檔中配置Zend OPcache。下面是我喜歡使用的OPcache設定:

opcache.validate_timestamps =1 // 在生產環境中使用"0"

opcache.revalidate_freq =0

opcache.memory_consumption =64

opcache.interned_strings_buffer =16

opcache.max_accelerated_files =4000

opcache.fast_shutdown =1


想瞭解更多關於這些Zend OPcache設定的資訊可以閱讀第八章。在PHP.net上可以擷取到完整的設定列表。


使用Zend OPcache


這部分內容很簡單,因為Zend OPcache一旦啟用就會自動工作。Zend OPcache會自動將編譯後的PHP位元組程式碼快取到記憶體中並自動執行混存後的位元組碼。


當INI參數 opcache.validate_timestamps設定為false(0)時需要格外小心。這種情況下,Zend OPcache不會檢測你的PHP指令碼的改動,因此你必須在改動了PHP檔案後手動的去清除Zend OPcaches的位元組程式碼快取才行。這個設定對線上的產品伺服器有很大的協助,但是會給開發帶來很大的不便。你可以在開發時使用下面的php.ini的配置設定來啟用自動的檔案檢測:

opcache.validate_timestamps = 1

opcache.revalidate_freq = 0

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.