私は最近、通常は100kB +文字列に何千ものチェックがあるため、ターゲット文字列を解析するためには数秒(> 10秒)を要するPHPベースのアプリケーションを構築しました。私は実行時間を短縮する方法を探しています。各PHPの "組み込み"関数の記述に使用されるアルゴリズムはどこにありますか?
PHPの「組み込み」関数のそれぞれがどのように書かれているのだろうかと思い始めました。たとえば、マニュアル(thisリンク)にあるstrpos()
の参照に行くと、多くの情報がありますが、アルゴリズムはありません。
特定のアプリケーションの組み込み関数より高速な関数を書くことができますか?しかし、私はアルゴリズムなどを知る方法がない。 strpos()。
function strposHypothetical($haystack, $needle) {
$haystackLength = strlen($haystack);
$needleLength = strlen($needle);//for this question let's assume > 0
$pos = false;
for($i = 0; $i < $haystackLength; $i++) {
for($j = 0; $j < $needleLength; $j++) {
$thisSum = $i + $j;
if (($thisSum > $haystackLength) || ($needle[$j] !== $haystack[$thisSum])) break;
}
if ($j === $needleLength) {
$pos = $i;
break;
}
}
return $pos;
}
か、それがために、その後、針の発生のために)のがsubstr_countの組み合わせ(言わせて、はるかに遅いメソッドを使用して、出現> 0の場合になります。このアルゴリズムは、このいずれかの方法を使用していますループ、またはいくつかの他の方法?
私は自分のアプリケーションで関数とメソッドをプロファイリングし、このように大きな進歩を遂げました。また、this投稿は本当にあまり役に立たないことに注意してください。 PHPの各組み込み関数に使用されているアルゴリズムはどこで知ることができますか?この情報は独自のものですか?
ソースコードhttps://github.com/php/php-src –
たとえば、 '/ ext/standard/stringの' PHP_FUNCTION(strpos) 'を検索すると' strpos() 'が見つかります.c' – Arnauld
PHPはオープンソースです。あなたはコアのすべてをかなり調べることができます。 –