ご存知のとおり、php はインタープリタ型言語であり、その実行は次のプロセスに分割できます:
スキャン (字句解析)、PHP コードを言語フラグメント (トークン) に変換します
解析、トークンを言語フラグメントに変換しますシンプルで意味のある式
Compilation、式をOpocdesにコンパイルします
Execution、オペコードを一度に1つずつ順番に実行することで、PHPスクリプトの機能を実現します。
この場合、同じファイルに対するリクエストを繰り返すと、PHP スクリプトの継続的な解析、コンパイル、実行が必要になり、リソースが過剰に消費されます。
PHP の従来の動作モード:
この問題を解決するために、オペコード キャッシュ テクノロジが登場しました。
インタプリタはスクリプト コードの分析を完了すると、オペレーション コード (Operate Code、opcode) とも呼ばれる、直接実行できる中間コードを生成します。オペコード キャッシュは、コンパイルされたオペコード コードをメモリにキャッシュし、次回このスクリプトを実行するときに、キャッシュ内のオペコード コードを直接見つけて、中間ステップを必要とせずに最後のステップを直接実行することを目的としています。 CPU とメモリのオーバーヘッドを削減するためにコンパイルします。
インタプリタはスクリプト コードの分析を完了すると、オペレーション コード (Operate Code、opcode) とも呼ばれる、直接実行できる中間コードを生成します。オペコード キャッシュは、コンパイルされたオペコード コードをメモリにキャッシュし、次回このスクリプトを実行するときに、キャッシュ内のオペコード コードを直接見つけて、中間ステップを必要とせずに最後のステップを直接実行することを目的としています。 CPU とメモリのオーバーヘッドを削減するためにコンパイルします。
opcache は、オペコード キャッシュ ツールです。
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 はファイルの最初の実行のオペコードをキャッシュするため、開発中にコードが何度も変更されることに注意してください。結果は変わりません... .
opcache キャッシュを手動でクリアするには、opcache_reset() を実行してクリアする必要があるため、opcache がオンラインで構成されており、クリアする必要がある場合は、この関数を使用できます。
転載元: http://qqfe.org/archives/240?utm_source=tuicool&utm_medium=referral
众所周知php是一种解释型语言,它的执行可分为如下几个流程:
Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)
Parsing, 将Tokens转换成简单而有意义的表达式
Compilation, 将表达式编译成Opocdes
Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。
这样一来的话,对于同一个文件,反复请求,就要不断解析、编译和执行PHP脚本,消耗过多资源。
php传统运行方式:
为了解决这个问题,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=1opcache.enable_cli=1 opcache.enable=1 #是否开启opcode缓存
你只需要将前面的;去掉就可以了。
当然opcache有很多配置,这里就不一一列举,上面这几条是标配,可以满足一般需求。
理论上讲,php文件越大,逻辑越复杂,那么opcache的效果就越明显,而且在速度和抗并发上有非常大的作用。
在本地环境测试结果如下(电脑性能有限):
服务器测试:
有明显的效率提升。
需要注意到是,opcache既然会缓存住文件第一次执行的opcode,那么在测试环境就不要开了,原因你懂得,开发时代码改来改去,结果却不变………..
要手动清除opcache缓存,需要运行opcache_reset()来清除,所以线上如果配置了opcache,需要清除的话可以用这个函数。
以上がPHPでのopcacheの使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。