Maison  >  Article  >  développement back-end  >  Tests de performances de l'archive PHP phar

Tests de performances de l'archive PHP phar

不言
不言original
2018-05-31 14:30:351919parcourir

Cet article présente principalement le test de performances de l'archive PHP phar, qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

PHP a ajouté l'archive PHAR depuis la version 5.3. Le concept des archives Phar vient de l'archive JAR de la technologie Java™, qui permet de regrouper les applications dans un seul fichier contenant tout le nécessaire pour exécuter l'application. Ce fichier diffère d'un fichier exécutable unique, généralement généré par un langage de programmation tel que C, dans le sens où il s'agit en réalité d'un fichier d'archive plutôt que d'une application compilée. Ainsi, le fichier JAR contient en réalité les fichiers qui composent l'application, mais ces fichiers ne sont pas soigneusement différenciés pour des raisons de sécurité. L'extension Phar est basée sur un concept similaire, mais est conçue principalement pour l'environnement Web PHP. De plus, contrairement aux archives JAR, les archives Phar peuvent être traitées par PHP lui-même, donc aucun outil supplémentaire n'est requis pour les créer ou les utiliser. Les extensions Phar ne sont pas un concept nouveau pour PHP. Il a été initialement écrit en PHP et nommé PHP_Archive avant d'être ajouté à la bibliothèque PEAR en 2005. En pratique, cependant, les solutions purement PHP à ce problème étaient très lentes, c'est pourquoi en 2007, elle a été réécrite en tant qu'extension purement en langage C et la prise en charge de la traversée des archives Phar à l'aide des objets ArrayAccess de SPL a été ajoutée. Depuis lors, les gens ont fait beaucoup de travail pour améliorer les performances de l'archivage Phar. Actuellement, l'utilisation de Phar est très limitée et il existe très peu de tests de performances sur Phar. une expérience simple.
Environnement de test :
PHP : 5.5.10
CPU : Intel Core i7 à 2 GHz
Mem : 8 Go
Système : Darwin 13.1.0
Principaux points de test :
1 : Vitesse de chargement de Phar
1.1 : Quel est l'impact de la taille du fichier ?
1.2 : Impact de l’inclusion/exigence ?
1.3 : Quel est l'impact du contenu du stub Phar ?
2 : Vitesse d'exécution du code Phar
2.1 Comparaison des fonctions globales
2.2 Objets de classe
2.3 Méthodes de classe
Afin de garantir que le test est le plus précis possible, chaque méthode est exécutée 3 fois, et la moyenne des 3 fois est la valeur. Dans le même temps, à des fins de comparaison, nous utiliserons directement du code pour obtenir des données de référence. Le fichier
Phar contient principalement le fichier

phar-builder.php est utilisé pour générer le fichier phar. Avant d'exécuter la commande de test, exécutez ce fichier pour générer le. fichier phar-test.phar.
test_load.php teste la vitesse de chargement des fichiers phar
Le fichier index.php contenu dans le répertoire src est un fichier stub, comprenant dates.php, for.php, function.php, la méthode de classe du fichier de test de dates, Méthodes d'objet de test for.php, méthodes de fonction de test Functions.php.
Code pièce jointe spécifique.
Premièrement : la vitesse de chargement de phar, en utilisant les méthodes include et require pour tester et a constaté qu'il n'y a pas beaucoup de différence, seule la méthode require est utilisée.

$stime = microtime(true);
require './phar-test.phar';
$etime = microtime(true);
$total = $etime - $stime;
echo "phar total:".$total."s";

Après exécution, l'efficacité est la suivante

localhost:phar ugg$ php test_phar_load.php 
phar total:0.0044760704040527s
localhost:phar ugg$ php test_phar_load.php 
phar total:0.0051448345184326s
localhost:phar ugg$ php test_phar_load.php 
phar total:0.0043849945068359s
localhost:phar ugg$ vim test_phar_load.php

Le chargement moyen est de 4,7 millisecondes

Comparaison directe Méthode de citation du code source.

$stime = microtime(true);
require './src/index.php';
$etime = microtime(true);
$total = $etime - $stime;
echo "src total:".$total."s\n";

Après exécution, l'efficacité est la suivante

localhost:phar ugg$ php test_src_load.phpsrc 
total:0.0026230812072754s
localhost:phar ugg$ php test_src_load.phpsrc 
total:0.0026969909667969s
localhost:phar ugg$ php test_src_load.phpsrc 
total:0.0025439262390137s

Le chargement moyen est de 2,6 millisecondes
Conclusion : Grâce à la comparaison de Vitesse de chargement, la méthode de chargement phar est meilleure que la méthode de chargement direct de fichier est beaucoup plus lente, presque deux fois plus longue que le référencement direct du fichier. En même temps, j'ai chargé des fichiers d'interférence dans le fichier phar pour agrandir le fichier phar. J'ai constaté qu'en 10 Ko, le temps de chargement ne changeait pas beaucoup. Bien sûr, je n'ai pas placé les fichiers nouvellement ajoutés dans le stub. Le but est que pour les répertoires dépassant 10 Ko, la méthode d'organisation des fichiers est telle que le chargement automatique, et tous les fichiers ne sont pas inclus dans un seul fichier. Le temps de chargement de phar est environ 1,8 fois supérieur à celui du chargement direct src.

Deuxième : Test de vitesse d'exécution
Méthode phar, le code est le suivant

    $stime = microtime(true);
    //require 'phar://phar-test.phar';
    require 'phar-test.phar';
    $sstime = microtime(true);
    for($i = 0; $i<10000; ++$i){
        $date = dates::next_week();
        $for = new fortest();
        $i = $for->for1to10000();
        $number = number2Chinese(&#39;12345&#39;);
    }   
    $eetime = microtime(true);
    $etime = microtime(true);
    $total = $etime - $stime;
    $total2 = $eetime - $sstime;
    echo "phar load total:".$total."s\n";
    echo "phar execution 10000 total:".$total2."s";

L'efficacité d'exécution est la suivante

localhost:phar ugg$ php test_phar_functions.php 
phar load total:0.0047600269317627s
phar execution 10000 total:0.00017499923706055s
localhost:phar ugg$ php test_phar_functions.php 
phar load total:0.004863977432251s
phar execution 10000 total:0.00017404556274414s
localhost:phar ugg$ php test_phar_functions.php 
phar load total:0.004680871963501s
phar execution 10000 total:0.00016689300537109s

Le temps total consommé pour l'exécution des méthodes de classe, des instances d'objet, des méthodes d'objet et des méthodes de fonction 10 000 fois est de 0,17 millisecondes.
Efficacité d'exécution de src

localhost:phar ugg$ php test_src_functions.php 
phar load total:0.0029089450836182s
phar execution 10000 total:0.00019693374633789s
localhost:phar ugg$ php test_src_functions.php 
phar load total:0.0028579235076904s
phar execution 10000 total:0.0002140998840332s
localhost:phar ugg$ php test_src_functions.php 
phar load total:0.0029168128967285s
phar execution 10000 total:0.00019478797912598s

Exécutez des méthodes de classe, des instances d'objet, des méthodes d'objet et des méthodes de fonction 10 000 fois, avec une consommation de temps totale de 0,20 millisecondes.
Résumé : Grâce à la comparaison de la vitesse d'exécution, il s'avère que la vitesse d'exécution de la méthode phar est plus rapide que la méthode d'inclusion de fichier direct (0,20-0,17)/0,20*100=15 %. de la méthode phar est plus rapide. La raison n'a pas été trouvée. Il existe des informations sur Internet. La vitesse d'exécution de phar est très rapide lorsque apc+include_path est défini. https://github.com/ralphschindler/test-phar-performance-apc/.
Résumé : méthode phar d'archivage PHP, la vitesse de chargement est plus lente que la méthode d'inclusion de fichier normale, mais la vitesse d'exécution est supérieure à la méthode d'inclusion de fichier si vous coopérez avec le paramètre include_path et la méthode APC ou OP pour optimiser le chargement. vitesse de l'archive phar, elle peut être améliorée. La prochaine étape consistera à faire quelques tentatives, 1 : Construire un gros fichier phar et expérimenter la vitesse de chargement et la vitesse d'exécution. 2 : Comprendre le principe de chargement de phar et le principe d'exécution, 3 : Gestion du concept de package et dépendances.

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