0

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

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 个语言环境大约会在同一时间呈现页面。(+/- 500 毫秒)我有很多数字需要在此页面上进行格式化,因此会产生严重影响。

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

有任何想法吗?

4

2 回答 2

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 硬盘驱动器)。

PS Zend_Locale 缓存被重用于数字格式化和所有与 Locale 相关的东西。

于 2013-08-21T13:01:54.627 回答
0

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

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

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

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

于 2013-07-06T11:18:01.837 回答