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

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

有什么想法吗?

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

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

如果您确实多次为相同的值调用Zend_Registry,那么您实际上是在一遍又一遍地做相同的事情。

地方本身的内部运作也可能存在一些"更深层次"的差异。您使用的是基于UTF-8的区域设置还是什么?这一点非常重要,因为有些区域可能包含比其他区域多得多的符号。特定操作系统上的这组区域设置也可能存在特定的已知/未知问题。你在什么操作系统下运行这个?

我自己刚刚达到了这个性能指标。。没有变通办法。除了使用缓存,最好使用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相关的内容。

相关内容

  • 没有找到相关文章

最新更新