From 4456e18be01abeaf2a855cd2bf0b7f2b73c9eebf Mon Sep 17 00:00:00 2001 From: Nobuo Kihara Date: Sat, 15 Nov 2014 23:47:35 +0900 Subject: [PATCH] docs/guide-ja/runtime - added 2 sections [ci skip] - docs/guide-ja/runtime-overview.md - added [ci skip] - docs/guide-ja/runtime-bootstrapping.md - added [ci skip] - docs/guide-ja/runtime-bootstrapping.md - added links to OPCache and APC [ci skip] close #6067 --- docs/guide-ja/runtime-bootstrapping.md | 46 ++++++++++++++++++++++++++ docs/guide-ja/runtime-overview.md | 22 ++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 docs/guide-ja/runtime-bootstrapping.md create mode 100644 docs/guide-ja/runtime-overview.md diff --git a/docs/guide-ja/runtime-bootstrapping.md b/docs/guide-ja/runtime-bootstrapping.md new file mode 100644 index 0000000000..e8c613c167 --- /dev/null +++ b/docs/guide-ja/runtime-bootstrapping.md @@ -0,0 +1,46 @@ +ブートストラップ +================ + +ブートストラップとは、アプリケーションが入ってくるリクエストの解決と処理を開始する前の、 +環境を準備する過程を指すものです。ブートストラップは二つの場所、すなわち、[エントリスクリプト](structure-entry-scripts.md) と +[アプリケーション](structure-applications.md)で行われます。 + +[エントリスクリプト](structure-entry-scripts.md) では、さまざまなライブラリのためのクラスオートローダが登録されます。 +この中には、Composer の `autoload.php` によるオートローダと、 +Yii の `Yii` クラスファイルによるオートローダが含まれます。 +エントリスクリプトは、次に、アプリケーションの [コンフィギュレーション](concept-configurations.md) +をロードして、[アプリケーション](structure-applications.md) のインスタンスを作成します。 + +アプリケーションのコンストラクタでは、次のようなブートストラップの仕事が行われます。 + +1. [[yii\base\Application::preInit()|preInit()]] が呼ばれます。このメソッドは、いくつかの + 優先度の高いアプリケーションプロパティ、例えば [[yii\base\Application::basePath|basePath]] + などを構成します。 +2. [[yii\base\Application::errorHandler|エラーハンドラ]] を登録します。 +3. 与えられたアプリケーションコンフィギュレーションを使って、アプリケーションプロパティを初期化します。 +4. [[yii\base\Application::init()|init()]] が呼ばれます。そして `init()` が [[yii\base\Application::bootstrap()|bootstrap()]] を呼んで、 + ブートストラップコンポーネントを走らせます。 + - エクステンションマニフェストファイル `vendor/yiisoft/extensions.php` をインクルードします。 + - エクステンションによって宣言された [ブートストラップコンポーネント](structure-extensions.md#bootstrapping-classes) を作成して走らせます。 + - アプリケーションの [bootstrap プロパティ](structure-applications.md#bootstrap) に宣言されている + [アプリケーションコンポーネント](structure-application-components.md) および/または + [モジュール](structure-modules.md) を作成して走らせます。 + +ブートストラップの仕事は *全て* のリクエストを処理する前に、毎回しなければなりませんので、この過程を +軽いものに保って可能な限り最適化することは非常に重要なことです。 + +あまりに多くのブートストラップコンポーネントを登録しないように努めてください。ブートストラップ +コンポーネントが必要になるのは、リクエスト処理のライフサイクル全体に関与する必要がある場合だけです。 +例えば、モジュールが追加の URL 解析規則を登録する必要がある場合は、モジュールを [bootstrap プロパティ](structure-applications.md#bootstrap) +のリストに挙げなければなりません。なぜなら、URL 規則を使ってリクエストが解決される前に、 +新しい URL 規則を有効にしなければならないからです。 + +実運用モードにおいては、[PHP OPCache] や {APC] など、バイトコードキャッシュを有効にして、PHP ファイルを +インクルードして解析するのに要する時間を最小化してください。 + +[PHP OPcache]: http://php.net/manual/ja/book.opcache.php +[APC]: http://php.net/manual/ja/book.apc.php + +大規模なアプリケーションには、多数の小さなコンフィギュレーションファイルに分割された、 +非常に複雑なアプリケーション [コンフィギュレーション](concept-configurations.md) を持つものがあります。 +そのような場合には、コンフィギュレーション配列全体をキャッシュしておき、エントリスクリプトでアプリケーションのインスタンスを作成する前には、コンフィギュレーション配列をキャッシュからロードするという方法を考慮してください。 diff --git a/docs/guide-ja/runtime-overview.md b/docs/guide-ja/runtime-overview.md new file mode 100644 index 0000000000..5adadc06ca --- /dev/null +++ b/docs/guide-ja/runtime-overview.md @@ -0,0 +1,22 @@ +概要 +==== + +Yii のアプリケーションがリクエストを処理するときは、毎回、同じような作業の流れを経験します。 + +1. ユーザが [エントリスクリプト](structure-entry-scripts.md) `web/index.php` にリクエストをします。 +2. エントリスクリプトは、アプリケーションの [コンフィギュレーション](concept-configurations.md) をロードして、リクエストを処理するための [アプリケーション](structure-applications.md) のインスタンスを作成します。 +3. アプリケーションは、[リクエスト](runtime-requests.md) アプリケーションコンポーネントの助けを借りて、リクエストされた [ルート](runtime-routing.md) を解決します。 +4. アプリケーションはリクエストを処理するための [コントローラ](structure-controllers.md) のインスタンスを作成します。 +5. コントローラは [アクション](structure-controllers.md) のインスタンスを作成して、アクションのためのフィルタを実行します。 +6. フィルタのどれかが失敗すると、アクションはキャンセルされます。 +7. すべてのフィルタを無事に通ったら、アクションが実行されます。 +8. アクションはデータモデルを、おそらくはデータベースから、ロードします。 +9. アクションはデータモデルをビューに提供して、ビューをレンダリングします。 +10. レンダリングの結果は [レスポンス](runtime-responses.md) アプリケーションコンポーネントに返されます。 +11. レスポンスコンポーネントがレンダリングの結果をユーザのブラウザに送信します。 + +次の図は、アプリケーションがどのようにしてリクエストを処理するかを示すものです。 + +![リクエストのライフサイクル](images/request-lifecycle.png) + +この節では、これらのステップのいくつかについて、どのように動作するかを詳細に説明します。