Test ne faisant pas autorité sur les performances des frameworks PHP grand public
En tant que développeur PHP et développeur technique dans une équipe de start-up, choisir un framework de développement est une chose très difficile.
Si vous utilisez ThinkPHP
, vous pouvez commencer par recruter un développeur tout juste diplômé d'un établissement de formation, mais découpler performance du code postal est un casse-tête. Cependant, de nombreuses fonctions tierces n’ont pas besoin d’être écrites par vous-même, car de nombreux experts ont déjà ouvert la voie.
Si vous utilisez Laravel
, Legend est très confortable à écrire et a une évolutivité suffisante, mais le coût d'apprentissage est un peu élevé. Vous ne pouvez pas donner aux développeurs juniors un demi-mois pour apprendre le framework. Et on dit que les gens de l'industrie ont révélé que Laravel
les performances ne sont pas très bonnes et la documentation n'est pas particulièrement riche.
Si vous utilisez Yii
, la syntaxe est un peu lourde, et la séparation du code front-end et back-end est un peu gênante, mais les performances sont très bonnes, et elle est déjà utilisée par de nombreuses grandes entreprises nationales. Si quelque chose d'inattendu se produit, vous pouvez rapidement trouver le maître. Répondez aux questions.
Il est préférable de faire une simple évaluation des performances. Vous ne pouvez pas vous tromper en en choisissant une avec d'excellentes performances
Test de performance
Durée du test : 06 mai 2016
Outil de test :
siege
(Parce queab
du système MAC a toujours une erreurpr_socket_recv: Connection reset by peer (54)
, j'ai donc choisisiege
)Machine de test : processeur MacPro Core i5/mémoire 8 Go/mémoire flash SSD 256 Go
Environnement de test : Apache PHP5.6
-
Version framework :
ThinkPHP 3.2.3
Laravel 5.2
Yii2.0.5
Principe de test : Chaque test boucle 5 fois, en prenant des données moyennes
Supplémentaire Remarque : Tous les projets sont placés dans des sous-répertoires
Description du résultat
Transactions: 2119 hits 处理请求总数量 Availability: 96.85 % 可用性 Elapsed time: 9.74 secs 运行时间 Data transferred: 1.31 MB 数据传输量 Response time: 0.60 secs 响应时间 Transaction rate: 217.56 trans/sec 每秒处理效率 Throughput: 0.13 MB/sec 每秒处理数据 Concurrency: 130.28 并发 Successful transactions: 2162 成功的请求 Failed transactions: 69 失败的请求 Longest transaction: 2.85 最长的单个请求 Shortest transaction: 0.01 最短的单个请求
Commencer les tests
Ajouter un contrôleur et ajouter un contrôleur dans le contrôleur Entrez HelloWorld 10 000 fois
50 boucles simultanées 10 fois :
La première chose qui nous est venue à l'esprit était ThinkPHP, qui avait l'air bien
Transactions: 500 hits Availability: 100.00 % Elapsed time: 2.81 secs Data transferred: 52.45 MB Response time: 0.26 secs Transaction rate: 177.94 trans/sec Throughput: 18.67 MB/sec Concurrency: 47.10 Successful transactions: 500 Failed transactions: 0 Longest transaction: 0.48 Shortest transaction: 0.03
Puis ce fut Laravle, hein, légèrement déçu
Transactions: 500 hits Availability: 100.00 % Elapsed time: 13.33 secs Data transferred: 52.45 MB Response time: 1.27 secs Transaction rate: 37.51 trans/sec Throughput: 3.93 MB/sec Concurrency: 47.55 Successful transactions: 500 Failed transactions: 0 Longest transaction: 3.64 Shortest transaction: 0.07
Au final, Yii
Transactions: 500 hits Availability: 100.00 % Elapsed time: 4.84 secs Data transferred: 52.45 MB Response time: 0.46 secs Transaction rate: 103.31 trans/sec Throughput: 10.84 MB/sec Concurrency: 47.65 Successful transactions: 500 Failed transactions: 0 Longest transaction: 0.88 Shortest transaction: 0.04
, qui était relativement prometteur avant le jeu, a été répété 10 fois avec 200 simultanéités :
Le premier était ThinkPHP
Transactions: 1977 hits Availability: 98.85 % Elapsed time: 10.03 secs Data transferred: 207.40 MB Response time: 0.95 secs Transaction rate: 197.11 trans/sec Throughput: 20.68 MB/sec Concurrency: 187.68 Successful transactions: 1977 Failed transactions: 23 Longest transaction: 1.22 Shortest transaction: 0.02
Puis Laravel
Transactions: 1890 hits Availability: 94.50 % Elapsed time: 51.85 secs Data transferred: 198.27 MB Response time: 4.88 secs Transaction rate: 36.45 trans/sec Throughput: 3.82 MB/sec Concurrency: 178.00 Successful transactions: 1890 Failed transactions: 110 Longest transaction: 26.01 Shortest transaction: 0.07
Enfin, Yii
Transactions: 1996 hits Availability: 99.80 % Elapsed time: 18.95 secs Data transferred: 209.39 MB Response time: 1.79 secs Transaction rate: 105.33 trans/sec Throughput: 11.05 MB/sec Concurrency: 188.57 Successful transactions: 1996 Failed transactions: 4 Longest transaction: 3.29 Shortest transaction: 0.10
De façon inattendue, sans optimisation, ThinkPHP était le plus rapide, Yii était légèrement plus rapide et Laravel a terminé le test en hésitant. Les résultats sont quelque peu inattendus, mais le test ci-dessus ne représente que l'environnement de développement. Le framework sera optimisé ci-dessous pour simuler l'environnement en ligne.
Cadre d'optimisation
ThinkPHP :
APP_DEBUG改为false
Laravel :
APP_DEBUG改为false php artisan route:cache php artisan optimize php artisan config:cache composer dumpautoload -o
Yii :
YII_DEBUG改为false composer dumpautoload -o
Concurrence 200 boucles 10 fois :
ThinkPHP
Transactions: 1655 hits Availability: 82.75 % Elapsed time: 8.21 secs Data transferred: 173.62 MB Response time: 0.69 secs Transaction rate: 201.58 trans/sec Throughput: 21.15 MB/sec Concurrency: 139.29 Successful transactions: 1655 Failed transactions: 345 Longest transaction: 7.83 Shortest transaction: 0.00
Laravel :
Transactions: 1520 hits Availability: 76.00 % Elapsed time: 34.95 secs Data transferred: 159.45 MB Response time: 3.15 secs Transaction rate: 43.49 trans/sec Throughput: 4.56 MB/sec Concurrency: 136.84 Successful transactions: 1520 Failed transactions: 480 Longest transaction: 19.18 Shortest transaction: 0.00
Yii:
Transactions: 1704 hits Availability: 85.20 % Elapsed time: 15.16 secs Data transferred: 178.76 MB Response time: 1.46 secs Transaction rate: 112.40 trans/sec Throughput: 11.79 MB/sec Concurrency: 164.21 Successful transactions: 1704 Failed transactions: 296 Longest transaction: 9.04 Shortest transaction: 0.00
Ce qui est étrange, c'est que lorsque le framework désactive le mode débogage, il y a plus d'échecs. Cependant, il est évident qu'après une simple optimisation, les performances de Laravel ont été grandement améliorées, mais elles restent inférieures à celles des deux autres frameworks.
Conclusion
Pendant le test, je me suis senti déprimé et j'ai senti que ma vision du monde s'était effondrée, au point de s'effondrer.
Les performances de ThinkPHP sont deux fois plus élevées que celles de Yii et près de quatre fois supérieures à celles de Laravel
Les performances de Yii sont médiocres, mais en le test Zhonghui a clairement révélé qu'il y avait moins d'échecs de requêtes que les deux autres frameworks
Laravel est toujours élégant, mais ses performances sont inquiétantes. Il vaut mieux utiliser les mots des internautes pour décrire. it
学之者生用之者死
Enfin
Mon projet a été développé à l'aide d'un framework auto-construit. Grâce à la puissance de composer, le processus de développement s'est très bien déroulé. J'ai attaché mon propre framework pour exécuter 200 cycles de concurrence 10 fois. Les données sont open source, mais la mise à jour est assez chargée. Vous pouvez rechercher PPPHP sur github et créer le framework avec moi.
Transactions: 1672 hits Availability: 83.60 % Elapsed time: 6.18 secs Data transferred: 175.40 MB Response time: 0.57 secs Transaction rate: 270.55 trans/sec Throughput: 28.38 MB/sec Concurrency: 153.16 Successful transactions: 1672 Failed transactions: 328 Longest transaction: 4.57 Shortest transaction: 0.01