開発環境最適化の経験 PHP実行速度最適化手法まとめ

WBOY
リリース: 2016-07-29 08:37:25
オリジナル
906 人が閲覧しました

1. file、fopen、feof、fgets などの一連のメソッドの代わりに file_get_contents を使用できる場合は、より効率的な file_get_contents を使用してください。ただし、URL ファイルを開くときは、file_get_contents の PHP バージョンの問題に注意してください。
2. PHP のファイル操作効率は低くありませんが、SELECT SQL ステートメントを最適化してください。可能な限り INSERT 操作と UPDATE 操作を減らします (UPDATE に関して批判されました)。
4. PHP の内部関数をできるだけ使用します (ただし、PHP に存在しない関数を見つけるために、お金を無駄にしました。関数をカスタマイズする時間は経験の問題です!);
5. ループ内で変数、特に大きな変数を宣言しないでください (これは PHP だけの問題ではないようです)。多次元配列をループしないようにします。
7. PHP の内部文字列操作関数を使用できる場合は、正規表現を使用しないでください。foreach は while ループや for ループの代わりに使用してください。代わりに一重引用符を使用します。
10 の代わりに i+=1 を使用します。 C/C++ の習慣に準拠しており、非常に効率的です。
11. グローバル変数は使用後に unset() する必要があります。
静的に呼び出されるメンバーは静的として定義する必要があります (PHP5 のみ)
ヒント: PHP5 では静的メンバーが導入されています。と function は PHP4 関数の内部静的変数と同じですが、前者はクラスのメンバーとして使用されます。静的変数は、Ruby のクラス変数に似ています。クラスのすべてのインスタンスは同じ静的変数を共有します。非静的メンバーを静的に呼び出す効率は、静的メンバーを静的に呼び出すよりも 50 ~ 60% 遅くなります。主な理由は、前者は E_STRICT 警告を生成し、内部で変換する必要があるためです。
class foo {
function bar() {
echo 'foobar'; }
}
$foo = new foo
// インスタンス方法
$foo->bar(); static way
foo::bar();
?>
クラス定数を使用する (PHP5 のみ)
ヒント: C++ const に似た PHP5 の新しい関数。
クラス定数を使用する利点は次のとおりです:
- コンパイル時の解析、余分なオーバーヘッドなし
- ハッシュ テーブルが小さいため、内部検索が高速になります
- クラス定数は特定の「名前空間」にのみ存在するため、ハッシュ名は短い
- コードがクリーンになり、デバッグが簡単になります
(一時的に) require/include_once を使用しないでください
require/include_once は呼び出されるたびにターゲット ファイルを開きます。
- 絶対パスを使用する場合、PHP 5.2/6.0 にはこの問題はありません
- APC キャッシュ システムの新しいバージョンでは、この問題が解決されました
ファイル I/O の増加 => 効率の低下
必要に応じて、 /include ファイルが必要です。
意味のない関数を呼び出さない
対応する定数がある場合は関数を使用しないでください。
php_uname('s') == PHP_OS;
php_version() == PHP_VERSION;
あまり使わないけど効率化は3500くらい%。
最速の Win32 チェック
$is_win = DIRECTORY_SEPARATOR == '\';
?>
- 関数は必要ありません
- Win98/NT/2000/XP/Vista/Longhorn/Shorthorn/Whistler...ユニバーサル
- いつでも利用可能
時間の問題 (PHP>5.1.0 のみ)
ソフトウェアの現在時刻をどのようにして知ることができますか?シンプルに、「time() time() もう一度、あなたは私に尋ねます...」。
しかし、この関数は常に呼び出されるため、時間がかかります。
それでは、$_SERVER['REQUEST_TIME'] を使用してください。関数を呼び出す必要はありません。再度保存してください。
PCRE を高速化する
- 保存する必要のない結果については、() を使用せず、常に (?:) を使用します
このようにして、PHP は一致するコンテンツにメモリを割り当てる必要がなくなり、コストが節約されます。効率は約 15% 向上します。
- 正規表現が必要ない場合は、分析時にマニュアルの「文字列関数」セクションをよく読んでください。見逃している便利な機能はありますか?
例:
strpbrk()
strncasecmp()
strpos()/strrpos()/stripos()/strripos()
strtrの高速化
変換する必要があるのが単一の文字だけの場合は、配列の代わりに文字列を使用します. strtr:
$addr = strtr($addr, "abcd", "efgh"); // 良いです
$addr = strtr('a' => 'e',
;
不必要な置換は行わないでください。
置換がない場合でも、str_replace はパラメータにメモリを割り当てます。非常に遅い!解決策:
- 最初に strpos を使用して (非常に高速に) 検索し、必要に応じて再度置き換えます。
効率:
- 置き換える必要がある場合: 効率はほぼ同じですが、違いはあります。は約0.1%です。
- 交換が必要ない場合: strpos を 200% 高速に使用します。
邪悪な @ 演算子
@ 演算子を乱用しないでください。 @は単純そうに見えますが、実際には裏側で多くの処理が行われています。 @ を使用する場合と使用しない場合の効率の差は 3 倍です。
特にループ内で@を使用しないでください。5つのループのテストでは、最初にerror_reporting(0)を使用してエラーをオフにし、ループが完了してからエラーをオンにしても、@を使用するより高速です。
strncmp を上手に活用しましょう
「最初の n 文字」が同じかどうかを比較する必要がある場合は、substr/strto lower の代わりに strncmp/strncasecmp を使用し、PCRE は言うまでもなく、決して ereg には言及しないでください。 strncmp/strncasecmp が最も効率的です (ただし、それほど高いわけではありません)。
substr_compare は注意して使用してください (PHP5 のみ)
上記の原則に従って、substr_compare は最初も substr よりも高速である必要があります。以下の場合を除き、答えはノーです。
- 大文字と小文字を区別しない比較
- より大きな文字列を比較
文字列を定数で置き換えない
理由:
- ハッシュ テーブルを 2 回クエリする必要がある
- 定数名を小文字に変換する必要がある ( 2 番目のクエリ)
- E_NOTICE 警告を生成します
- 一時的な文字列が作成されます
効率の差: 700%。
for ループの条件文に count/strlen/sizeof を入れないでください
ヒント: 私の個人的なアプローチ
for ($i = 0, $max = count($array);$i < $ max; ++$i);
?>
効率の向上は次のとおりです:
- count 50%
- strlen 75%
短いコードは必ずしも速いとは限りません
//longest
if ( $a = = $b) {
$str .= $a;
} else {
$str .= $b;
}
// より長い
if ($a == $b) {
$str .= $a;
}
$str .= $b;
// short
$str .= ($a == $b ? $a : $b); どれが速いと思いますか?
効率の比較:
-最長: 4.27
-長い: 4.43
-短い: 4.76
信じられない?もう 1 つ:
// オリジナル
$d = dir('.');
while (($entry = $d->read()) !== false) {
if ($エントリ == '.' || $エントリ == '..') {
scandir('.');
?>
どっちが早いですか?
效率比较:
- オリジナル: 3.37
- グロブ: 6.28
- スキャンディール: 3.42
- OOなしのオリジナル: 3.14
- SPL (PHP5): 3.95
画外音:こちらも閲覧可能 PHP5 の面向オブジェクト効率向上很多、効率は純粋関数の効率とあまり変わりません。
PHP ファイルへのアクセス効率を向上
他の PHP ファイルを含める必要がある場合は、フルパス、または変換が簡単な相対パスを使用します。
include 'file.php'; // 悪いアプローチ
incldue './file.php'; // 良いアプローチ
include '/path/to/file.php' // 理想的
?>
すべてを最大限に活用する
PHP には利用可能な拡張機能や関数が多数あります。関数を実装する前に、PHP にこの関数があるかどうかを確認する必要があります。もっと簡単な実装はありますか?
$filename = "./somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename)); $handle);
// より単純な
file_get_contents('./somepic.gif');
参照に関するヒント
参照により次のことが可能になります:
- 複雑な構造化データへのアクセスを簡素化する
< ;?php
$a['b']['c'] = array();
// アクセスごとに 2 回の余分なハッシュ検索が遅い
for ($i = 0; $i $a['b']['c'][$i] = $i;
// より高速な参照ベースのアプローチ
$ref =& $a['b']['c']; $i = 0; $i $a = '大きな文字列';アプローチ
function a($str){
return $str.'something';
// より効率的な解決策
function a(&$str){
$str.= 'something';
?
==============================================
参考資料
http://ilia.ws
Ilia の個人 Web サイト、ブログ、彼が参加した開発や出版物の一部へのリンクなど。
http://ez.no
eZ コンポーネントの公式ウェブサイト、eZ comp は、効率性を自らの責任とする PHP5 用のオープンソースの汎用ライブラリであり、Ilia も開発に参加しました。
http://phparch.com
php|architect、優れた php 出版社/トレーニング組織。お金がない場合、または購入できない場合は、オンラインで入手可能な古典的な海賊版が多数存在します。
http://talks.php.net
PHPカンファレンスの講演集はまだあまり充実していませんが、寝食を忘れてしまうような良い内容ばかりですので、眠い時にお勧めです。朝か昼食後、注意深く勉強しないと、食べることも寝ることも忘れてしまいます。


以上、開発環境の最適化の経験と、PHPの実行速度最適化テクニックの概要を紹介しましたが、PHPチュートリアルに興味のある友人の参考になれば幸いです。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!