検索
ホームページバックエンド開発PHPチュートリアルPHP実行速度最適化テクニックまとめ_PHPチュートリアル
PHP実行速度最適化テクニックまとめ_PHPチュートリアルJul 21, 2016 pm 03:53 PM
filefopengetphp使用する最適化できる存在する埋め込むスキル代わりのレート

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 を使用してください。 for ループ;



9. 文字列を引用するには、二重引用符の代わりに単一引用符を使用します。



10。 C/C++ の習慣に準拠しており、非常に効率的です。


11. グローバル変数は使用後に unset() する必要があります。


静的呼び出しメンバーは静的として定義する必要があります (PHP5 のみ)

ヒント: PHP5では静的メンバーという概念が導入されており、PHP4の関数内の静的変数と同じ機能を持ちますが、前者はクラスのメンバーとして使用されます。静的変数は、Ruby のクラス変数に似ています。クラスのすべてのインスタンスは同じ静的変数を共有します。非静的メンバーを静的に呼び出す効率は、静的メンバーを静的に呼び出すよりも 50 ~ 60% 遅くなります。主な理由は、前者は E_STRICT 警告を生成し、内部で変換する必要があるためです。

class foo {
function bar() {
echo 'foobar';
foo }
}
$foo = new foo
// インスタンスウェイ
$foo->bar() ; / / 静的な方法
foo::bar();
?>

クラス定数を使用する (PHP5 のみ)

ヒント: C++ const に似た PHP5 の新しい関数。

クラス定数を使用する利点は次のとおりです:

- コンパイル時間の分析、追加のオーバーヘッドなし

- ハッシュ テーブルが小さいため、内部検索が高速になります

- クラス定数は特定の「名前空間」にのみ存在するため、ハッシュ名は短く変更されます

- コードがよりクリーンになり、デバッグが容易になります



(一時的に) require/include_once を使用しないでください

require/include_once は呼び出されるたびにターゲット ファイルを開きます!

- 絶対パスを使用する場合、PHP 5.2/6.0 ではこの問題は発生しません

- APC キャッシュ システムの新しいバージョンでは、この問題が解決されました

ファイル I/O の増加 => 効率の低下

必要に応じて、次のことができます。ファイルが必要かどうか、含まれているかどうかを自分で確認してください。



意味のない関数を呼び出さないでください

対応する定数がある場合は関数を使用しないでください。

php_uname('s') == PHP_OS;
php_sapi_name() == PHP_SAPI;
あまり使わないですが、効率化は3500%くらい。



最速の Win32 チェック

$is_win = DIRECTORY_SEPARATOR == '\';
?>
- 関数は必要ありません

- Win98/NT/2000/XP/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($addr, array('a) ' => 'e'、




不必要な置換は行わないでください

置換がない場合でも、str_replace はパラメータにメモリを割り当てます。非常に遅い!解決策:

- 最初に (非常に高速に) strpos を使用して検索し、必要に応じて再度置き換えます

効率:

- 置き換える必要がある場合: 効率はほぼ同等です。その差は約0.1%です。

- 置換が必要ない場合: strpos を 200% 高速に使用します。



邪悪な @ 演算子

@ 演算子を悪用しないでください。 @は単純そうに見えますが、実際には裏側で多くの処理が行われています。 @ を使用する場合と使用しない場合の効率の差は 3 倍です。

特にループ内で @ を使用しないでください。5 つのループのテストでは、最初に error_reporting(0) を使用してエラーをオフにし、ループが完了してからエラーをオンにしても、@ を使用するよりも高速です。 。



strncmp を上手に活用してください

「最初の n 文字」が同じかどうかを比較する必要がある場合は、PCRE ではなく substr/strto lower の代わりに strncmp/strncasecmp を使用し、決して ereg には言及しないでください。 strncmp/strncasecmp が最も効率的です (ただし、それほど高いわけではありません)。



substr_compare は注意して使用してください (PHP5 のみ)

上記の原則に従って、substr_compare は最初とその後の substr よりも高速である必要があります。以下の場合を除き、答えはノーです:


- 大文字と小文字を区別しない比較

- より大きな文字列を比較します





文字列の代わりに定数を使用しないでください

理由:

- ハッシュテーブルを2回クエリする必要があります

- 定数名を小文字に変換する必要があります (2 番目のクエリを実行するとき)

- E_NOTICE 警告を生成します

- 一時的な文字列が作成されます

効率の差: 700%。





forループの条件文にcount/strlen/sizeofを入れないでください

ヒント: 私の個人的なアプローチ

for ($i = 0, $max = count($配列 );$i ?> if ($a == $b) {
$str .= $a;
$str .= $b;
// 長い
if ($a == $b) {
$str .= $a;
$str .= $b;
$str; .= ($a == $b ? $a : $b); どちらが速いと思いますか?

効率の比較:

-最長: 4.27

-長い: 4.43

-短い: 4.76

信じられない?もう一つは次のとおりです:


//original
$d = dir('.');
while (($entry = $d->read()) !== false) {
if ( $entry == '.' || $entry == '..') {
)
scandir('.')
?> どれが速いですか?

効率の比較:

- オリジナル: 3.37

- glob: 6.28

- scandir: 3.42

- OOなしのオリジナル: 3.14

- SPL (PHP5): 3.95

V oiceover:からも見ることができますPHP5 の登場 オブジェクト指向の効率は大幅に向上しており、その効率は純粋な関数の効率とそれほど変わりません。



PHP ファイルへのアクセス効率を向上させる

他の PHP ファイルを含める必要がある場合は、フルパス、または変換が簡単な相対パスを使用します。

include 'file.php'; // 悪いアプローチ
include './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');




引用に関するヒント:

- 複雑な構造を簡素化する

- メモリ使用量を最適化します


$a['b']['c'] = array();
// アクセスごとに 2 つの余分なハッシュ検索が遅くなります
for ($i = 0; $ i $a['b']['c'][$i] = $i
// より高速な参照ベースのアプローチ
$ref =& $a[ 'b' ]['c'];
for ($i = 0; $i $ref[$i] = $i?>
$a = 'large string';
// メモリを大量に使用するアプローチ
function a($str){
return $str.'something';
// より効率的な解決策
function a(&$str){
$ str .= '何か';
}
?>


================================ =========

参考資料

http://ilia.ws

Ilia の個人 Web サイト、ブログ、彼が参加した開発の一部や出版物などへのリンク。

http://ez.no

eZ コンポーネントの公式ウェブサイト、eZ comp は、効率性を自らの責任として捉えた PHP5 用のオープンソース ユニバーサル ライブラリであり、Ilia も開発に参加しました。

http://phparch.com

php|アーキテクト、優れた php 出版社/トレーニング組織。お金がない場合、または購入できない場合は、オンラインで入手できる古典的な海賊版がたくさんあります。

http://talks.php.net

PHP カンファレンスでのスピーチ集はまだそれほど豊富ではありませんが、内容は一目見ると寝食を忘れてしまうような良いものばかりです。朝眠いときに食べるか、昼食後にしっかり勉強してください。そうしないと、食べることも寝ることも忘れてしまいます。





http://www.bkjia.com/PHPjc/318678.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/318678.html技術記事 1. file、fopen、feof、fgets およびその他の一連のメソッドの代わりに file_get_contents を使用できる場合は、より効率的である file_get_contents を使用するようにしてください。ただし、file_get_con には注意してください...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

php怎么设置implode没有分隔符php怎么设置implode没有分隔符Apr 18, 2022 pm 05:39 PM

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

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

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!