2013-07-05 78 views
0

我有一个网站可以用多种语言访问,而且我在使用不同语言环境的页面加载时出现了一些奇怪的现象。下面是一个比较重要的页面加载时间的例子。Zend_Locale_Format :: toNumber在荷兰语区域设置速度很慢

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

我已经想通了,不同的是通过这个代码导致的:

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

如果我删除此代码,只返回数字未格式化,所有3个区域设置渲染页面大约在同一时间。 (+/- 500ms) 我有很多数字需要在此页面上格式化,因此产生了严重的影响。

我一直在寻找这个相当长的一段时间,但无法找到解决方案,甚至没有解释。

任何想法?

回答

0

您是在该页面上多次呼叫Zend_Registry::get('Zend_Locale')还是仅呼叫一次? 你说你有很多数字要在该页面上进行格式化。 一次尝试在你的页面的开始,甚至在你的控制器设置注册表值给一个变量:

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

如果您确实调用Zend_Registry多次为同一值你基本上做同样的事情并重新开始。

区域设置本身的内部运作之间也可能存在一些“更深”的区别。你使用的是基于UTF-8的区域还是什么?这是非常重要的,因为一些地区可能包含比其他地区更多的符号。特定操作系统上的这组语言环境也可能存在特定的已知/未知问题。你在什么操作系统下运行?

+0

是的,我打电话::获取更多,然后一次。我::使用插件和predispatch设置它。然后,无论何时我需要它,我都会打电话给他在这种情况下,我需要一个视图助手。所以每次调用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秒。如果我禁用了这些,则需要花费大约一秒的时间才能获取页面,否则:约4.5秒(启用文件缓存和SSD硬盘驱动器)。

P.S. Zend_Locale缓存被重用于数字格式和所有Locale相关的事情。