Zend Locale Format ::荷兰语语言环境中的数字非常慢

时间:2013-07-05 15:23:00

标签: zend-framework zend-locale

我有一个可以使用多种语言访问的网站,而且我的页面加载时间与不同的语言环境有些奇怪。以下是一个更重要的页面的加载时间作为示例。

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) 我有相当多的数字需要在此页面上进行格式化,因此会产生严重影响。

我已经看了很长时间了,但找不到解决方案,甚至找不到解释。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您是在该页面上多次调用Zend_Registry::get('Zend_Locale')还是仅调用一次? 你说你在那个页面上有很多数字要格式化。 尝试在页面开头甚至控制器中将注册表值设置为变量:

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

如果你确实多次为同一个值调用Zend_Registry,那么你一遍又一遍地做同样的事情。

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

答案 1 :(得分:0)

我自己也很好地击中了这个性能猪......没有解决方法。 除了使用缓存外,最好使用APC后端。基于文件的缓存对我没有帮助。 你可以尝试设置它(在bootstrap中的某个地方):

    $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相关的内容。