Yii Framework 公式ガイド シリーズ 52 - 特別トピック: パフォーマンスチューニング
Web アプリケーションのパフォーマンスは、多くの要因の影響を受けます。データベース アクセス、ファイル システム操作、ネットワーク帯域幅などはすべて、潜在的な影響要因となります。 Yii は、さまざまな側面でフレームワークのパフォーマンスへの影響を軽減しました。しかし、ユーザー アプリケーションには、パフォーマンスを向上させるために改善できる箇所がまだたくさんあります。
1. APC 拡張機能を有効にする
PHP APC 拡張機能を有効にすることは、おそらくアプリケーションの全体的なパフォーマンスを向上させる最も簡単な方法です。この拡張機能は、PHP 中間コードをキャッシュして最適化し、新しいリクエストごとに PHP スクリプトの再解析に費やす時間を回避します。
2. デバッグ モードを無効にする
デバッグ モードを無効にすることも、パフォーマンスを向上させる簡単な方法です。定数 YII_DEBUG
が true に設定されている場合、この Yii アプリケーションはデバッグモードで実行されます。 デバッグ モードは開発段階では便利ですが、一部のコンポーネントは追加のシステム オーバーヘッドを引き起こすため、パフォーマンスに影響します。たとえば、メッセージ ロガーは、ログに記録されたメッセージごとに追加のデバッグ情報を記録します。 YII_DEBUG
被定以为 true,这个 Yii 应用将以调试模式运行。 调试模 式在开发阶段是有用的,但是它影响性能因为一些组件引起额外的系统开销。例如,信息记录器(the message logger)将为 被条被记录的信息记录额外的调试信息。
3. 使用 yiilite.php
当启用 PHP APC 扩展 时, 我们可以将 yii.php
替换为另一个名为 yiilite.php
的引导文件来进一步提高 Yii-powered 应用的性能。
文件 yiilite.php
包含在每个 Yii 发布中。它是一些常用到的 Yii 类文件的合并文件。在文件中,注释和跟踪语句都被去除。因此,使用 yiilite.php
将减少被引用的文件数量并避免执行跟踪语句。
注意,使用 yiilite.php
而不开启 APC 实际上将降低性能,因为 yiilite.php
包含了一些不是每个请求都必须的类,这将花费额外的解析时间。 同时也要注意,在一些服务器配置下使用 yiilite.php
将更慢,即使 APC 被打开。 最好使用演示中的 hello world
运行一个基准程序来决定是否使用 yiilite.php
。
4. 使用缓存技术
如在 缓存 章节所述,Yii 提供了几个可以有效提高性能的缓存方案。 若一些数据的生成需要长时间,我们可以使用数据缓存 方法来减少数据产生的频率;若页面的一部分保持相对的固定,我们可以使用 碎片缓存 方法减少它的渲染频率;若一整个页面保持相对的固定,我们可以使用 页面缓存 方法来节省页面渲染所需的花销。
若应用在使用 Active Record,我们应当打开 数据结构缓存 以节省解析数据表结构的时间。可以 通过设置CDbConnection::schemaCachingDuration 属性为一个大于 0 的值来完成。
除了这些应用级别的缓存技术,我们也可使用服务级别的缓存方案来提高应用的性能。 事实上,我们之前描述的PHP APC 缓存 就属于此项。 也有其他的服务器技术,例如 Zend Optimizer, eAccelerator, Squid,其他不一一列出。
5. 数据库优化
从数据库取出数据经常是一个网络应用的主要瓶颈。虽然使用缓存可以减少性能损失,它不能解决根本问题。 当数据库包 含大量数据而被缓存的数据是无效时,如果没有良好的数据库和查询优化设计,获取最新的数据将会非常耗费资源。
在一个数据库中聪明的设计索引。索引可以让 SELECT
查询更快, 但它会让 INSERT
, UPDATE
或 DELETE
查询更慢。
对于复杂的查询,推荐为它创建一个数据库视图,而不是通过PHP代码生成查询语句让DBMS来重复解析他们。
不要滥用 Active Record。虽然 Active Record 擅长以一个 OOP样式模型化数据, 它实际上为了它需要创建一个或几个对 象来代表每条查询结果降低了性能。 对于数据密集的应用,在底层使用 DAO 或 数据库接口 将是一个更好的选择。
最后但并不是最不重要的一点,在你的 SELECT
查询中使用 LIMIT
yiilite.php
を使用しますPHP APC 拡張機能が有効になっている場合、yii.php
を yiilite.php
という名前の別の拡張子に置き換えることができます。 code> ブートファイルを使用すると、Yii を利用したアプリケーションのパフォーマンスがさらに向上します。 ファイル yiilite.php
はすべての Yii ディストリビューションに含まれています。これは、一般的に使用されるいくつかの Yii クラス ファイルをマージしたファイルです。ファイルでは、コメントとトレース ステートメントが削除されます。したがって、yiilite.php
を使用すると、参照されるファイルの数が減り、トレース ステートメントの実行が回避されます。 APC を有効にせずに yiilite.php
を使用すると、実際にパフォーマンスが低下することに注意してください。これは、yiilite.php
にはすべてのリクエストに必要ではないクラスが含まれており、余分な解析に時間がかかるためです。時間。 また、APC がオンになっている場合でも、一部のサーバー構成では yiilite.php
の使用が遅くなることに注意してください。 yiilite.php
を使用するかどうかを決定するには、デモの hello world
を使用してベンチマークを実行するのが最善です。 🎜🎜4. キャッシュテクノロジーを使用する🎜🎜 キャッシュの章で述べたように、Yii はパフォーマンスを効果的に向上させることができるいくつかのキャッシュソリューションを提供します。 一部のデータの生成に時間がかかる場合は、データ キャッシュ方式を使用してデータ生成の頻度を減らすことができます。ページの一部が比較的固定されたままである場合は、フラグメント キャッシュ方式を使用してそのレンダリング頻度を減らすことができます。ページ全体が比較的固定されたままになる 固定されたため、ページ レンダリングのコストを節約するためにページ キャッシュ方法を使用できます。 🎜🎜アプリケーションがアクティブ レコードを使用している場合は、データ テーブル構造の解析時間を節約するためにデータ構造キャッシュをオンにする必要があります。これを実現するには、CDbConnection::schemaCachingDuration プロパティを 0 より大きい値に設定します。 🎜🎜これらのアプリケーション レベルのキャッシュ テクノロジに加えて、サービス レベルのキャッシュ ソリューションを使用してアプリケーションのパフォーマンスを向上させることもできます。 実際、前に説明した PHP APC キャッシュはこのカテゴリに分類されます。 Zend Optimizer、eAccelerator、Squid などの他のサーバー テクノロジーもありますが、その他は 1 つずつリストされています。 🎜🎜5. データベースの最適化🎜🎜 多くの場合、データベースからのデータの取得がネットワーク アプリケーションの主なボトルネックになります。キャッシュを使用するとパフォーマンスの低下を軽減できますが、根本的な問題は解決されません。 データベースに大量のデータが含まれており、キャッシュされたデータが無効な場合、適切なデータベースとクエリの最適化設計がなければ、最新のデータを取得するのに非常に多くのリソースが消費されます。 🎜🎜データベース内のスマートに設計されたインデックス。インデックスを使用すると、SELECT
クエリは高速化できますが、INSERT
、UPDATE
、または DELETE
クエリは遅くなる可能性があります。 🎜🎜複雑なクエリの場合は、PHP コードを通じてクエリ ステートメントを生成し、DBMS に繰り返し解析させるのではなく、データベース ビューを作成することをお勧めします。 🎜🎜アクティブ レコードを悪用しないでください。 Active Record は OOP スタイルでのデータのモデリングに優れていますが、各クエリ結果を表すために 1 つまたは複数のオブジェクトを作成する必要があるため、実際にはパフォーマンスが低下します。 データ集約型のアプリケーションの場合は、内部で DAO またはデータベース インターフェイスを使用することをお勧めします。 🎜🎜最後に重要なことですが、SELECT
クエリで LIMIT
を使用してください。これにより、データベースから大量のデータがフェッチされ、PHP に割り当てられたメモリが使い果たされることが回避されます。 🎜🎜6. スクリプト ファイルを最小限に抑える🎜🎜複雑なページでは、多くの外部 JavaScript および CSS ファイルの導入が必要になることがよくあります。 各ファイルによって余分な往復が発生するため、ファイルを結合してスクリプト ファイルの数を最小限に抑える必要があります。 ネットワーク転送時間を短縮するために、各スクリプト ファイルのサイズを減らすことも検討する必要があります。両方の側面を改善するのに役立つツールが多数あります。 🎜🎜 Yii で生成されたページの場合、変更したくないコンポーネント (Yii コアコンポーネント、サードパーティコンポーネントなど) によってレンダリングされる一部のスクリプトファイルは例外です。 これらのスクリプト ファイルを最小化するには、2 つの手順が必要です。 🎜注: 以下で説明する
scriptMap
機能は、バージョン 1.0.3 以降でサポートされています。scriptMap
特征已自版本 1.0.3 起被支持。
首先,通过配置应用组件 clientScript 的 scriptMap 属性来声明脚本被最小化。 可以在应用配置中完成,也可以在代码中配置。例如,
$cs=Yii::app()->clientScript; $cs->scriptMap=array( 'jquery.js'=>'/js/all.js', 'jquery.ajaxqueue.js'=>'/js/all.js', 'jquery.metadata.js'=>'/js/all.js', ...... );
上面的代码所做是映射这些 JavaScript 文件到 URL /js/all.js
。 若这些 JavaScript 文件任何之一需要被一些组件引入, Yii 将引入这个 URL (一次) 而不是各个独立的脚本文件。
其次,我们需要使用一些工具来联合 (和压缩) JavaScript 文件为一个单独的文件,并保存为 js/all.js
。
相同的技巧也适用于 CSS 文件。
在 Google AJAX Libraries API 帮助下我们可以改善页面载入速度。例如,我们可以从 Google 的服务器引入jquery.js
而不是从我们自己的服务器。要这样做, 我们首先配置 scriptMap
$cs=Yii::app()->clientScript; $cs->scriptMap=array( 'jquery.js'=>false, 'jquery.ajaxqueue.js'=>false, 'jquery.metadata.js'=>false, ...... );
/js/all.js
にマップします。 これらの JavaScript ファイルのいずれかをコンポーネントにインクルードする必要がある場合、Yii は個々のスクリプト ファイルの代わりにこの URL を (1 回) インクルードします。 次に、いくつかのツールを使用して JavaScript ファイルを 1 つのファイルに結合 (圧縮) し、js/all.js
として保存する必要があります。
同じトリックは CSS ファイルにも機能します。
Google AJAX ライブラリ API を利用すると、ページの読み込み速度を向上させることができます。たとえば、jquery.js
を独自のサーバーではなく Google のサーバーからインポートできます。これを行うには、まず scriptMap
を次のように設定します。
<head> <?php echo CGoogleApi::init(); ?> <?php echo CHtml::script( CGoogleApi::load('jquery','1.3.2') . "\n" . CGoogleApi::load('jquery.ajaxqueue.js') . "\n" . CGoogleApi::load('jquery.metadata.js') ); ?> ...... </head>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Yii は、PHP をベースにした高性能 MVC フレームワークで、Web アプリケーションの迅速かつ効率的な開発をサポートする非常に豊富なツールと機能のセットを提供します。中でも、Yii フレームワークの RESTful API 機能は、Yii フレームワークを使用することで高性能で拡張性の高い RESTful インターフェースを簡単に構築でき、Web アプリケーションの開発を強力にサポートできるため、ますます開発者の注目と愛を集めています。 RESTfulAPI の概要 RESTfulAPI は

Linux システムのカーネル パラメータを最適化および調整してパフォーマンスを向上させる方法 概要: Linux オペレーティング システムは、強力なパフォーマンスと柔軟な構成オプションを備えた、世界で最も人気のあるオペレーティング システムの 1 つです。この記事では、Linux システムのカーネル パラメーターを最適化および調整してパフォーマンスを向上させる方法について説明します。カーネル パラメータの意味を理解することから始めて、メモリ管理、ディスク IO、ネットワーク、スケジューラなどの一般的なパフォーマンス チューニング手法を探っていきます。これらの最適化と調整により、ユーザーは Linux システムをより効果的に活用し、作業効率を向上させることができます。

Yii フレームワークのミドルウェア: アプリケーションに複数のデータ ストレージのサポートを提供する はじめに ミドルウェア (ミドルウェア) は、Yii フレームワークの重要な概念であり、アプリケーションに複数のデータ ストレージのサポートを提供します。ミドルウェアはフィルターのように機能し、アプリケーションのリクエストとレスポンスの間にカスタム コードを挿入します。ミドルウェアを通じて、リクエストを処理、検証、フィルタリングし、処理された結果を次のミドルウェアまたは最終ハンドラーに渡すことができます。 Yii フレームワークのミドルウェアは非常に使いやすいです

Web アプリケーションの急速な開発に伴い、最新の Web 開発は重要なスキルになりました。効率的な Web アプリケーションを開発するために多くのフレームワークやツールが利用できますが、その中でも Yii フレームワークは非常に人気のあるフレームワークです。 Yii は、最新のデザインパターンとテクノロジーを使用し、強力なツールとコンポーネントを提供し、複雑な Web アプリケーションの構築に最適な、高性能のコンポーネントベースの PHP フレームワークです。この記事では、Yii フレームワークを使用して Web アプリケーションを構築する方法について説明します。まずYiiフレームワークをインストールし、

Yii フレームワークを使用して Web ページのキャッシュとページのチャンクを実装する手順 はじめに: Web 開発プロセス中、Web サイトのパフォーマンスとユーザー エクスペリエンスを向上させるために、多くの場合、ページのキャッシュとチャンクが必要になります。 Yii フレームワークは強力なキャッシュとレイアウト機能を提供しており、開発者が Web ページのキャッシュとページ チャンキングを迅速に実装できるようにします。この記事では、Yii フレームワークを使用して Web ページのキャッシュとページ チャンキングを実装する方法を紹介します。 1. Web ページのキャッシュをオンにする Yii フレームワークでは、設定ファイルを通じて Web ページのキャッシュをオンにすることができます。メイン設定ファイルを開きます。

近年、ゲーム業界の急速な発展に伴い、ゲームをクリアするためのゲーム戦略を模索するプレイヤーがますます増えています。したがって、ゲームガイド Web サイトを作成することで、プレイヤーはゲームガイドを入手しやすくなると同時に、プレイヤーにより良いゲーム体験を提供することができます。このような Web サイトを作成する場合、開発には Yii フレームワークを使用できます。 Yii フレームワークは、PHP プログラミング言語に基づいた Web アプリケーション開発フレームワークです。高効率、セキュリティ、強力な拡張性という特徴があり、ゲームガイドをより迅速かつ効率的に作成するのに役立ちます。

Yii フレームワーク ミドルウェア: アプリケーションにロギング機能とデバッグ機能を追加する [はじめに] Web アプリケーションを開発する場合、通常、アプリケーションのパフォーマンスと安定性を向上させるために、いくつかの機能を追加する必要があります。 Yii フレームワークは、アプリケーションがリクエストを処理する前後にいくつかの追加タスクを実行できるようにするミドルウェアの概念を提供します。この記事では、Yii フレームワークのミドルウェア機能を使用してロギングとデバッグ機能を実装する方法を紹介します。 【ミドルウェアとは】 ミドルウェアとは、アプリケーションがリクエストを処理する前後のリクエストとレスポンスの処理を指します。

Yii フレームワークでは、コントローラーはリクエストの処理において重要な役割を果たします。通常のページ リクエストの処理に加えて、コントローラーを使用して Ajax リクエストを処理することもできます。この記事では、Yii フレームワークで Ajax リクエストを処理する方法を紹介し、コード例を示します。 Yii フレームワークでは、Ajax リクエストの処理は次の手順で実行できます。 最初の手順は、コントローラー (Controller) クラスを作成することです。 Yii フレームワークが提供する基本コントローラークラス yiiwebCo を継承できます。
