2009-09-04 3 views
0

많은 여러 번 나는 단지 그것을 내가 위 또는 성능 경우이 방법을 일을 계속하는 것이 더 있다면 난 그냥 알고 싶어이PHP에서 잘못 될 필요는없는 함수에 코드를 래핑하고 있습니까? 한 페이지에

처럼 PHP에서 값을 게시물을 설정하고 얻을해야합니다 아래 코드와 같은 함수에 그것을 추가함으로써 다루지 않을 것입니다.

이렇게하면 코드를 작성하는 것이 훨씬 쉬울 것이지만 페이지에서 추가 함수 호출을해야합니다. 내가 그렇게 빨리 가능한 코드를 만드는 세상의 모든 시간이

가 어떤 조언에 감사 드리며 중 차종에 대해 아무것도 만족하지 "개발에 쓸 수 easiar 또는 빠르게"그것을 만드는 나에게 더 중요하다 그것은 쉽게 당신은 아마 함수로 포장하지에서 성능 이점을 얻을 것이다

<?php 
function arg_p($name, $default = null) { 
    return (isset($_GET[$name]))?$_GET[$name]:$default; 
} 

$pagesize = arg_p('pagesize', 10); 

$pagesize = (isset($_GET['pagesize'])) ? $_GET['pagesize'] : 10; 

?> 
+0

시간이 오래 걸리지 만 버그 수정이나 새로운 기능 추가에 소비 하시겠습니까? 유지 관리 가능성! – Greg

+7

추가 함수 호출의 성능 오버 헤드에 대해 심각하게 염려합니까?이미 데이터베이스, http 요청, 축소, 압축 및 캐싱 문제를 모두 해결하셨습니까? – jfar

+0

@jfar는 결코 걱정하지 않는다고 말했지 만, 70 % 느린 것은 사실을 무시하고 똑바로서는 것을 알아 차릴 가치가 있습니다. 먼저 응용 프로그램의 크기와 트래픽에 대해 더 알 필요가 있습니다. – JasonDavis

답변

4

세계에서 항상 명이있는 경우, 왜 테스트하지 않으시겠습니까? 내 컴퓨터에

<?php 
// How many iterations? 
$iterations = 100000; 

// Inline 
$timer_start = microtime(TRUE); 
for($i = 0; $i < $iterations; $i++) { 
    $pagesize = (isset($_GET['pagesize'])) ? $_GET['pagesize'] : 10; 
} 
$time_spent = microtime(TRUE) - $timer_start; 
printf("Inline: %.3fs\n", $time_spent); 

// By function call 
function arg_p($name, $default = null) { 
    return (isset($_GET[$name])) ? $_GET[$name] : $default; 
} 

$timer_start = microtime(TRUE); 
for($i = 0; $i < $iterations; $i++) { 
    $pagesize = arg_p('pagesize', 10); 
} 
$time_spent = microtime(TRUE) - $timer_start; 
printf("By function call: %.3fs\n", $time_spent); 
?> 

이 거의 10 배 인라인 실행에 찬성 꽤 명확한 결과를 제공하지만 당신은 정말 통지 반복을 많이해야합니다.

(난 아직도 내가 대답 경우에도이 내가 낭비 할 시간이 있음을 보여줍니다하지만 함수를 사용하는 것)도에 천 개 통화와

+0

덕분에 그 대신 함수를 사용하여 약 70 %의 속도 저하를 보여줍니다. 대규모 시스템에서 나는 주목할만한 가치가 있다고 생각한다. – JasonDavis

+2

@ jasondavis : 그 자체로는 70 %는 알아 차릴 가치가 있지만 그 총 호출 시간 중 얼마나 많은 부분이 호출에 의해 사용 되는가? 2 % 이상이라면 더 큰 문제가 생길 것입니다. 사실 내가 염려한다면 아마 스크립트 시작 부분에서 내 GET 매개 변수를 '표준화'한 다음 거기에서 직접 GET에서 드래그하여 (즉, 이해할 수 있다면) 단일 함수를 제안 할 것입니다. 기본적으로 GET 배열에 기본값이 올바르게 채워 졌는지 확인한 다음 다시 테스트하지 마십시오. – Narcissus

3

물론) = 내가 여기에 순수한 성능을 이야기하고, 개발. 그러나 눈에 띄는가? 그렇지 않아.

절약 할 수있는 CPU 리소스는 소량에 불과합니다.

0

성능은 실제로 영향을받지 않지만, html 스트림에서 코드를 취하는 모든 것이 더 좋습니다.

2

나는 당신이 그것을 수백 배로하지 않는 한 눈에 띄는 속도의 차이를 의심한다.

2

함수 호출은 성능에 영향을 미치지 만 유지 관리 가능성에 대해서도 고려해야합니다. 함수에서 값을 래핑하면 이후 변경 사항을 쉽게 처리 할 수 ​​있습니다 (복사 붙여 넣기가 좋지 않음).

+0

StackOverflow가 4chan가 아닙니다. –

+0

글쎄, 난 정말 4chan에 가본 적이 없어. 그러나, "copypasta"가 그렇게 나쁘다면, 나는 그것을 바꿀 것입니다. –

+1

"copypasta"는 (는) 4chan, btw 앞에 존재합니다. 그게 잘못이 아니야. –

0

arg_p() 당신은 혼자 할 수 — 측정 할 수 없을 것입니다 고지 — 성능 차이. 여분의 "인라인"코드를 입력하는 시간과 모든 인라인 사본에 변경 사항을 복제해야 할 때마다 지출 할 시간을 더한 시간과 오타 또는 임의 오류의 복잡성과 높은 확률은 측정 할 수없는 것보다 많은 비용이들 것입니다 성능 개량. 사실, 그 시간은 데이터베이스 설계 개선, 생성 시간에 실제로 영향을 미치는 영역을 찾기위한 코드 프로파일 작성 등과 같이 실제로 중요한 것을 최적화하는 데 소요될 수 있습니다 ...

코드 정리. 정말 중요한 것을 최적화하는데 시간을 절약 할 수 있습니다.

관련 문제