我有一个可以使用多种语言访问的网站,而且我的页面加载时间与不同的语言环境有些奇怪。以下是一个更重要的页面的加载时间作为示例。
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 :(得分: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相关的内容。