2014-09-30 2 views
0

워드 프레스 테마와 프레임 워크 많은에서 내가 코드 줄을 발견, 함수를 여러 번 호출 또는 반환 값을 저장 :성능 현명한

<!--[if lt IE 7]><html <?php language_attributes(); ?> class="no-js lt-ie9 lt-ie8 lt-ie7"><![endif]--> 
<!--[if IE 7]><html <?php language_attributes(); ?> class="no-js lt-ie9 lt-ie8"><![endif]--> 
<!--[if IE 8]><html <?php language_attributes(); ?> class="no-js lt-ie9"><![endif]--> 
<!--[if gt IE 8]><!--> <html <?php language_attributes(); ?> class="no-js"><!--<![endif]--> 

가 내가 생각 language_attributes()에 대한 여러 통화를 발견하는 것은도에 대한 지출 불필요한 시간 그래서 요청하기로 결정

<?php ob_start(); language_attributes(); $language_attributes = ob_get_clean(); ?> 

<!--[if lt IE 7]><html <?php echo $language_attributes; ?> class="no-js lt-ie9 lt-ie8 lt-ie7"><![endif]--> 
<!--[if IE 7]><html <?php echo $language_attributes; ?> class="no-js lt-ie9 lt-ie8"><![endif]--> 
<!--[if IE 8]><html <?php echo $language_attributes; ?> class="no-js lt-ie9"><![endif]--> 
<!--[if gt IE 8]><!--> <html <?php echo $language_attributes; ?> class="no-js"><!--<![endif]--> 

<?php unset($language_attributes); ?> 

language_attributes() 여러 번 호출 피하기 위해,하지만 더 나는 더 내가 내 결정을 의심하는 첫 번째 패턴의 사용을 참조하십시오 이와 같은 간단한 기능은, 그래서 나는이 코드를 사용 전문가의 의견 에.

그래서

, 여기 내 질문입니다 : 넓은 측면에서

-이 특정 기능에 국한되지 - 함수를 통해 여러 번 함수를 호출의 장점은 무엇 정확한마다

을 할 경우 반환 값을 저장 하시겠습니까?

처럼, 런타임 않도록 함수 호출 내가 반환 값을 저장하지 않아도이 방법의 캐싱 php의 일부 숨겨진 캐싱 메커니즘이있다.

+1

워드 프레스는 성능이 정확히 알려지지 않았습니다. * –

+0

성능면에서 웹 사이트의 프로필을 작성하고 문제의 원인을 수정해야합니다. 다음과 같은 좋은 이유가없는 한 (예 : 느린 경우) 위와 같은 내용을 고집해서는 안됩니다. –

+0

자신 만의 글을 쓰고 싶다면이 방법을 사용하지 않겠지 만 유연성을 발휘하고 모든 광고를 수용하기를 원하면 템플리트 링 등이 때때로 일어날 것입니다. 삶의 장단점 중 하나 인 –

답변

1

가 직접적 내가 할 수있는 귀하의 질문에 대답하기 위해, 달려있다. 함수가 성능 비용으로 매번 똑같은 일을합니까? 함수가 저장 장치를 건드리지 않고 쉽게 계산할 수있는 값을 캐싱/반환합니까? 그것은 opcached 또는 달리 런타임 캐시 될 것인가? 이들 모두는 통화에 대한 귀하의 결정에 영향을 미칩니다.

그 외에도 더 많은 질문이 있습니다. 왜이 전화에 관심이 있니? 그 영향을 측정 했습니까? 더 높은 알갱이를 측정 했습니까? 스택의 다른 부분들? 당신이 아무것도 측정하지 않았다면, 더 효과적인 최적화가 될 것입니다.

이 모든 것이 말하면 조기 최적화라고 생각할 수 있습니다. 이 주제를 광범위하게 다루고 경로에서 도움이 될 The Mature Optimization Handbook을 권장합니다.

+0

OK이 특정 호출이 내 유일한 관심사는 아니라는 말로 시작하겠습니다. 함수가 정확히 매번 함수 호출의 런타임 캐싱을 수행하는'php '에 숨겨진 캐싱 메커니즘이있을 때입니다. 그래서이 방법은 내가 반환 값을 저장할 필요가 없어? – Aboalnaga

+0

고마워요,이 책의 참고서 때문에 실제로 많이 도움이 될 것 같습니다. 당신의 대답은 제가 요구 한 것을 만진 유일한 것입니다. 누가 당신을 뽑았는지, 그리고 무엇을 위해, 나는 그것을 바랬습니다. 함수 호출을위한'php' 런타임 캐싱에 대한 특정 지식을 가지고 있을지 모르지만 큰 도움이 될 것입니다. – Aboalnaga

+0

@ Bonga : 질문을 편집하기 전에'get_language_attributes()'를 찾고있는 것처럼 보입니다. 새 편집 내용이 "더 넓은 측면에서", "숨겨진 캐싱 메커니즘"으로 추가되었습니다. – AbraCadaver

1

뒤얽힌 Wordpress 코드 체인 (Wordpress가 싫어)을 따르지 않으면 알 수있는 방법이 없습니다. 함수를 실제로 호출하면 분명히 시간이 추가되지만 무시할 수는 있지만이 함수 호출은이 경우 적어도 두 개의 다른 함수 호출을 실행합니다.

함수 중 상당 부분 (파일, 루핑, 광범위한 정규식 등을 포함하여 데이터베이스 쿼리)을 수행하는 경우 성능 문제가 발생할 수 있습니다.

일반적으로 모범 사례에서 모든 기능이 무엇을하는지 모르는 경우에는 한 번만 호출하는 것이 가장 좋습니다. 물론 전화를 통해 돌아 오는/결과가 변경 될 가능성이있는 경우가 아니라면 다른 정보가 필요합니다.

$language_attributes = get_bloginfo('language'); 

를 또는 작동하는 방법 :

사용을 할 수

$language_attributes = str_replace('_', '-', get_locale()); 

Function Reference/get bloginfo

+0

사실'language_attributes' 함수는 그 이상의 기능을 수행하며 플러그인의 적용된 필터도 있습니다 – Aboalnaga

+0

OP 편집 이전의 대답의 일부였습니다. – AbraCadaver