Laravelは本当にこれほど遅いですか?


82

Laravelを使い始めたばかりです。まだコードをほとんど書いていませんが、ページの読み込みに1秒近くかかります。

Laravelのタイミング

フレームワークのないアプリとNodeJSアプリに約2ミリ秒かかると、これは少し衝撃的です。Laravelは何をしているのですか?これは正常な動作ではありませんか?微調整が必​​要ですか?


6
実行してみてくださいphp artisan optimize --force
Joseph Silber 2014

13
公平を期すために、表示されているロード時間はデバッグモードです。使用しているデバッグバーは、アプリケーションの速度を大幅に低下させます。
kajetons 2014

4
あなたの環境はどのように見えますか?VMでローカルに開発する場合と比較して、VPSでは速度が速くなります。
kreeves 2014

2
@Artsemisすべてをインストールしました。速度は2倍以上遅く、数回更新するとクラッシュします。
mpen 2014

9
ええ、Vagrantを使って速く何かを望んでいません。Symfonyページは通常Vagrantにロードするのに1〜2秒かかりますが、本番環境では50ミリ秒かかります。
Matthieu Napoli 2014年

回答:


98

Laravelはありません、実際にそれが遅いです。500-1000msはばかげています。デバッグモードで20msまで下げました。

問題はVagrant / VirtualBox +共有フォルダーでした。彼らがそのようなパフォーマンスの打撃を受けたことに気づかなかった。Laravelには非常に多くの依存関係があり(最大280ファイルをロード)、それらのファイルの読み取りはそれぞれ遅いため、合計が非常に速くなると思います。

kreevesは私を正しい方向に向けました。このブログ投稿では、共有フォルダーを使用する代わりにファイルをVMにrsyncできるVagrant1.5の新機能について説明しています。

Windowsにはネイティブのrsyncクライアントがないため、cygwinを使用する必要があります。それをインストールし、Net / rsyncを必ずチェックしてください。C:\cygwin64\binパスに追加します。[または、Win10 / Bashにインストールできます]

Vagrantは新機能を導入します。私はPuphetを使用しているので、Vagrantfileは少しおかしいように見えます。私はそれをこのように見えるように微調整しなければなりませんでした:

  data['vm']['synced_folder'].each do |i, folder|
    if folder['source'] != '' && folder['target'] != '' && folder['id'] != ''
      config.vm.synced_folder "#{folder['source']}", "#{folder['target']}", 
        id: "#{folder['id']}", 
        type: "rsync",
        rsync__auto: "true",
        rsync__exclude: ".hg/"
    end
  end

すべての設定が完了したら、を試してくださいvagrant up。すべてがスムーズに進むと、マシンが起動し、すべてのファイルがコピーされます。vagrant rsync-autoファイルを最新の状態に保つには、ターミナルで実行する必要があります。レイテンシーは少しかかりますが、ページの読み込みが30倍速くなるので、それだけの価値があります。


PhpStormを使用している場合、自動アップロード機能はrsyncよりも優れています。PhpStormは、ファイルウォッチャーをつまずかせる可能性のある多くの一時ファイルを作成しますが、アップロード自体を処理させると、うまく機能します。


もう1つのオプションは、lsyncdを使用することです。私はこれをUbuntuホスト-> FreeBSDゲストで使用して大成功を収めました。私はまだWindowsホストでそれを試していません。


(rsyncを使用する以外に)パフォーマンスを向上させるために何をしましたか?
jpcamara 2014

2
@jpcamara何もありません。Rsyncだけで約20msになりました。HHVMで実行artisan optimizeし、デバッグをオフにして、わずかにブーストするために実行できます。残りは主にあなたがあなたのアプリをデザインする方法だと思います。インストールbarryvdh/laravel-debugbarして、速度が遅いかどうかを確認します。
mpen 2014

2
20msで280ファイルをロードするにはどうすればよいですか?ここで使用されるある種のコンパイル/ OPcache?SSDストレージを想定しています。
Manuel Arwed Schmidt 2015

1
Taylor Otwellによると、Laravel 5.2はさらに25%高速になります:twitter.com/taylorotwell/status/674327734252892161
Koga

1
デフォルトのファイル共有の代わりにNFSファイル共有を使用します。すべてを10倍高速化します... Vagrantファイルを変更してファイルシステムをNFSとして強制的にマウントします:config.vm.synced_folder "。"、 "/ vagrant"、タイプ: "nfs"、nfs:true、nfs_udp:false、nfs_version:3
Didzis 2017

25

あなたの問題を解決するために、Laravelの生産を最適化することについて話しているこのブログを見つけました。アプリを高速化するために必要なことのほとんどは、コードの効率、ネットワーク容量、CDN、キャッシュ、データベースの管理下にあります。

今、私は問題について話します:

Laravelは箱から出してすぐに遅いです。それを最適化する方法があります。コードでキャッシュを使用して、サーバーマシンを改善するオプションもあります。yaddayaddayadda。しかし、結局、Laravelはまだ遅いです。

Laravelは多くのsymfonyライブラリを使用しており、techempowerのベンチマークでわかるように、symfonyのランクは非常に低くなっています(控えめに言っても)。Laravelベンチマークがほぼ最下部にあることさえわかります。

多くの自動読み込みがバックグラウンドで行われているため、不要なものも読み込まれます。技術的には、laravelは使いやすいため、アプリをすばやく構築するのに役立ち、速度も遅くなります。

しかし、私はLaravelが悪いと言っているのではありません、それは素晴らしいです、多くのことで素晴らしいです。ただし、トラフィックの急増が予想される場合は、要求を処理するためだけに、さらに多くのハードウェアが必要になります。それはあなたにもっと多くの費用がかかるでしょう。しかし、あなたが不潔な金持ちなら、Laravelで何でも達成できます。:D

通常のトレードオフ:

 Easy = Slow, Hard = Fast

CまたはJavaは、学習曲線と保守性が難しいと思いますが、Webフレームワークでは非常に上位にランクされています。

あまり関係はありませんが。私はただのポイントを証明しようとしていますeasy = slow

Rubyは、保守性と習得のしやすさで非常に高い評価を得ていますが、ここに示すように、PythonとPHPの中で最も遅いと考えられています

ここに画像の説明を入力してください


91
それらのグラフィックは質問と何の関係がありますか?
NullPoiиteя

4
PHP7はPHP5よりもはるかに高速です
Cobolt 2018年

1
何点?簡単=遅い特定の言語に対する根拠のない誤解をさらに広める
Chris

インフォグラフィックで1つのエラーは、Javaが1991年に1995年とpythonで発明されたので、Pyhonは、Javaによって影響を受けることができないということである
Haritsinh Gohil

@HaritsinhGohil Python 3は2008年にリリースされました。
majidarif19年

17

はい-Laravelは本当に遅いです。このためにPOCアプリを作成しました。ログインフォーム付きのシンプルなルーター。20ドルのデジタルオーシャンサーバー(数GBのRAM)で10の同時接続で60RPSしか取得できませんでした。

セットアップ:

2gb RAM
Php7.0
apache2.4
mysql 5.7
memcached server (for laravel session)

最適化、コンポーザーダンプの自動ロードなどを実行しましたが、実際にはRPSが43程度低下しました

問題は、アプリが200〜400ミリ秒で応答することです。LaravelがオンになっているローカルマシンからABテストを実行しました(つまり、Webトラフィック経由ではありません)。そして私は112RPSしか得られませんでした。平均300msで200ms速い応答時間で。

比較すると、AWS t2.medium(x3、負荷分散)で1日に数百万のリクエストを実行する本番PHPネイティブアプリをテストしました。ELBを介してローカルマシンからWeb経由で25の同時接続をABしたとき、約1200RPSが得られました。負荷のあるマシンとlaravelの「ログイン」ページの大きな違い。

これらは、セッション(elasticache / memcached)、ライブDBルックアップ(memcachedを介したキャッシュクエリ)、CDNを介してプルされたアセットなどを含むページです。

私が言えることは、laravelは物事に約200-300msの負荷をかけます。結局のところ、PHPで生成されたビューには問題ありませんが、このタイプの遅延はロード時に許容できます。ただし、Ajax / JSを使用して小さな更新を処理するPHPビューの場合、動作が遅くなり始めます。

200個のボットがそれぞれ100ページを同時にクロールしているときに、このシステムがマルチテナントアプリでどのように見えるかは想像できません。

Laravelはシンプルなアプリに最適です。ミドルウェアのナンセンスを必要とするような凝ったことをする必要がない場合(つまり、マルチテナントアプリやカスタムドメインがないなど)、Lumenは許容範囲内です。

ただし、「Hello World」の投稿に対して、バインドして300ミリ秒の負荷が発生する可能性のあるものから始めるのは好きではありません。

あなたが「誰が気にするの?」と思ったら

..数十万件の結果にわたるオートコンプリートの提案に応答するために、クイッククエリに依存する予測検索を記述します。その200〜300ミリ秒の遅れは、ユーザーを完全に狂気に駆り立てます。


2
ミドルウェアがナンセンスなのはなぜですか?私たち全員がそれがナンセンスだと主張できるように、事実で説明するように気をつけますか?また、80〜65ミリ秒の間に正常に応答するLaravelインストールを実行しているので(はい、40億のレコードテーブルに対してデータベースクエリを実行します)、あなたが何をしているのかを知りたいと思っています。
mjh 2017

2
あなたは明らかにlaravelが大好きです。基本インストールをセットアップして最適化しましたが、結果が良くありませんでした。ルート前処理を処理するには、ミドルウェアとリバースエンジニアリングが必要であることがわかりました。これは理想的ではありませんでした。最適化するために「YOUR」laravelインストールを取得したからといって、すばらしい。その無関係。HELLO WORLDをルーティングする基本パッケージは、単純なルーティングフレームワークや小枝テンプレートエンジンよりもはるかに重くて低速でした。両方をキャッシュできますか?最適化されていますか?改善されましたか?はい。それがポイントですか?いいえ。Laravelは重いです。重いのは遅い(遅い)。世界はそれに同意します。あなたがそれを好きならそれを使ってください、しかしこれは神学ではありません。:)
ニック

1
私はより少ない時間を過ごすのが大好きです。私はフレームワーク/テクノロジー/何でも本当に気にしません、私はあなたが同じであると仮定します。目標を達成するために費やす時間が少ない=それは私の本の勝利です。さて、はい、Laravelは重いです。すべてのフレームワークは、最低限の言語に比べて重いです。他のプログラム/ソフトウェアと同じように-Laravel高速で実行できます。これが私のコメントのポイントです。フレームワークが役立つ場合、それをより速く実行する必要がある場合、それは達成可能です。
mjh 2017

20ドルのDOサーバーで実行されているLaravelの未構成/最適化/キャッシュされたインスタンスを、400ドルの高度に調整された/最適化された/キャッシュされたサーバーインフラストラクチャで実行されているカスタムビルドの高度に調整された/最適化された/キャッシュされたphpアプリと比較し、最適化されていないアプリは遅いですか?誤解しないでください、すべてのフレームワークは箱から出して遅いです!すべての人のために機能するようにフレームワークを調整する方法はありません。さらに、ほとんどのフレームワークは、最初に開発環境用にセットアップされます。遅い自動読み込み、キャッシュされていないテンプレートなど。リンゴをフェラーリ、この場合はゾンダではなく、リンゴと比較してください...
jacobfogg 2017年

2
CodeIgniterは箱から出して遅くはありません。実際、CodeIgniterはPHP自体とほぼ同じくらい高速です。PHP = 300 rps、CodeIgniter =295。Laravelはそれをはるかに下回っています。Zendは約30rpsで、ケーキは、私が覚えている限りでは、なんと3rpsです。2つのフレームワークが同じように作成されることはありません。見るべきリンゴがいくつかあります。ただし、Laravelを最適化すると60ミリ秒の負荷がかかる可能性があります。CodeIgniterを最適化すると、どのような負荷がかかるか想像してみてください。;)
ウェブマスターG

13

Laravel 4を使用すると、適切なセッションドライバーを選択することで最大の速度向上が達成できることがわかりました。

Sessions "driver" file;

Requests per second:    188.07 [#/sec] (mean)
Time per request:       26.586 [ms] (mean)
Time per request:       5.317 [ms] (mean, across all concurrent requests)


Session "driver" database;

Requests per second:    41.12 [#/sec] (mean)
Time per request:       121.604 [ms] (mean)
Time per request:       24.321 [ms] (mean, across all concurrent requests)

それが役立つことを願っています


1
明らかであり、ファイルをセッションとして使用しないことを誰にもお勧めします。スケーラビリティについて考えてください:)
jeveloper 2015

6
@jeveloper何?この例では、ファイルが4倍以上速いデータベースより
developerbmw

1
@Brettの「スケーラビリティを考える」がポイントでした。リモートマシンへのファイルとネットワークの呼び出しは(同じVPC内であっても)遅くなりますが、少なくとも持続可能であり、セッションデータをキャプチャします
jeveloper 2015

@jeveloperはファイルシステムが持続可能ではありませんか?とにかく、それがほとんどのデータベースの基盤となるストレージであるため、そうなることを願っています。
developerbmw

3
@developerbmw彼が言おうとしているのは、アプリケーションにサービスを提供するロードバランサーと複数のインスタンスがある場合、ローカルサーバーのファイルシステムの使用はスケーラブルではないということです。
クリス・ハリソン

10

私のHelloWorldコンテストから、Laravelはどれですか?推測できると思います。テストにはDockerコンテナーを使用しましたが、結果は次のとおりです。

http-response "Hello World"を作成するには:

  • ログハンドラーstdoutを使用したGolang:6000 rps
  • ログハンドラ標準ストリームを備えたSpringBoot:3600 rps
  • オフログのLaravel5:230 rps

なぜこれが自分のものとマークされているのかわからない、はい、おそらくコメントとしてより適切です。私はまた、ドッキングウィンドウコンテナ〜600msの範囲内極端に遅い応答時間を経験しますが
AndrewMcLagan

ルートキャッシュを試しましたか?
OGUZ缶Sertel

rpsとは何ですか?1秒あたりのリクエスト数は?
user3494047 2017年

3
Hello worldは、特に意味のあるテストに使用する場合、これまでで最高かつ最も便利なアプリケーションです。言語のパッケージ/パッケージマネージャーサポートに使用されるコンポーネントから、あなたが知る必要があるすべてを完全にカバーしています。
mjh 2017

1
他の複雑な依存関係のないパフォーマンスベースラインが欲しい
Aggarat .J 2017

5

私はLaravelをかなり使用していますが、ブラウザーで測定されたエンドツーエンドのレンダリングでは、リクエストから準備ができるまでの合計時間が短いため、Laravelが示す数値を信じていません。

さらに、職場のマシンではわずかに高い数値が得られます。これは、自宅のマシンよりも著しく高速にページを実行します。

これらの数値がどのように計算されているかはわかりませんが、観察やFirebugなどのブラウザツールによって裏付けられていません...

Laravelは、特に最適化されている場合、実際にはそれほど遅くはありません。ただし、メモリが不足しています。Drupalのような非常に遅い重いCMSでさえ、Laravelリクエストの約1/3のメモリフットプリントを持っているように見えます。

したがって、Laravelを本番環境で実行するには、CPU最適化サーバーの前にメモリ最適化サーバーにデプロイします。


それらの数字が正確かどうかはわかりませんが、間違いなく目立ちます。「特に最適化された場合」とはどういう意味ですか?どのように最適化していますか?走るだけphp artisan optimizeですか、それとももっとできることはありますか?
mpen 2014

あなたができることのいくつかはこれらの2つのリンクで概説されています: crynobone.com/posts/7/crunching-laravel-4-for-production-server | lutro.priv.no/posts/optimizing-for-production-with-laravel-4
AgmLauncher

3

これは少し古い質問ですが、状況は変わりました。Laravelはそれほど遅くはありません。前述のように、同期されたフォルダは遅いです。しかし、Windows10では使用できませんでしたrsync。私は両方を試してみましたcygwinminGW。のバージョンrsyncと互換性がないようです。git for windowsssh

これが私のために働いたものです:NFS

Vagrantのドキュメントによると:

NFSフォルダーはWindowsホストでは機能しません。Vagrantは、Windows上のNFS同期フォルダーに対する要求を無視します。

これはもう真実ではありません。最近はvagrant-winnfsd プラグインが使えます。インストールは本当に簡単です:

  1. 実行する vagrant plugin install vagrant-winnfsd
  2. あなたの変化Vagrantfileconfig.vm.synced_folder ".", "/vagrant", type: "nfs"
  3. に追加Vagrantfileconfig.vm.network "private_network", type: "dhcp"

NFS仕事をするのに必要なのはそれだけです。Laravelの応答時間は500msから100msに短縮されました。


Bash for Windowsを介してrsyncを試しましたか?私は実際に今それを実行しています、そしてそれは素晴らしい働きをします。
mpen 2017年

いいえ、試しませんでした。多くの人が、rsyncはgitbashやwindowscmdでもうまく機能すると書いています。なぜそれが私のために働いていないのか分かりません。しかし、とにかく別の解決策を見つけました。多分それは誰かのために役立つでしょう。
残虐行為2017年

1

1.40s開発エリアで純粋なlaravelを使って作業しているときに直面しました!

問題は次を使用していました:php artisan serveWebサーバーを実行するため

同じコードの代わりにApacheWebサーバー(またはNGINX)を使用したとき、 153ms


1

他の誰もそれについて言及していないので、xdebugデバッガーが劇的に時間を増加させたことがわかりました。基本的な「HelloWorld、時間は2020-01-01T01:01:01.010101」動的ページを提供し、これをhttpd.confで使用してリクエストの時間を計りました。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" **%T/%D**" combined

%Tは秒単位のサーブ時間、%Dはマイクロ秒単位の時間です。私のphp.iniでこれを使って:

[XDebug]
xdebug.remote_autostart = 1
xdebug.remote_enable = 1

応答時間は約770ミリ秒でしたが、両方を0に設定して無効にすると、すぐに160ミリ秒に跳ね上がりました。これらの両方を実行すると、120ミリ秒に短縮されました。

php artisan route:cache
php artisan config:cache

欠点は、構成やルートを変更した場合、それらを再キャッシュする必要があることです。これは煩わしいことです。

ちなみに、奇妙なことに、サイトをSSDから回転するHDDに移動しても、パフォーマンス上の利点はありませんでした。これは私には非常に奇妙なことですが、キャッシュされている可能性があります。私はXAMPPを搭載したWindows10を使用しています。


-10

ほとんどの場合、WebページにPHPを使用すると時間がかかるため、Laravelは低速です。

Laravelを使用すると、フレームワーク全体が呼び出しごとに再構築されます。これが、すべてのページがindex.phpを指す理由です。フレームワーク全体がPHPスクリプトであるため、それらはすべてPHPインタープリターを通過する必要があります-毎回。フレームワークが大きいほど、これには時間がかかります。

これを、サーバーが初期化コードを1回実行し、最終的にすべてのページがネイティブコード(JIT後)になる「サーバー環境」(Tomcatなど)と比較してください。

参考例として、同じハードウェア、OSなどを使用すると、このハードウェアでJSPを使用する単純な「helloworld」は3000 rps、laravelでの同じhelloworldは51rpsです。

フレームワークのオーバーヘッドと、結果として生じるコアあたりの最大RPSをテストする最も簡単な方法は、Apache ABと同時実行値1を使用し、動的な単純な「helloworld」を使用することです(静的ページキャッシュを回避するため)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.