나는 일반적으로 일반적으로 100kB + 문자열에 수천 개의 수천 개의 검사가 있으므로 대상 문자열을 구문 분석하기 위해 (> 10 초) 여러 (> 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는 오픈 소스입니다. 핵심에서 거의 모든 것을 검사 할 수 있습니다. –