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