phpはシナリオの性能の4つの技巧を高めます。


通常、私は明らかな通常のPHP関数を使ってコードを作成して対応する問題を解決します。しかしその中のいくつかの問題については,いくつかの代替解に遭遇し,これらの解は特に性能を向上させた。
本稿では、代替案を紹介したいと思います。生産中の実行時間を減らす可能性を探しているなら、それはとても役に立ちます。どのPHP法がより性能の高い方法に取って代わられるかという問題と、コストやトレードオフの問題がありますか?
1.重複項の削除
重複項を含む大きな配列があります。一意の値を持つ配列だけを削除したいです。
全般

array_unique($array);
代わりに

array_keys(array_flip($array));
表現する
400万個以上の元素と300万個の重複項を含む配列を作成しました。これは最適な結果です。
方法
実行時間処理時間
アラリunique
787.31ミリ秒
アラリkeys array_flip
434.03ミリ秒
代替方法は、この測定では1.8倍速い(44.87%)。平均して速度は約1.5倍(30%)向上した。トレードオフ:これは単純な一次元配列にしか適用されません。
2.ランダム配列記録を取得する
大きな行列があります。この中からランダムな値を選択します。
全般

array_rand($array);
代わりに

$array[mt_rand(0, count($array) - 1)];
表現する
500万個の要素を含む配列を作成しました。これは最適な結果です。
方法
実行時間処理時間
アラリランド
25.99マイクロ秒
mt_ランド
0.95マイクロ秒
代替方法はこの測定速度が27.3倍速い(96.33%)です。平均して速度は約8倍(87%)向上した。この結果は、array_flip Mersenne Twister乱数生成器の実現も同じであり、PHP 7.1から内部ランダム化アルゴリズムが完全に同じアルゴリズムを使用するように変更されたので、特に驚きました。
3.アルファベットの数字をテストする
文字列を持っています。テストするには、英数字だけが含まれています。
全般

preg_match('/^[a-zA-Z0-9]+$/', $string);
代わりに

ctype_alnum($string);
表現する
100 k以上の文字数とアルファベットでない数字文字列を含む配列を作成しました。これは最適な結果です。
方法
実行時間処理時間
preg_match
15.39ミリ秒
ctype_alnum
2.06ミリ秒
この測定では、代替法は7.5倍(86.59%)速い。平均して速度は約4倍(76%)向上した。同じ内容は、mt_rand (文字チェック)およびctype_alpha()(数字文字チェック)に適用されてもよい。
4.サブ文字列の置換
一部を他のサブ文字列に置き換えたい文字列があります。
全般

str_replace('a', 'b', $string);
代わりに

strtr($string, 'a', 'b');
表現する
500万個のランダム文字列を含む配列を作成しました。これは最適な結果です。
方法
実行時間処理時間
strreplace
676.59ミリ秒
str
305.59ミリ秒
他の方法は2.2倍(54.83%)の測定がより速い。平均して速度は約2倍(51%)向上した。
その他の性能改善
これは私のコードの約束のいくつかの他のポイントを統合しました。それらは少し性能を改善することができます。
  • 優先JSON比XML
  • は、ループの各反復ではなくループの前に変数
  • を宣言する。
  • は、循環ヘッダにおける関数呼び出しを回避する(各反復において
  • )。
  • ctype_digit() for ($i=0; $i<count($array); $i)で呼び出された)
  • メモリ消費変数をリセットする
  • は、複数の count() get文ではなく、 select 文を優先的に選択する。
  • は、 if ではなく、 require / include より優先される(適切な操作コードキャッシュを確保する)。
  • 早い最適化に関する議論を知っています。生産中の性能はボトルネックに依存することに同意します。例えば、データベースの照会など、処理性能に重点を置いて注意します。しかし、もしもっと早い代替方法があるなら、例えば正規表現のほうが扱いやすく、維持しやすい場合、なぜそれらを使わないのですか?
    最後に
    現在のPHP 7.4を使っても、他の方法でスクリプトの性能を向上させることができます。本論文で提供されたデータを直接検証する場合、すべてのテストを含むストレージを作成しました。
    devmount/faster-php
    PHPスクリプトの性能を高めるための異なる方法をテストします。
    Bart van Hoekelenの優れたツールを使って実行時間を測定しました。
    以上はphpがシナリオの性能の4つの技巧の詳しい内容を高めて、更にphpに関してシナリオの性能の資料を高めます。