Maison  >  Article  >  développement back-end  >  L'utilisation d'opcache en php

L'utilisation d'opcache en php

一个新手
一个新手original
2017-09-06 16:26:541928parcourir

Comme nous le savons tous, php est un langage interprété, et son exécution peut être divisée selon les processus suivants :

  1. Scanning (Lexing), qui convertit le code PHP en fragments de langage ( Tokens)

  2. Analyse, convertir les jetons en expressions simples et significatives

  3. Compilation, compiler des expressions en Opocdes

  4. Exécution, exécutez les Opcodes séquentiellement, un à la fois, réalisant ainsi la fonction de script PHP.

Dans ce cas, des requêtes répétées pour le même fichier nécessiteront une analyse, une compilation et une exécution continues de scripts PHP, consommant trop de ressources.

Mode de fonctionnement traditionnel de PHP :

Lutilisation dopcache en php

Afin de résoudre ce problème, la technologie de mise en cache des opcodes a vu le jour.

Alors, qu'est-ce que le cache d'opcodes ?

Lorsque l'interpréteur termine l'analyse du code du script, il génère un code intermédiaire qui peut être exécuté directement, également appelé opcode (Operate Code, opcode). La mise en cache de l'opcode consiste à mettre en cache le code de l'opcode compilé dans la mémoire. La prochaine fois que vous exécuterez ce script, vous trouverez directement le code de l'opcode dans le cache et exécuterez directement la dernière étape sans avoir besoin d'étapes intermédiaires. Son but est d'éviter la répétition. compilation pour réduire la surcharge du processeur et de la mémoire.

Lorsque l'interpréteur termine l'analyse du code du script, il génère un code intermédiaire qui peut être exécuté directement, également appelé opcode (Operate Code, opcode). La mise en cache de l'opcode consiste à mettre en cache le code opcode compilé dans la mémoire. La prochaine fois que vous exécuterez ce script, vous trouverez directement le code opcode dans le cache et exécuterez directement la dernière étape sans avoir besoin d'étapes intermédiaires. Son but est d'éviter la répétition. compilation pour réduire la surcharge du processeur et de la mémoire.

Mode de fonctionnement du cache :

Lutilisation dopcache en php

opcache est un outil de mise en cache d'opcode.

La plus grande différence entre Opcache et les autres outils de mise en cache, qui peut également être considérée comme son avantage, est qu'il est entré dans l'arborescence du code source PHP et est devenu un produit officiel. Il sera toujours mis à jour avec PHP, tandis que les autres n'ont pas été mis à jour depuis longtemps. Actuellement, la nouvelle version de PHP n'est pas prise en charge ou a une mauvaise compatibilité. Deuxièmement, après tests, opcache est plus efficace que les autres outils.

Alors, comment activer opcache ?

Maintenant que opcahce est entré dans l'arborescence des sources PHP, en tant qu'outil intégré, il doit être très simple à ouvrir. Voici la configuration recommandée :

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缓存

Il vous suffit de le faire. pour supprimer le précédent; c'est tout.

Bien sûr, opcache a de nombreuses configurations, donc je ne les listerai pas toutes ici. Celles ci-dessus sont des configurations standards et peuvent répondre à des besoins généraux.

Théoriquement, plus le fichier PHP est volumineux et plus la logique est complexe, plus l'effet d'opcache sera évident, et il jouera un grand rôle en termes de vitesse et d'anti-concurrence.

Les résultats des tests dans l'environnement local sont les suivants (les performances de l'ordinateur sont limitées) :

Lutilisation dopcache en php

Test du serveur :

Lutilisation dopcache en php

Lutilisation dopcache en php

Il y a une amélioration significative de l'efficacité.

Il convient de noter que puisque opcache mettra en cache l'opcode qui est exécuté pour la première fois dans le fichier, il ne doit pas être ouvert dans l'environnement de test. Vous en connaissez la raison. le code est modifié encore et encore, mais le résultat est différent. Inchangé…………..

Pour vider manuellement le cache opcache, vous devez exécuter opcache_reset() pour l'effacer, donc si opcache est configuré en ligne et doit être effacé, vous pouvez utiliser cette fonction.

Réimprimé de : 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传统运行方式:

Lutilisation dopcache en php

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

那么什么是 opcode 缓存?

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

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

缓存运行方式:

Lutilisation dopcache en 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的效果就越明显,而且在速度和抗并发上有非常大的作用。

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

Lutilisation dopcache en php

服务器测试:

Lutilisation dopcache en php

Lutilisation dopcache en php

有明显的效率提升。

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn