首頁  >  文章  >  後端開發  >  opcache在php中的運用

opcache在php中的運用

一个新手
一个新手原創
2017-09-06 16:26:541906瀏覽

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

  1. Scanning(Lexing) ,將PHP程式碼轉換為語言片段(Tokens)

  2. Parsing, 將Tokens轉換成簡單而有意義的表達式

  3. Compilation, 將表達式編譯成Opocdes

  4. #Execution, 順次執行Opcodes,每次一條,從而實現PHP腳本的功能。

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

php傳統運作方式:

opcache在php中的運用

為了解決這個問題,opcode快取技術就該運而生。

那麼什麼是 opcode 快取?

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

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

快取運作方式:

opcache在php中的運用

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=1opcache.enable_cli=1 opcache.enable=1   
 #是否开启opcode缓存

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

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

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

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

opcache在php中的運用

#伺服器測試:

opcache在php中的運用

opcache在php中的運用

有明顯的效率提升。

要注意到是,opcache既然會快取住檔案第一次執行的opcode,那麼在測試環境就不要開了,原因你懂得,開發時程式碼改來改去,結果卻不變………..

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

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

众所周知php是一种解释型语言,它的执行可分为如下几个流程:

  1. Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)

  2. Parsing, 将Tokens转换成简单而有意义的表达式

  3. Compilation, 将表达式编译成Opocdes

  4. Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。

这样一来的话,对于同一个文件,反复请求,就要不断解析、编译和执行PHP脚本,消耗过多资源。

php传统运行方式:

opcache在php中的運用

为了解决这个问题,opcode缓存技术应运而生。

那么什么是 opcode 缓存?

当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode 缓存就是将编译好的Opcode码缓存在内存中,下次再执行这个脚本时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了,其目地是避免重复编译,减少 CPU 和内存开销。

当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode)。Opcode 缓存就是将编译好的Opcode码缓存在内存中,下次再执行这个脚本时,直接会去找到缓存下的opcode码,直接执行最后一步,而不再需要中间的步骤了,其目地是避免重复编译,减少 CPU 和内存开销。

缓存运行方式:

opcache在php中的運用

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=1opcache.enable_cli=1 opcache.enable=1   
 #是否开启opcode缓存

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

当然opcache有很多配置,这里就不一一列举,上面这几条是标配,可以满足一般需求。

理论上讲,php文件越大,逻辑越复杂,那么opcache的效果就越明显,而且在速度和抗并发上有非常大的作用。

在本地环境测试结果如下(电脑性能有限):

opcache在php中的運用

服务器测试:

opcache在php中的運用

opcache在php中的運用

有明显的效率提升。

需要注意到是,opcache既然会缓存住文件第一次执行的opcode,那么在测试环境就不要开了,原因你懂得,开发时代码改来改去,结果却不变………..

要手动清除opcache缓存,需要运行opcache_reset()来清除,所以线上如果配置了opcache,需要清除的话可以用这个函数。

以上是opcache在php中的運用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn