2013-07-05 3 views
0

여러 언어로 액세스 할 수있는 웹 사이트가 있고 다른 로캘로 내 페이지로드 시간에 이상하게 보입니다. 다음은 중요한 페이지 중 하나의로드 시간입니다. 이 코드를 제거하고 단지 서식 화되어 있지 않은 숫자를 반환하는 경우Zend_Locale_Format :: toNumber 네덜란드어로 매우 느림

$format_number = Zend_Locale_Format::toNumber(
     $number, 
     array('precision' => 2 , 'locale' => Zend_Registry::get('Zend_Locale')) 
    ); 

가, 3 로케일이 동시에 약에서 페이지를 렌더링 :

en_GB = 469ms 
fr_BE = 545ms 
nl_BE = 1.45s 

이미 차이가이 코드에 의해 발생되는 것을 파악 . (+/- 500ms) 이 페이지에는 서식이 필요한 숫자가 있으므로 심각한 영향을 미칩니다.

나는 이것을 꽤 오랫동안보고 있었지만 해결책이나 해결책을 찾을 수는 없었다.

아이디어가 있으십니까?

답변

0

해당 페이지에서 Zend_Registry::get('Zend_Locale') 번을 여러 번 호출 하시겠습니까? 아니면 한 번만 호출합니까? 페이지에 서식을 지정할 번호가 꽤 많다고하셨습니다. 번 페이지의 시작 부분에 또는 컨트롤러에 변수에 레지스트리 값을 설정하십시오 :

$currLocale = Zend_Registry::get('Zend_Locale'); 

당신은 실제로 당신이 본질적으로 이상 같은 일을하고 같은 값을 Zend_Registry 여러 번 호출하는 경우 그리고 다시.

로캘 자체의 내부 동작간에 "더 깊은"차이가있을 수도 있습니다. UTF-8 기반 로케일을 사용하고 있습니까? 어떤 로케일은 다른 것보다 더 많은 기호를 포함 할 수 있으므로 이는 매우 중요합니다. 특정 OS에서이 로케일 집합과 관련된 알려진/알 수없는 특정 문제가있을 수도 있습니다. 이 OS를 실행중인 OS는 무엇입니까?

+0

예, 저는 :: 더 많은 것을 한 번 불러주세요. 나는 플러그인과 프리 디스패치를 ​​사용하여 그것을 설정한다. 그럼 내가 필요할 때마다 부르지. 이 경우보기 도우미에서 필요합니다. 따라서 Zend_View_Helper_Numbers가 호출 될 때마다 :: get도 호출됩니다. 그러나 다시, Zend_Registry의 바로 그 이유가 아닌가? 그 순간 다른 수업에서 데이터를 사용할 수있게하려면? 게다가, 그들은 종종 en_GB라고 불리는 다음 nl_BE에 호출됩니다. 나는 실제로 UTF-8을 사용하고있다. – Peter

0

나는이 퍼포먼스 호크를 직접 쳤다. 아무런 해결 방법이 없다. APC 백엔드와 함께 캐시를 사용하는 것을 제외합니다. 파일 기반 캐시가 도움이되지 못했습니다. 당신은 (어딘가에 부트 스트랩에서)이 설정을 시도 할 수 있습니다 :

$frontendOptions = array(
     'lifetime' => null,     // no expiration 
     'automatic_serialization' => false // this is the default anyways 
    ); 

    $backendOptions = array('cache_dir' => SITE_ROOT.'/cache'); 

    $cache = Zend_Cache::factory('Output','File',$frontendOptions,$backendOptions); 

    Zend_Locale::setCache($cache); 

는 아마 당신을 위해 도움이 될 것입니다.

나를 위해, 날짜 형식 및 숫자 서식은 로컬로 3.5 초 걸립니다. 이 파일들을 비활성화하면 페이지를 가져 오는 데 1 초가 걸립니다. 그렇지 않으면 ~ 4.5 초 (파일 캐시가 활성화되고 SSD 하드 드라이브가 사용됨).

P. Zend_Locale 캐시는 숫자 포맷과 모든 로케일 관련 사항에 다시 사용됩니다.