2

私は現在、教育用 (そして、それが良い場合は実際の実用的なもの) 用のカスタム MVC フレームワークの作成に取り組んでおり、可能なパフォーマンスの向上についてさまざまなシナリオを調査したいと考えています。

URI ルーティングに関しては、標準の URI 形式に精通しています。

/controller/action/id

そして、ルーティングを制御するためにこれからデータを解析することは、それほど難しくありません。さて、私がさらに疑問に思っているのは、nginx がこの URI 文字列を何らかのタイプのクエリ文字列に解析してコントローラーに直接渡すこととのパフォーマンスの違いです。

/foo/bar/12 => /application/foo.php?action=bar&id=12

それ以外の

/foo/bar/12 => /index.php?controller=foo&action=bar&id=12

あるいは

/foo/bar/12 => /index.php?uri=/foo/bar/12   (note that this would be encoded)

nginx が URL、クエリ文字列などを php-fpm の他の変数に既に渡していることは承知していますが、これは私の考えを示すための例示的なものです。

これは愚かなことですか?nginx でルートを明示的に定義すると、構成内のルートを変更するたびに nginx を再起動する必要があることを知っています。これはマイナス面になる可能性があります。

したがって、質問を言い換えると、MVC ルーティングに関しては、実際の Web サーバー (この場合は nginx) 自体がコントローラーへのルーティングを処理することによって、価値のあるパフォーマンスの向上がありますか、または標準のランディング スクリプト (index.html など) を使用しています。 php をディレクトリのルートに) URI を渡し、ルーティング用に解析することは問題ありませんか?

ありがとうございます。また、私はこれらのことについて学んでいるので、代わりに何をすべきかについての提案を心から歓迎します.

4

1 に答える 1

2

アプリケーション ロジック (URL ルーティング) を HTTP サーバーに混在させるつもりはありません。多くの PHP アプリは、この種のことを Apache .htaccess ファイルに依存していました。それは混乱に終わります。

あなたが言及したように、ルートを変更するにはNginxを再起動する必要があり、将来別のHTTPサーバーのすべてのルールを書き直したい場合を除き、アプリケーションをNginxに結び付けます. さらに悪いことに、アプリを複数のサーバーにスケールアウトする場合は、アップストリームごとにこれらのルールを繰り返す必要があります。

tl;dr レイヤーを分けておいてください。

于 2012-06-27T20:47:20.367 に答える