PHP에서 타입 힌팅의 성능 오버 헤드는 얼마나 중요한가? 사용 결정 여부에 대해 고려해야 할 중요성이 있습니까?PHP에서 타입 힌트의 성능 오버 헤드는 무엇입니까?
답변
아니요, 중요하지 않습니다. 사운드 프로세싱이나 3D 프로그래밍과 같이 알고리즘 집약적 인 작업을 수행해야한다면 다른 프로그래밍 언어를 사용해야합니다. 내 컴퓨터는 하드 데이터를 원하는 경우, 벤치 마크를 만들
...
<?php
function with_typehint(array $bla)
{
if(count($bla) > 55) {
die("Array to big");
}
}
function dont_typehint($bla)
{
if(count($bla) > 55) {
die("Array to big");
}
}
function benchmark($fn)
{
$start = microtime(TRUE);
$array = array("bla", 3);
for($i=0; $i<1000000; $i++) {
$fn($array);
}
$end = microtime(TRUE);
return $end-$start;
}
printf("with typehint: %.3fs\n", benchmark("with_typehint"));
printf("dont typehint: %.3fs\n", benchmark("dont_typehint"));
는 성능은 동일합니다. 때로는 빨리와, 때로는 typehinting없는 : 당신은 예를 들어, 간단한 bechmark을 만들어 답을 찾을 수 있습니다
$ php Documents/type_hinting.php
with typehint: 0.432s
dont typehint: 0.428s
$ php Documents/type_hinting.php
with typehint: 0.414s
dont typehint: 0.416s
별도의 파일 (아마도 네임 스페이스/자동로드)의 클래스 계층 구조와 관련된보다 현실적인 시나리오는 무엇입니까? – Alastair
내 예제는 형식 힌팅의 영향을 과대 평가한다는 점에서 비현실적입니다. 예제에서는 1) 타입 힌팅, 2) 함수 호출 (with_typehint), 3) 다른 함수 호출 (count), 4) 비교, 5) "암시 적"return 문이 있습니다. 내 코드의 20 %는 타입 힌팅의 영향을받습니다. 현실적인 예에서 시간 낭비되는 시간의 1 % 미만이 유형 힌팅이 발생하는 장소에있을 것이므로 차이를 훨씬 더 줄일 수 있습니다. tl; dr : 예를 들어 시간차를 측정 할 수없는 경우 현실적인 예에서도 시차를 측정하지 않습니다. – Michael
@Alastair 확실하지 않으면 다른 테스트를 작성하십시오. 하지만 IMHO 이것은 낭비되는 시간입니다. – Michael
:
내 컴퓨터에서 1 개 000 000 루프에 대한$test1 = function(stdClass $obj){};
$test2 = function($obj){};
$begin = microtime(true);
for ($i = 0; $i < 1000000; $i++){
$test1(new stdClass);
}
$end = microtime(true);
$timeElapsedTest1 = $end - $begin;
$begin = microtime(true);
for ($i = 0; $i < 1000000; $i++){
$test2(new stdClass);
}
$end = microtime(true);
$timeElapsedTest2 = $end - $begin;
echo 'difference: ', $timeElapsedTest1 - $timeElapsedTest2;
차이
1. 0.0994789600372 ms
2. 0.0944871902466 ms
3. 0.103265047073 ms
4. 0.0899112224579 ms
5. 0.0860922336578 ms
6. 0.0973558425903 ms
7. 0.0905900001526 ms
8. 0.0891189575195 ms
9. 0.09983086586 ms
10. 0.0914621353149 ms
stdClass
을 array
으로 바꾼 후 내 컴퓨터의 1 000 000 루프의 차이가 약간 변경되었습니다.
1. 0.00209307670593 ms
2. 0.00217390060425 ms
3. 0.00558805465698 ms
4. 0.00264406204224 ms
5. 0.00367116928101 ms
6. 0.00262594223022 ms
7. 0.00353169441223 ms
8. 0.00217604637146 ms
9. 0.00049090385437 ms
10. 0.002516746521 ms
- 1. Popen의 성능 오버 헤드는 파이썬
- 2. 중첩 함수의 성능 오버 헤드는 무엇입니까? 파이썬
- 3. D에있는 속성의 오버 헤드는 무엇입니까?
- 4. Actionscript 3에서 Proxy를 사용할 때의 성능 오버 헤드는 무엇입니까?
- 5. MVC3 페이지에서 RenderPartial을 포함하는 오버 헤드는 무엇입니까
- 6. Entity Framework 추적의 오버 헤드는 무엇입니까?
- 7. LINQ를 사용할 때 데이터베이스 성능 오버 헤드는 얼마나됩니까?
- 8. iPhone보기 컨트롤러 계층 구조의 오버 헤드는 무엇입니까?
- 9. "동기화 된"비동기 메서드의 오버 헤드는 무엇입니까?
- 10. 객체는 어떻게 전달되고 관련 오버 헤드는 무엇입니까?
- 11. Castle Active Record의 오버 헤드는 무엇입니까?
- 12. 모드 전환에 포함 된 오버 헤드는 무엇입니까
- 13. MongoDB를위한 Java ORM의 오버 헤드는 무엇입니까
- 14. 불필요한 #import 지시문의 오버 헤드는 무엇입니까?
- 15. [Lucene] IndexReader/Searcher의 오버 헤드는 무엇입니까
- 16. Hornetq의 소비자가 없을 때의 오버 헤드는 무엇입니까?
- 17. CakePHP의 routes.php 오버 헤드는 어떻습니까?
- 18. OpenGL에서 지속적으로 새로운 텍스처를 GPU에 업로드하는 오버 헤드는 무엇입니까?
- 19. Julia v0.5의 여러 가지 병렬 처리의 오버 헤드는 무엇입니까?
- 20. 오브젝트를 래핑 할 때 실제 오버 헤드는 얼마입니까?
- 21. SQL Server 2008에서 TDE의 성능 오버 헤드
- 22. numpy tolist()가 추가하는 오버 헤드는 얼마나됩니까?
- 23. 파일 당 복사 오버 헤드는 어떻게 계산합니까?
- 24. 가상 함수 호출 오버 헤드는 어디에 있습니까?
- 25. Monodroid가 앱에 추가하는 오버 헤드는 얼마나됩니까?
- 26. 카프카의 최소 레코드 오버 헤드는 얼마입니까?
- 27. 2d 그래픽에서 대상에 렌더링 한 다음 화면에 렌더링 할 때의 성능 오버 헤드는 무엇입니까?
- 28. 원시 SQL 실행 시간과 비교하여 Entity Framework의 성능 오버 헤드는 무엇입니까?
- 29. 소켓을 무한정 열어두기위한 3g 연결의 오버 헤드는 무엇입니까
- 30. Clojure에서`let '을 구현하는 방법과 그 오버 헤드는 무엇입니까?
아니요. 진지하게. 타입 힌트를 사용하지 않았기 때문에 런타임에 유형 힌팅이 발생하지 않으므로 잡히지 않은 버그를 수정하는 데 더 많은 시간을 할애 할 수 있습니다. 당신이 정말로 알고 싶다면 벤치 마크하십시오. – deceze
유형 힌트는 코드를 체계화하기위한 것입니다. 주저하지 말고 사용하십시오. 벤치마킹 시간을 낭비하지 마십시오. – Ibu
평균적인 차이는 없습니다 : http://3v4l.org/lWgY6/perf#tabs, http://3v4l.org/110SL/perf#tabs – deceze