Maison  >  Article  >  développement back-end  >  Utilisez hidef au lieu de définir en PHP pour optimiser l'efficacité

Utilisez hidef au lieu de définir en PHP pour optimiser l'efficacité

*文
*文original
2017-12-26 13:40:191973parcourir

Comment utiliser hidef au lieu de définir en PHP pour optimiser l'efficacité ? Cet article présente principalement l'utilisation de l'extension hidef au lieu de la définition en PHP pour améliorer les performances. Cet article se concentre sur le test des performances de hidef et fournit des exemples. J'espère que cela aide tout le monde.


Le site Web avait besoin d'ajouter une nouvelle constante, j'ai donc ouvert le fichier config.php local et pensé aux solutions hidef et apc testées il y a quelques années pour améliorer les performances de définition .

Mon programme a différentes configurations pour les serveurs de développement, de test et de production. En termes de constantes, j'utilise un tableau pour définir toutes les constantes qui doivent être définies, puis je vérifie s'il existe une fonction apc_load_constants. Sinon, définissez le lot. Lorsque vous utilisez apc, chaque fois que vous ajoutez une constante, vous devez modifier $key pour prendre effet.


Maintenant que le php du serveur de test et de production a été mis à niveau vers 5.4, le cache d'opcode utilise Zend opcache et APC n'est plus installé. Étant donné que le cache utilisateur apc est utilisé, j'ai installé apcu en plus, et l'utilisation est exactement la même que celle d'apc, il n'est donc pas du tout nécessaire de modifier le programme. Cependant, apcu ne prend pas en charge apc_load_constants et apc_define_constants, la solution apc ne peut donc pas être utilisée. Je suis allé sur le site officiel et j'ai installé la dernière version de hidef 0.1.13, stable sortie le 12 juillet 2012, il y a plus d'un an.


J'ai écrit un programme simple pour tester le temps défini. Il faut environ 2,8 ms pour s'exécuter 1000 fois. Ainsi, pour un site Web de taille moyenne (par exemple, PHP s'exécute 10 millions de fois par jour), si 25 constantes sont définies par page, cela prendra environ 1 000 000*25/1 000*2,8=700 000 ms par jour, soit 700 secondes. L’utilisation de hidef peut économiser près de 700 secondes de temps d’exécution PHP par jour.

Jetons un coup d'œil aux performances de lecture. Le test lit une fois constante 1w, et les valeurs sont toutes 1, qui sont respectivement de 37 ms et 0,7 ms. Donc, s'il est utilisé 10 millions de fois par jour et qu'une moyenne de 20 constantes sont utilisées par page, cela prendra 740 secondes, tandis que l'utilisation de hidef dure 14 secondes, enfin, encore plus de 700 secondes.

Économiser 1 400 secondes de temps d'exécution PHP par jour peut être insignifiant, mais c'est toujours une bonne chose et cela vaut la peine d'essayer. Après tout, les chances de modifier les paramètres sont très faibles.

Lorsque les paramètres définis doivent être modifiés, modifiez simplement le fichier de configuration puis rechargez php-fpm.

Ci-joint l'exemple de code du programme pour les constantes de configuration d'origine :

if (function_exists('apc_load_constants')) {
            function define_array($key, $arr, $case_sensitive = false) {
                if (!apc_load_constants($key, $case_sensitive)) {
                    apc_define_constants($key, $arr, $case_sensitive);
                }
            }
        } else {
            function define_array($key, $arr, $case_sensitive = false) {
                foreach ($arr as $name => $value) {
                    define($name, $value, $case_sensitive);
                }
            }
        }
        $constants = array(
            'HX'   => 1,
            'BLOG_URL'   => 'http://www.jb51.net/',
            'WWW_URL'   => 'http://www.jb51.net/',
        );
        define_array('hx_defined',$constants);



Ci-joint le code pour tester la vitesse définie.

<?php
$t1 = microtime(1);
    $constants = array(
        &#39;hx1&#39;       => 1,
        &#39;hx2&#39;       => &#39;2&#39;,
        &#39;hx3&#39;       => &#39;3&#39;,
        &#39;hx4&#39;       => &#39;4&#39;,
        &#39;hx5&#39;       => &#39;5&#39;,
        &#39;hx6&#39;       => &#39;6&#39;,
        &#39;hx7&#39;       => &#39;7&#39;,
        &#39;hx8&#39;       => &#39;8&#39;,
        &#39;hx9&#39;       => &#39;9&#39;,
        &#39;hx10&#39;       => &#39;10&#39;,
    );
    function define_array($key, $arr) {
        foreach ($arr as $name => $value) {
            define($name.$i, $value);
        }
    }
    
    for($i=0;$i<100;$i++) {
        define_array($i,$constants);
    }
    
    
$t2 = microtime(1);
echo ($t2-$t1)*1000;
//读性能
$t1 = microtime(1);
for($i=0;$i<10000;$i++) {
    $t = hx1;
}    
$t2 = microtime(1);
echo &#39; &#39;.($t2-$t1)*1000;
$t1 = microtime(1);
for($i=0;$i<10000;$i++) {
    $t = HX;
}    
$t2 = microtime(1);
echo &#39; &#39;.($t2-$t1)*1000;

Recommandations associées :

Problèmes de définition de constante PHP

Un résumé des concepts des constantes PHP

Introduction détaillée à l'utilisation des constantes et variables PHP

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