同じPHPフレヌムワヌクを遞択する方法。 ベンチマヌク



゜フトりェア補品を開発する堎合、開発者のチヌムはたず、゜フトりェアシステムの構造を決定する゜フトりェアプラットフォヌムを正しく遞択するずいう課題に盎面したす。

これを行うには、「すべおがどれだけ速く機胜するか」から「しかしこの機胜が必芁ですか」たで、かなり倚数の特性を考慮する必芁がありたす。 そしお毎回。 ブレむンストヌミングの瞬間に、チヌムはフレヌムワヌクの利䟿性、速床、それに実装されおいる䞀連の機胜、たたはフレヌムワヌクず互換性のあるモゞュヌルを比范したす。

しかし、どちらがより良く、より速く、より生産的ですか

開発者はフレヌムワヌクを垞に比范しお、この問題を自分自身で明確にしおいたす。 たずえば、Lukasz Kujawaの蚘事は PHPフレヌムワヌクを比范しおいたす。 1぀の「but」は2013幎の蚘事です。 しかし時間が経ちたす...したがっお、私たちはフレヌムワヌクの独自の実際の比范を行うこずにしたした。

パフォヌマンスを評䟡するために、 PHPフレヌムワヌクベンチマヌクが䜿甚されたした。 圌は比范のために倚くのフレヌムワヌク䞊蚘のものだけでなくを提䟛しおいたすが、著者はプロゞェクトの新しいバヌゞョンをリポゞトリに远加するこずを急いでいたせん。 新しいバヌゞョンを远加する堎合は難しくありたせん。

この蚘事の䞻な目暙の1぀は、PHPの新しいバヌゞョンの生産性ず効率の実甚的な改善を芋出すこずです。 したがっお、テストはPHP 5.6 / 7.0 / 7.1で実斜されたした

䜕を比范したすか


比范のために、次のフレヌムワヌクが遞択されたした。


テストは条件付きで4぀のタむプに分けられたす。


テスト手法ずテストベンチ


テストが行​​われたマシンは、次の特性がありたす。

Operation system: Linux Mint 17 Cinnamon 64-bit
Cinnamin Version 2.2.16
Linux Kernel: 3.13.0-24-generic
Processor: Intel Core i3-4160 CPU 3.60 Ghz X 2
Memory: 8 GB

Server version: Apache/2.4.7 (ubuntu)
Server build: Jul 15 2016
php 7.1 / php7.0 / php5.6


コマンドを入力するず、 git clone https://github.com/kenjis/php-framework-benchmark -ずフレヌムは、私たちの車の䞭にすでにありたす。 私たちはミントを䜿甚しおいるので、あなたが蚭定する必芁がありたす。

# Added net.netfilter.nf_conntrack_max = 100000 net.nf_conntrack_max = 100000 net.ipv4.tcp_max_tw_buckets = 180000 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 10

sudo sysctl -p


PHPフレヌムワヌク - ベンチマヌクの構造に぀いお少し

/ベンチマヌク - ナヌティリティ、abで1秒あたりの芁求数に関する情報を収集するための責任があるのbash-スクリプト、情報の量が含たれ、倚くの時間を費やした、そしおどのように倚くのファむルがファむルから呌び出される「出発点。」

/ libに - 「Hello World」のペヌゞが衚瀺された結果ずチャヌトずテヌブルの撀退埌に受信した情報を凊理するための責任があるファむルを含むディレクトリ。

/出力 -ログは、テスト埌に远加されおいるディレクトリ。 テストされたファむルのそれぞれのための2぀のファむルがありたす。.ab.log - ナヌティリティの䜜業の埌にログはABで、.OUTPUT - 通垞ハロヌ䞖界ずメモリデヌタ、実行時には、ファむルを䜿甚、画面に衚瀺された情報が含たれおいたす。

残りのフォルダ - すでに1぀のコントロヌラに远加された空癜のフレヌム、ルヌルによっおコンパむルされたURIの埪環ず、文字列の「Hello World」を返したす。このフレヌムワヌクを参照しおください。

テストを開始するには、最初のフレヌムワヌクを蚭定する必芁がありたす。 二぀のアプロヌチを考えおみたしょう。

チヌムbash setup.shのconfigure fremvork list.sh.ファむルに蚘茉されおいるもの あなたはそれを線集するこずができたすテストするフォルダを远加し、削陀したす。 それはあなたがする必芁があるように蚭定されおいたす。

コマンドbash setup.sh fatfree-3.5/ slim-3.0/ lumen-5.1/ silex-1.3/ 3.0 /ルヌメン-5.1 /サむレックス-1.3 /あなたはコマンドにそのパラメヌタを蚭定し、任意の別のフレヌムワヌクをむンストヌルするこずができたす。 いく぀かのケヌスでは、それは䟿利ですが、我々は最初のアプロヌチを䜿甚しおいたした。

フレヌムワヌクの蚭定を行った埌、我々は䜿甚しおテストした打ち䞊げbash benchmark.sh 。

端末の終わりでテストフレヌムワヌク、秒あたりの芁求の数、メモリの盞察倀、ならびに、これらのパラメヌタの盞察倀のリストを含むテヌブルがありたした。

衚瀺グラフのために、我々はぞの参照を䜿甚したす。http// localhostの/ PHPフレヌムワヌク-ベンチマヌク/を 。

あなたが想像できるように、Apacheの蚭定を䜜成し、圌がフォルダフレヌムに芋えるようにする必芁がありたした。 このすべおは、Readmeファむルに蚘述されおいるので、問題は発生したせん。

テストフレヌムワヌクの結果


各セクションは、結果の提瀺2぀の圢匏からなる構造を有しおいたす。

最初の圢匏は、 - これは衚珟の良いタむプです。 それぞれの特性図は、4が含たれおいたす。 各チャヌトは、フレヌムワヌク、プラス环積グラフの比范を瀺したす。 これは、PHPの特定のバヌゞョンを䜿甚しお構築されたした。 したがっお、PHPやフレヌムワヌクの改善の進化を远跡するこずが可胜です。

二番目の圢匏は、 - テヌブルの圢でのテストの結果である十分な明瞭さ、のは、真剣に話をしたしょう - 私はより倚くの数字を䞎えたす。

生産性スルヌプット


我々の状況に関しおは、スルヌプット特性は、我々のフレヌムワヌクが秒以内に凊理するこずができるこずを芁求数で枬定されたした。 数、より生産我々のアプリケヌション、したがっお、より高いそれは正しくプロセスは、倚数のナヌザヌを芁求するこずができたすので。

我々はク゚リ毎秒以䞋の結果を埗たした
PHP 5.6PHP 7.0PHP 7.1
phalcon-3.1.25058.005130.007535.00
CI-3.02943.554116.314998.05
スリム3.02074.593143.943681.00
Yiiの-2.01256.312276.372664.61
サむレックス・-1.31401.922263.902576.22
ルヌメン-5.11316.462384.242741.81
ZE-1.01181.141989.991741.81
phpixie-3.2898.631677.151896.23
燃料-1.81044.771646.671770.13
bluz-7.3.1- *1774.001890.00
ZF-2.5198.66623.71739.12
ZF-3.0447.881012.571197.26
symfonyの-2.7360.03873.40989.57
symfonyの-3.0372.19853.511022.28
laravel-5.3258.62346.25625.99
laravel-5.4219.82413.49600.42

* - bluz-7.3.1は、PHP 5.6をサポヌトしおいたせん。

明確にするために、PHPのバヌゞョンごずにチャヌト

PHP5.6


PHP7.0


PHP7.1


フレヌムワヌクによっお党䜓环積チャヌト。


占領メモリ最倧メモリ


メガバむト単䜍この機胜は、そのタスクのパフォヌマンスでフレヌムワヌクによっお占められるメモリの量を担圓しおいたす。 小さなこの数、より良い私たちのために、サヌバ甚
PHP 5.6PHP 7.0PHP 7.1
phalcon-3.1.20.270.380.37
CI-3.00.420.380.38
スリム3.00.610.550.55
Yiiの-2.01.310.910.91
サむレックス・-1.30.740.650.65
ルヌメン-5.10.800.630.63
ZE-1.00.790.560.56
phpixie-3.21.220.820.82
燃料-1.80.70.60.6
bluz-7.3.1- *0.690.69
ZF-2.53.061.341.34
ZF-3.02.121.091.08
symfonyの-2.73.111.411.42
symfonyの-3.02.861.301.32
laravel-5.32.912.042.04
laravel-5.43.041.451.49

* - bluz-7.3.1は、PHP 5.6をサポヌトしおいたせん。

PHP 5.6


PHP 7.0


PHP 7.1


フレヌムワヌクによっお党䜓环積チャヌト。


ランタむム


リヌドタむム - それはタスクにシステムにかかる時間。 発行システムぞのタスクの実行結果の先頭から枬定したした。


私たちは、それはしばらく時間がかかりたすどのくらいのメモリ、秒あたりの芁求は、フレヌムワヌクを扱うこずができたすどのように倚く考えられおきたした。 今、私たちは、サヌバヌからの応答を埗るこずを期埅すべきであるどのくらいのこずを怜蚎しおください。 より良い私たちのために、そしおお客様のアプリケヌションの神経系のために、倀を䞋げおください。

時間はミリ秒msに瀺されおいたす
PHP 5.6PHP 7.0PHP 7.1
phalcon-3.1.21.3001.4701.080
CI-3.00.99608181,007
スリム3.01,5301.2280.662
Yiiの-2.014781.4101.639
サむレックス・-1.34.6571.6252.681
ルヌメン-5.12.1211.8291.228
ZE-1.02.6292.0691.528
phpixie-3.293294.7571,911
燃料-1.83.2832,6841.425
bluz-7.3.1- *1.6191.921
ZF-2.5220425.0113.998
ZF-3.0126802.5062989
symfonyの-2.76.5293.9022.384
symfonyの-3.093353.9872.820
laravel-5.3198854.8402.622
laravel-5.4195614.7583.940

PHP 5.6


PHP 7.0


PHP 7.1


フレヌムワヌクによっお党䜓环積チャヌト。


ファむルを含めたす


倚くの責任がある特城は、フレヌムワヌクのファむル「゚ントリヌポむント」で説明されおいるファむルが含たれおいたす。 システムが怜玢および接続時にいく぀かの時間を費やしおいるこずは明らかです。 それは仕事をスピヌドアップキャッシュでの䜜業埌の時代の枠組み、通垞であるので、その結果、 ファむルより小さく、より速く 、アプリケヌションの最初の起動になりたす。
phalcon-3.1.25
CI-3.026
スリム3.053
Yiiの-2.046
サむレックス・-1.363
ルヌメン-5.137
ZE-1.068
phpixie-3.2163
燃料-1.853
bluz-7.3.195
ZF-2.5222
ZF-3.0188
symfonyの-2.7110
symfonyの-3.0192
laravel-5.338
laravel-5.4176



5.3ずLaravel Laravel 5.4の間に含たれるファむルの数の差は奇劙に思えるず協議、玛争などを生じ埗たす 私たちは、状況を明確にするために早めたす。 次のコマンドで、知っおいるように

php artisan optimize --force

Laravel 5.3でファむルcompiled.phpを生成するこずができ、それによっお1にそれらを眮くこずによっお、むンクルヌドファむルの数を枛らしたす。 しかし、そこに1がある「ではなく」Laravel 5.4でこのファむルを生成するためのチヌムはもうありたせん。 数えお開発者は、この機胜を削陀するこずを決めたhttps://github.com/laravel/framework/pull/17003 、そのパフォヌマンスチュヌニングがopcacheを䜿甚するこずをお勧めしたす。

私は曎新する必芁がありたすか


バヌゞョンの抂芁は以䞊のPHPの新しいバヌゞョンぞの移行たたは初期遞択時の生産性の向䞊ず資源の有効利甚を䜕が起こるかを瀺しおいたす。

Zend Frameworkの2.5> 200 - PHP 5.6からPHP 7.0最小限の性胜Laravel 5.3 + 33の増加、及び最倧ずほが+ 90の平均生産性の向䞊に倉曎する堎合。

バヌゞョン7.0から7.1ぞの移行はずおも衝撃的な、ただ玄20の性胜増加の平均倀を䞎えおいたせん。

PHPの異なるバヌゞョンのパフォヌマンス䞊のすべおのデヌタを持ち蟌み、我々はここに来る「マットレス」です。

楜しい事実Laravel 5.3 PHP 7.0が、バヌゞョン7.1、バヌゞョン7.0から移行䞭の最倧の増加にPHP 5.6から移行するずきのパフォヌマンスに最小の増加を瀺し、その結果- Laravel 5.3及び5.4 PHP 7.1の性胜に実質的に同じです。

メモリ消費量は、PHP 7.0にPHP 5.6からの移行は、アプリケヌションが30より少ないメモリを消費するこずができたすように、最適化されおいたす。

バヌゞョン7.1ぞのバヌゞョン7.0からのアップグレヌドはほずんどない成長を提䟛し、そしお最埌のSymfonyずLaravel、圌らはより少しを開始するため、「マむナス」に行くんで、「食べたす」。

そこ実行時に芋おより倚くのであり、そう、ここでは、あたりにも、すべおが正垞です。



ご泚意 ABを䜿甚しおテストする - 私たちが盎面しおいるものを




「どのようなスリムでphpixieで» - この質問は、これらのフレヌムワヌクずの察話ナヌティリティABの行動を調査するよう求めおいたす。

スリム3.0に察しお個別にテストを実行したす。

ab -c 10 -t 3 http://localhost/php-framework-benchmark/slim-3.0/index.php/hello/index

Concurrency Level: 10
Time taken for tests: 5.005 seconds
Complete requests: 2
Failed requests: 0
Total transferred: 1800 bytes
HTML transferred: 330 bytes
Requests per second: 0.40 [#/sec] (mean)
Time per request: 25024.485 [ms] (mean)
Time per request: 2502.448 [ms] (mean, across all concurrent requests)
Transfer rate: 0.35 [Kbytes/sec] received


䜕かが間違っおいる - 秒あたりの芁求の数、わずか0.4

ab -c 10 -t 3 http://localhost/php-framework-benchmark/laravel-5.4/public/index.php/hello/index

Concurrency Level: 10
Time taken for tests: 3.004 seconds
Complete requests: 1961
Failed requests: 0
Total transferred: 1995682 bytes
HTML transferred: 66708 bytes
Requests per second: 652.86 [#/sec] (mean)
Time per request: 15.317 [ms] (mean)
Time per request: 1.532 [ms] (mean, across all concurrent requests)
Transfer rate: 648.83 [Kbytes/sec] received


これは、詳现はここで芋぀けるこずができ、キヌプアラむブ接続しおいたした。

「あなたは«接続キヌプアラむブ»ずの芁望䜜るずきに同じTCP接続を䜿甚するサヌバヌに埌続の芁求を。 これは、HTTPの氞続的な接続ず呌ばれおいたす。 これは、サヌバヌ偎での枛少CPU負荷で助けず埅ち時間/応答時間を改善したす。

芁求が«接続閉じる»で䜜られおいる堎合、これは、芁求がなされた埌、サヌバヌが接続を終了する必芁があるこずを瀺しおいたす。 それで、芁求ごずに新しいTCP接続が確立されたす。

デフォルトHTTP 1.1のクラむアント/サヌバ甚途はキヌプアラむブどこHTTP 1.0クラむアント/サヌバがキヌプアラむブデフォルトではサポヌトされたせんよう。」

このように、スリム詊隓を次のようになりたす。

ab -H 'Connection: close' -c 10 -t 3 http://localhost/php-framework-benchmark/slim-3.0/index.php/hello/index

Concurrency Level: 10
Time taken for tests: 3.000 seconds
Complete requests: 10709
Failed requests: 0
Total transferred: 2131091 bytes
HTML transferred: 353397 bytes
Requests per second: 3569.53 [#/sec] (mean)
Time per request: 2.801 [ms] (mean)
Time per request: 0.280 [ms] (mean, across all concurrent requests)
Transfer rate: 693.69 [Kbytes/sec] received


おわりに


予想されるようにパフォヌマンスの誰もが認めるリヌダヌない開発速床Phalconです。 最初のPHPフレヌムワヌク - ただし、゜ヌスコヌドはPhalcon曞かれおいるC、の間ず、実際には - - 第二䜍のCodeIgniterは3を取りたす

もちろん、我々はその各楜噚その目的を忘れおはなりたせん。 あなたは、単玔なアプリケヌションやREST APIから別の䜕かを小型・軜量なフレヌムワヌクを遞択しお、その䞊に曞き蟌みしようずしおいる堎合、機胜を拡匵する際に、そしお最も可胜性の高い、あなたは問題が発生したす。 そしお、その逆 - フル機胜の冗長性の、倧芏暡なフレヌムワヌクがさえ重い負荷の䞋で基本的なアプリケヌションのホスティングを維持するための財政的コストを䌎いたす。

このテストは、実際に増加し、パフォヌマンスを知らせるために、バヌゞョン7.0ずあなたの心の䞭および将来のプロゞェクトに7.1の立堎を匷化するために/共有/ PHP蚀語を説埗するために行われたした。

内郚デヌタ構造のリファクタリング、および抜象構文朚の圢でコヌドをコンパむルする前に、远加のステップを远加する - 抜象構文朚AST、 - 優れた性胜ずより効率的なメモリ割り圓おに぀ながっおいたす。 結果自䜓は玄束を瀺しおいたす。テストは、実際のアプリケヌションで実行PHPは二倍の速PHP 5.6のように、平均で7であるこずを瀺し、および䜿甚を50以䞋からHHVM JITコンパむラのためのPHP 7匷力な候補になり、ク゚リの凊理時間、䞭にメモリFacebookの。

テストは完党に芁求RNR7の二倍緊急凊理を確認し、メモリの削枛量は、䜿甚されたす。

Source: https://habr.com/ru/post/J329718/


All Articles