9

さて、私はPHP VMについての知識が比較的素朴で、最近何かについて疑問に思っています。特に、WebアプリケーションのPHPでのリクエストのライフサイクルはどのようになりますか。ここで良い説明の記事を見つけましたが、話にはもっと多くのことが必要だと感じています。

記事の説明から、サーバーにリクエストが送信されるたびにスクリプトが解析されて実行されます。これは私にはクレイジーに思えます!

私は多くのPHP5.3/5.4機能を利用する小さなマイクロフレームワークを書くことによってPHPを学ぼうとしています。そのため、静的とは何を意味し、静的クラス変数が実際にどのくらいの期間存続するかを考えるようになりました。私のアプリケーションには、静的プロパティを持つクラスに結果をキャッシュできるセットアップフェーズがあることを望んでいました。ただし、スクリプト全体が解析され、リクエストごとに実行される場合、サーバー化されたすべてのリクエストに対してアプリケーションの初期化手順を実行しないようにする方法がわかりません。

ここで重要な何かが欠けていることを心から願っています...どんな洞察も大いに評価されます!

4

3 に答える 3

6

記事の説明から、サーバーにリクエストが送信されるたびにスクリプトが解析されて実行されます。これは私にはクレイジーに思えます!

いいえ、その記事は正確です。解析/コンパイルの結果をキャッシュする方法はさまざまですが、スクリプトは毎回完全に実行されます。クラスまたは静的変数のインスタンスは、リクエスト間で保持されません。本質的に、各リクエストは、アプリケーションのこれまでにない実行コピーを取得します。

サーバー化されたすべてのリクエストに対してアプリケーションの初期化手順を実行しないようにする方法がわかりません。

あなたはできませんし、そうすべきでもありません。リクエストごとに、アプリを空白の状態に初期化する必要があります。$_SESSIONリクエスト間で永続化される大量のデータをシリアル化することもできますが、実際にそうする必要があることがわかるまで、そうすべきではありません。

ここで重要な何かが欠けていることを本当に願っています...

あなたは何も心配していないようです。世界中のすべてのPHPサイトはデフォルトでこのように機能し、大多数の大多数がパフォーマンスの問題について心配する必要はありません。

于 2013-01-06T15:09:21.577 に答える
0

いいえ、あなたは何も見逃していません。アプリケーションの状態を維持する必要がある場合は、DB、ファイル、Memcacheなどを使用して行う必要があります。

これは、慣れていない場合はおかしなことに聞こえるかもしれませんが、スケーリングなどに適している場合があります。他のサービスで状態を維持するため、PHPサーバーのいくつかのインスタンスを簡単に実行できます。

于 2013-01-06T15:09:29.490 に答える
0

静的変数は、他のPHP変数と同様に、スクリプト実行中のみ存続するため、どこにも「存続」しません。スクリプト実行間の永続性は、セッションハンドラーを介して処理されます。

于 2013-01-06T15:10:29.147 に答える