「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Slim および Flight PHP フレームワークの比較

Slim および Flight PHP フレームワークの比較

2024 年 11 月 7 日に公開
ブラウズ:928

なぜマイクロフレームワークを使用するのでしょうか?

ソーシャルメディアでは、新人の PHP 開発者が「自分のプロジェクトにはどのフレームワークを使用すべきか」と尋ねることがよくあり、一般的に与えられる答えは「Laravel」または「Symfony」です。

これらはどちらも良い選択肢ですが、この質問に対する正しい答えは「何をするためにフレームワークが必要ですか?」であるはずです。

適切なフレームワークとは、必要なことを実行し、決して使用しない機能を大量に持たないフレームワークである必要があります。

1 つのルートで Web サイトを作成している場合、Laravel または Symfony を使用するとサイトのオーバーエンジニアリングになりますが、複雑なサイトの場合は Laravel または Symfony が正しい選択となる可能性があります。

マイクロ フレームワークは、フル スタック フレームワークが提供するすべての機能を必要としない小規模から中規模のサイトの構築に最適です。

たくさんありますが、Slim と Flight PHP はどちらもマイクロ フレームワークの優れた例です。


最近、ユーザーにデータベース関連の 10 個の質問を解決するように求める小さな Web サイトを作成しました。これには 3 つのルートと、質問を取得して回答を比較するためのいくつかの基本的なクエリがありました。

このような小規模なプロジェクトの場合は、マイクロ フレームワークが最適です。 Slim と Flight PHP の両方でサイトを構築して比較しました。

スケルトン

これまで特定のフレームワークを使用したことがない場合は、通常、提供されているスケルトン プロジェクトを使用して始めるのが最適です。

Flight PHP スケルトン プロジェクトは、ほぼ私が期待していたもので、軽量で、MVC セットアップがシンプルで、フォルダー構造が理解しやすく、プロジェクト内のすべての場所を把握できます。

フレームワークを初めて使用する人にとって、立ち上げて実行するまでの学習曲線は最小限です。

コンポーザー ライブラリに重点を置き、合計 5 つ(コア ライブラリを含む)のみ、うち 4 つは本番環境で使用されます。

スケルトンの制作サイズは 1.6Mb でした。

Slims スケルトン プロジェクトは、予想していたよりもディレクトリ構造が複雑で驚きました。小規模なプロジェクトよりも大規模なプロジェクトで使用できる構造を対象としています。マイクロ フレームワークでは、これは予想外でした。

Slim スケルトンは Flight PHP よりも少し重かったです。 21 個の作曲家ライブラリのうち、9 個が本番環境で使用されています。プロジェクトの制作サイズは 3.3Mb でした。

どちらも必要最小限の追加構成ですぐに機能しました。

ゼロから構築する

スケルトンを使用する代わりに、独自のセットアップを作成してサイトを構築することにしました。これを行う利点は、自分のニーズに合わせてフレームワークを調整でき、さまざまな構造に対してフレームワークがどれほど柔軟であるかを確認できることです。

マイクロ フレームワークを使用する大きな利点の 1 つは、不必要なオーバーヘッドなしで必要なことを正確に実行するようにマイクロ フレームワークを構築し、必要に応じて機能やライブラリを追加できることです。

Flight PHP を使用したセットアップはスケルトンと大きな違いはありませんでした。最終的にはディレクトリが減り、さまざまなコンポーザー ライブラリが使用されましたが、構造的には似ていました。

Slimでは、プロジェクトの構造が骨格とは大きく異なるものになってしまいました。

Slim が柔軟で、構造について仮定を立てず、スケルトンとはまったく異なる構造でも問題なく機能したのは良かったです。

Flight PHP はこのように柔軟性も高く、必要に応じてより複雑な構造を可能にし、新しいライブラリをフレームワークに追加するのは簡単でした。

コード

ルーティング

ルーティングの観点から見ると、どちらも使いやすかったです。どちらも、ドキュメントをあまり読まなくてもセットアップが簡単でした。

Flight PHP のルートは、Slim よりもセットアップがわずかに簡単で、使用するコードも少なくなりましたが、セットアップはどちらも難しくありませんでした。

ルーティング グループ、正規表現機能、ミドルウェア オプションにより、ルートが柔軟になりながらも簡単に操作できるようになりました。

データベース接続

Slim では、データベース クエリに EloquentDoctrine のような ORM を使用する必要があることが期待されますが、Flight PHP は次の場合に使用できる PDO の単純なラッパーを提供します。必要に応じて、アクティブ レコード をクエリ構築用のプロジェクトに追加できます。

私が取り組んでいたような小さなプロジェクトの場合、ORM を使用するのは必要以上に思えたので、最終的には Flight PHP に組み込まれているものと同様の、Slim 用の小さな PDO ラッパー クラスを構築することにしました。 .

ORM は優れていますが、データベース クエリのコーディング方法を選択できる柔軟性が組み込まれているのは優れた機能です。

一般的なコーディング

Slim フレームワークと Flight PHP フレームワークはどちらも、独自の方法でコードを記述できるようにするのに優れています。

一部のフレームワークは、特定の方法でコーディングすることを強制する傾向があり、フレームワークと戦っているように感じることがあります。

フレームワークはあなたに敵対するのではなく、あなたと協力して機能するべきであり、どちらも私と協力しているように感じました。

Slim は、CSRF 統合や HTTP キャッシュなどの便利なアドオンも多数提供します。

Flight PHP は、権限やアクティブ レコードなどの追加のアドオンを提供します。

これらのアドオンはすべて、サードパーティのソリューションを使用したり、独自のソリューションを構築したりする必要がなく、便利な追加機能です。

JSON を応答として返すのは、Slim よりも Flight PHP の方がクリーンです。Slim 3 には便利な withJson 応答がありました。 Slim 4 は PSR-7 に準拠していますが、JSON 応答を構築するにはより多くのコードが必要になることを意味します。

JSON 応答を頻繁に使用する場合は、PSR-7 標準に準拠しながら、より便利にするラッパーを作成する可能性があります。

これは 2 つのフレームワークの大きな違いです。Slim はコードベースをクリーンアップして簡素化するクラスを作成することでさらに調整する必要があるように感じますが、Flight PHP はすでにこれを行っています。

Slim は多数のヘルパー ミドルウェアを提供します。一部の機能を動作させるにはミドルウェアが必要です。

この例としては、FETCH を使用して Javascript からデータを取得することが挙げられます。 Slim には、POST リクエストからデータ配列を作成するメソッド getParsedBody があります。

ただし、これを使用するには、addBodyParsingMiddleware をコンテナに追加する必要があります。

これは新しい開発者にとっては少し罠ですが、オプション機能へのアクセスも提供するため、必要な機能のみを有効にすることでフレームワーク全体のフットプリントを削減できます。

Flight PHP は構成ファイルを通じてこれを実現します。一部の機能は、ミドルウェアの有効化を通じてではなく構成を通じてオンまたはオフにすることができます。

スピードテスト

ベンチマークによると、この 2 つを比較すると興味深い結果が得られ、一部の領域では Slim が Flight PHP を上回っていますが、他の領域では Flight PHP が Slim を上回っています。

2 つのフレームワークを自分のコードでテストしたところ、Flight PHP の方が Slim よりも応答時間が速く、安定していることがわかりました。

フロントエンド

Slim and Flight PHP Framework Comparison

JSON を返す GET リクエスト

Slim and Flight PHP Framework Comparison

JSON を返す POST リクエスト

Slim and Flight PHP Framework Comparison

私が注目すべきと感じたのは、Slim を使用したときの異常値のスパイクです。

これらのテストを複数回実行すると、毎回上で示したものと同様の結果が得られました。応答時間はどちらも概ね良好でしたが、Slim では異常値のスパイクが発生しましたが、これは Flight PHP のテスト時には発生せず、Flight PHP の方が全体的に優れていました。応答時間。

最終的な考え

マイクロ フレームワークにまだ挑戦したことがない場合は、試してみてください。いくつかのフレームワークが存在しており、それらを試して、それぞれの好きなものと嫌いなものを確認するのは素晴らしい学習経験になります。 1つ。

Slim と Flight PHP はどちらも優れたマイクロ フレームワークです。

Slim は、あれば便利な機能を備えた堅牢なフレームワークで、静かに動作します。

Flight PHP は軽量で、そのシンプルさによりフレームワークの学習が非常に簡単になります。

優れた応答時間と、同じことを実現するためのより単純化されたコードにより、マイクロ フレームワークの使用に非常に適した選択肢になります。

これら 2 つを並べてみると、Slim よりも Flight PHP の方が好きですが、他のフレームワークと同様に、試してみて、うまく機能するかどうかを確認してください。

結局のところ、適切なフレームワークとは、必要なことを実行するフレームワークです。

フライト PHP
スリムフレームワーク

リリースステートメント この記事は次の場所に転載されています: https://dev.to/mrpercival/slim-and-flight-php-framework-comparison-17am?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>
  • Turborepo と Nx: どちらの Monorepo ツールが最適ですか?
    Turborepo と Nx: どちらの Monorepo ツールが最適ですか?
    最新の開発が複雑になるにつれて、モノリポジトリの人気が高まっています。これらにより、複数のプロジェクトまたはパッケージを 1 つのリポジトリに保存できるため、依存関係の管理が簡素化され、より良いコラボレーションが促進されます。モノリポジトリを管理するためのトップ ツールの 2 つは、Turborep...
    プログラミング 2024 年 11 月 7 日に公開
  • Java の配列の概要
    Java の配列の概要
    プログラミングでは多くの場合、大規模なデータセットの管理と操作が必要となるため、効率的かつ効果的なデータ構造が重要です。配列はコンピューター サイエンスの基本的なデータ構造であり、同じタイプの要素の固定サイズのシーケンスを格納する手段を提供します。このブログでは、Java の配列について詳しく説明し...
    プログラミング 2024 年 11 月 7 日に公開
  • CORS 問題を解決する方法
    CORS 問題を解決する方法
    CORS 問題を解決するには、Web サーバー (Apache や Nginx など) またはバックエンド (Django、Go、Node.js など) に適切なヘッダーを追加する必要があります。 、またはフロントエンド フレームワーク (React や Next.js など)。以下は各プラットフォ...
    プログラミング 2024 年 11 月 7 日に公開
  • メモリのアライメントは C 構造体のサイズにどのような影響を与えますか?
    メモリのアライメントは C 構造体のサイズにどのような影響を与えますか?
    C 構造体のメモリ アライメントC 構造体を扱う場合、メモリ アライメントを理解することが重要です。メモリの配置とは、メモリ内の特定の境界にデータを配置することを指します。 32 ビット マシンでは、メモリは通常 4 バイト境界でアライメントされます。構造体のメモリ アライメント次の構造体を考えてみ...
    プログラミング 2024 年 11 月 7 日に公開
  • 人気の観光名所からインスピレーションを得た革新的なプロジェクトの構築: 思い出に残る旅行体験への開発者向けガイド
    人気の観光名所からインスピレーションを得た革新的なプロジェクトの構築: 思い出に残る旅行体験への開発者向けガイド
    開発者として、私たちは周囲の世界からインスピレーションを得ることはよくありますが、信じられないほどの観光名所以上に優れた情報源はあるでしょうか。旅行アプリ、没入型体験、位置情報ベースのサービスのいずれに取り組んでいる場合でも、目的地を際立たせるものを理解することが重要です。アルバニアの最高の観光名所...
    プログラミング 2024 年 11 月 7 日に公開
  • C++ で std::locale を使用して数値をカンマでフォーマットする方法
    C++ で std::locale を使用して数値をカンマでフォーマットする方法
    C でのカンマを使用した数値の書式設定 C では、 std::locale クラスは、カンマを使用して数値を書式設定するロケール依存の方法を提供します。 .std::locale with std::stringstream数値をカンマ付きの文字列としてフォーマットするには、std::locale ...
    プログラミング 2024 年 11 月 7 日に公開
  • Python で素数シーケンス内の奇数の出力を回避するには?
    Python で素数シーケンス内の奇数の出力を回避するには?
    Python で一連の素数を出力する方法多くのプログラマは、Python で素数を正確に出力する関数を作成するのに苦労しています。よくある問題の 1 つは、代わりに奇数のリストを出力することです。この問題を修正するには、素数のプロパティを完全に理解し、コードを変更することが不可欠です。素数は 1 と...
    プログラミング 2024 年 11 月 7 日に公開
  • Pygameでマウスの方向に弾丸を発射するにはどうすればよいですか?
    Pygameでマウスの方向に弾丸を発射するにはどうすればよいですか?
    Pygame でマウスの方向に弾丸を発射する方法Pygame では、マウスの方向に発射される弾丸を作成できます。これを行うには、弾丸を表すクラスを作成し、マウスの位置に基づいてその初期位置と方向を設定する必要があります。弾丸のクラスまず、弾丸のクラスを作成します。このクラスには、弾丸の位置、サイズ、...
    プログラミング 2024 年 11 月 7 日に公開
  • パフォーマンスを最適化するための GG コーディングのヒント: コードの高速化
    パフォーマンスを最適化するための GG コーディングのヒント: コードの高速化
    ソフトウェア開発の世界では、ユーザーが好む高速で応答性の高いアプリケーションを提供するには、コードのパフォーマンスを最適化することが重要です。フロントエンドで作業しているかバックエンドで作業しているかに関係なく、効率的なコードの書き方を学ぶことが不可欠です。この記事では、時間の複雑さの軽減、キャッシ...
    プログラミング 2024 年 11 月 7 日に公開
  • PHP の strtotime() 関数を使用して特定の曜日の日付を見つけるにはどうすればよいですか?
    PHP の strtotime() 関数を使用して特定の曜日の日付を見つけるにはどうすればよいですか?
    特定の曜日(月曜日、火曜日など)の日付を決定する日付スタンプを確認する必要がある場合月曜日、火曜日、その他の平日など、特定の曜日には strtotime() 関数を使用できます。この関数は、今週中に指定された日がまだ発生していない場合に特に便利です。たとえば、次の火曜日の日付スタンプを取得するには、...
    プログラミング 2024 年 11 月 7 日に公開
  • Socket.io と Redis を使用してチャット アプリケーションを構築し、デプロイします。
    Socket.io と Redis を使用してチャット アプリケーションを構築し、デプロイします。
    このチュートリアルでは、Web ソケットを使用してチャット アプリケーションを構築します。 Web ソケットは、リアルタイムのデータ転送を必要とするアプリケーションを構築する場合に非常に役立ちます。 このチュートリアルを終えると、独自のソケット サーバーをセットアップし、リアルタイムでメッセージを送...
    プログラミング 2024 年 11 月 7 日に公開
  • 内部 SQL 結合
    内部 SQL 結合
    SQL 結合はデータベースのクエリの基本であり、ユーザーは指定された条件に基づいて複数のテーブルのデータを結合できます。結合は、論理結合と物理結合の 2 つの主なタイプに分類されます。論理結合はテーブルのデータを組み合わせる概念的な方法を表し、物理結合は RDS (リレーショナル データベース サー...
    プログラミング 2024 年 11 月 7 日に公開
  • 知っておくべきJavaScriptの機能
    知っておくべきJavaScriptの機能
    この記事では、未定義または null の可能性があるデータにアクセスしようとするときにエラーを防ぐ方法を検討し、できる方法を見ていきます。 必要に応じてデータを効果的に管理するために使用します. オプションのチェーンによる安全なアクセス JavaScript で、入れ子になったオブジ...
    プログラミング 2024 年 11 月 7 日に公開
  • JavaScript の約束: 非同期コードの理解、処理、および習得
    JavaScript の約束: 非同期コードの理解、処理、および習得
    イントロ 私は Java 開発者として働いていましたが、JavaScript の Promise に初めて触れたときのことを覚えています。コンセプトは単純そうに見えましたが、Promise がどのように機能するのかを完全に理解することはできませんでした。プロジェクトでそれらを使用し...
    プログラミング 2024 年 11 月 7 日に公開
  • パスキーを Java Spring Boot に統合する方法
    パスキーを Java Spring Boot に統合する方法
    Java Spring Boot のパスキーの概要 パスキーは、従来のパスワードに依存せずにユーザーを認証する最新の安全な方法を提供します。このガイドでは、Thymeleaf をテンプレート エンジンとして使用して、Java Spring Boot アプリケーションにパスキーを統合...
    プログラミング 2024 年 11 月 7 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3