さまざまな Ruby フレームワークでいくつかのパフォーマンス テストを実行してきましたが、Espresso はどのフレームワークよりもはるかに高速であることがわかりました。私は Sinatra で書かれた大規模なコードベースを持っており、アプリをスピードアップしたいと考えており、Espresso の基礎となるエンジンを抽出して Sinatra にプラグインすることができるかどうか疑問に思っていました. 誰もこれについて考えたことがありますか?どちらもRackをベースにしていることは知っていますが、パフォーマンスの違いを実際に説明するものは何ですか?
2 に答える
Espresso を簡単に見てみると、再利用可能なより深い「エンジン」よりも、そのシンプルさのために高速であると言えます。
Sinatra または Rails で実行されている Web サービスは、リクエスト データの処理と準備の際に、もう少し抽象化を使用するため、メソッド呼び出しがいくつか増えます。これにより、Espresso の単純なフレームワークと比較すると、オーバーヘッドが追加されます。
Sinatra から Espresso への転送は、Sinatra のブロックベースのルーティングよりも直接的にメソッドを公開する Espresso の DSL を使用するための変換になります。Sinatra ルートを Espresso に簡単に接続することはできません。これは、速度差の主な原因であるシンタトラのルート処理を引き続き使用することになるためです。
実際には、10 ミリ秒未満の応答時間で非常にパフォーマンスの高いサービスを作成しようとしている場合にのみ、速度の違いが問題になります。そのためには、リクエスト処理フレームワークだけでなく、システムの他の部分も高度に最適化する必要があります。実際には、ほとんどのアプリケーションでサーバーからの合計応答時間のわずかな割合しか消費しません。
ニールの答えは十分に包括的です。
Espresso は、設計上、ロード時にほとんどのルーティング処理を行っていることだけを付け加えておきます。
そして実行時に、Ruby メソッドである一致するアクションにリクエストを直接渡します。
また、Espresso は、特定のニーズに合わせて最適化された独自の URL マッパーを使用しています。
Sinatra 内で Espresso のエンジンを使用することについては不明です。
Sinatra の DSL を Ruby メソッドに変換する「簡単な」方法を見つける方が簡単かもしれません...