亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

【modernPHP專題(13)】ZendOpcache字節(jié)碼緩存

KevinYan / 968人閱讀

摘要:概述字節(jié)碼緩存不是的新特性,有很多獨(dú)立的擴(kuò)展可以實(shí)現(xiàn),比如和等,但是截至目前這些擴(kuò)展都沒有集成到內(nèi)核,從開始,內(nèi)置了字節(jié)碼緩存功能,名為。開始之前,我們先來看看什么是字節(jié)碼緩存,以及字節(jié)碼緩存的作用是什么。該函數(shù)將重置整個字節(jié)碼緩存。

概述

字節(jié)碼緩存不是PHP的新特性,有很多獨(dú)立的擴(kuò)展可以實(shí)現(xiàn),比如APC、eAccelerator和Xache等,但是截至目前這些擴(kuò)展都沒有集成到PHP內(nèi)核,從PHP 5.5.0開始,PHP內(nèi)置了字節(jié)碼緩存功能,名為Zend Opcache。

開始之前,我們先來看看什么是字節(jié)碼緩存,以及字節(jié)碼緩存的作用是什么。

眾所周知,PHP是解釋型語言,構(gòu)建在Zend 虛擬機(jī)之上,PHP解釋器在執(zhí)行PHP腳本時會解析PHP腳本代碼,把PHP代碼編譯成一系列Zend操作碼( opcode,由于每個操作碼都是一個字節(jié)長,所以又叫字節(jié)碼,字節(jié)碼可以直接被Zend虛擬機(jī)執(zhí)行),然后執(zhí)行字節(jié)碼。每次請求PHP文件都是這樣,這會消耗很多資源,如果每次HTTP請求都必須不斷解析、編譯和執(zhí)行PHP腳本,消耗的資源更多。如果PHP源碼不變,相應(yīng)的字節(jié)碼也不會變化,顯然沒有必要每次都重新生成Opcode,結(jié)合在Web應(yīng)用中無處不在的緩存機(jī)制,我們可以把首次生成的Opcode緩存起來,這樣下次直接從緩存取,豈不是很快?下面是啟用Opcode緩存之前和之后的流程圖:

字節(jié)碼緩存能存儲預(yù)先編譯好的PHP字節(jié)碼,這樣,下次請求PHP腳本時,PHP解釋器不用每次讀取、解析和編譯PHP代碼,直接從內(nèi)存中讀取預(yù)先編譯好的字節(jié)碼,然后立即執(zhí)行,這樣能省很多時間,極大提升應(yīng)用的性能。

啟用Zend Opcache
注:如果使用Windows開發(fā)環(huán)境,或者使用brew或apt-get等命令安裝的PHP可以略過編譯步驟。

默認(rèn)情況下,Zend Opcache沒有開啟,需要我們在編譯時使用--enable-opcache指定啟用Zend Opcache。

編譯好PHP后還需要在php.ini中指定Opcache擴(kuò)展路徑:

zend_extension=/path/to/opcache.so

一般而言PHP編譯成功后會顯示Zend Opcache擴(kuò)展路徑,但如果想不起來,可以使用如下命令找到PHP擴(kuò)展所在目錄:

php -ini | grep extensions
[info] 注:如果你使用Xdebug,需要在php.ini中先加載Zend Opcache,再加載Xdebug。

重啟后,查看phpinfo

php -info | grep Opcache

配置Zend Opcache

啟用Zend Opcache后還需要在php.ini中配置Zend Opcache,下面是一份配置示例作為參考:

opcache.validate_timestamps=1    // 生產(chǎn)環(huán)境中配置為0
opcache.revalidate_freq=0    //檢查腳本時間戳是否有更新時間
opcache.memory_consumption=64    //Opcache的共享內(nèi)存大小,以M為單位
opcache.interned_strings_buffer=16    //用來存儲臨時字符串的內(nèi)存大小,以M為單位
opcache.max_accelerated_files=4000    //Opcache哈希表可以存儲的腳本文件數(shù)量上限
opcache.fast_shutdown=1         //使用快速停止續(xù)發(fā)事件

官網(wǎng)配置參考
使用Zend Opcache

Zend Opcache使用起來很簡單,因?yàn)閱⒂弥笏鼤詣舆\(yùn)行,Zend Opcache會自動在內(nèi)存中緩存預(yù)先編譯好的PHP字節(jié)碼,如果緩存了某個文件的字節(jié)碼,就執(zhí)行對應(yīng)的字節(jié)碼。

如果php.ini中配置了opcache.validate_timestamps值為0,需要小心,因?yàn)閆end Opcache將不能覺察PHP腳本的變化,必須手動清空Zend OPcache緩存的字節(jié)碼,才能讓它發(fā)現(xiàn)PHP文件的變動。這個配置適合在生產(chǎn)環(huán)境中設(shè)置為0,但在開發(fā)環(huán)境會帶來不便,我們可以在開發(fā)環(huán)境中這樣配置啟用自動驗(yàn)證緩存功能:

opcache.enable=1 # 啟用操作碼緩存,默認(rèn)為“1”, 如果禁用此選項(xiàng),則不會優(yōu)化和緩存代碼。
opcache.revalidate_freq=0 #  檢查腳本時間戳是否有更新的周期,以秒為單位。設(shè)置為 0 會導(dǎo)致針對每個請求, OPcache 都會檢查腳本更新。
opcache.validate_timestamps=1 # 如果啟用,那么 OPcache 會每隔 opcache.revalidate_freq 設(shè)定的秒數(shù) 檢查腳本是否更新。

手動清理緩存

除了重啟php-fpm的進(jìn)程可以清理opcache緩存外,
手動清理緩存涉及到的opcache函數(shù)主要為:opcache_reset()和opcache_invalidate() 。

boolean opcache_reset ( void ) # 該函數(shù)將重置整個字節(jié)碼緩存。 在調(diào)用 opcache_reset() 之后,所有的腳本將會重新載入并且在下次被點(diǎn)擊的時候重新解析。

[warning] 需要注意的是,當(dāng)PHP以PHP-FPM的方式運(yùn)行的時候,opcache的緩存是無法通過php命令進(jìn)行清除的,只能通過http或cgi到php-fpm進(jìn)程的方式來清除緩存。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/31470.html

相關(guān)文章

  • modernPHP專題(10)】理解output buffer

    摘要:磁盤高速緩存操作系統(tǒng)中使用磁盤高速緩存技術(shù)來提高磁盤的速度,對高速緩存復(fù)制的訪問要比原始數(shù)據(jù)訪問更為高效。因此,磁盤高速緩存在邏輯上屬于磁盤,物理上則是駐留在內(nèi)存中的盤塊。 1. 磁盤高速緩存(Disk Cache) 操作系統(tǒng)中使用磁盤高速緩存技術(shù)來提高磁盤的I/O速度,對高速緩存復(fù)制的訪問要比原始數(shù)據(jù)訪問更為高效。例如,正在運(yùn)行的進(jìn)程的指令既存儲在磁盤上,也存儲在物理內(nèi)存上,也被復(fù)...

    kelvinlee 評論0 收藏0
  • php系列框架的加速器Opcache

    摘要:什么是當(dāng)解釋器完成對腳本代碼的分析后,便將它們生成可以直接運(yùn)行的中間代碼,也稱為操作碼,。的目地是避免重復(fù)編譯,減少和內(nèi)存開銷。這將帶來顯著的性能加速,通常特別是高流量和高并發(fā)量時降低了整體服務(wù)器的內(nèi)存消耗,而且很少有缺點(diǎn)。 一、個人實(shí)踐發(fā)現(xiàn)opcache 最近為了應(yīng)對雙十一期間高流量的沖擊,小編通過壓力測試去查找服務(wù)器性能瓶頸,發(fā)現(xiàn)100并發(fā)時,QPS并不是很高,但CPU和內(nèi)存消耗特...

    lauren_liuling 評論0 收藏0
  • modernPHP專題(14)】內(nèi)置的http服務(wù)器

    摘要:起就在中內(nèi)置了服務(wù)器但只是提供開發(fā)測試使用,不推薦使用中生產(chǎn)環(huán)境中。因?yàn)檫@個服務(wù)器接受處理請求時順序執(zhí)行的,不能并發(fā)處理。這個內(nèi)置的服務(wù)器使用起來非常的方便,你只需要執(zhí)行下面的命令啟動服務(wù)器然后就可以訪問了。 PHP 5.4起就在CLI SAPI中內(nèi)置了web服務(wù)器,但只是提供開發(fā)測試使用,不推薦使用中生產(chǎn)環(huán)境中。因?yàn)檫@個服務(wù)器接受處理請求時順序執(zhí)行的,不能并發(fā)處理。 這個內(nèi)置的web...

    RancherLabs 評論0 收藏0
  • modernPHP專題(12)】魔術(shù)方法小結(jié)

    說明 魔術(shù)方法就是在特定場景下不需要調(diào)用而自動執(zhí)行的方法。因?yàn)橛心g(shù)方法,所以我們的類可以寫得很靈活~ __construct #構(gòu)造方法,在類被實(shí)例化時自動調(diào)用,一般用于初始化操作; __destruct #析構(gòu)方法,對象被銷毀時自動調(diào)用; __clone() #克隆方法,當(dāng)對象被克隆時,將會自動調(diào)用 __get($key) #屬性獲取...

    hearaway 評論0 收藏0
  • modernPHP專題(1)】php7常用特性整理

    摘要:它使得在生產(chǎn)環(huán)境中啟用斷言為零成本,并且提供當(dāng)斷言失敗時拋出特定異常的能力。錯誤和異常改變了大多數(shù)錯誤的報告方式。不同于傳統(tǒng)的錯誤報告機(jī)制,現(xiàn)在大多數(shù)錯誤被作為異常拋出。 PHP7性能 7最大的亮點(diǎn),應(yīng)該就是性能提高了兩倍,某些測試環(huán)境下甚至提高到三到五倍,具體可以了解以下鏈接: PHP7 VS HHVM (WordPress) HHVM vs PHP 7 – The Competit...

    Render 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<