2011-06-02 68 views
2

这是我的代码:Zend_Date的运算tooooooooo慢,很慢

$frontendOptions = array('lifeTime' => 10); 
$backendOptions = array('cacheDir' => '../tmp/');  

$cache = Zend_Cache::factory( 'Core', 
           'File', 
           $frontendOptions, 
           $backendOptions); 

$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions); 

$locale = new Zend_Locale('es_ES'); 
Zend_Registry::set('Zend_Locale', $locale); 
Zend_Locale::setCache($cache); 

$date = new Zend_Date('11-03-2010'); 

脚本减慢,当我尝试创建Zend_Date对象。

我在MAMP(Mac/Snow Leopard)上使用Zend 1.11.5。

有没有人有任何想法如何加快这一点?

+2

你可以量化“慢”好一点吗? – deceze 2011-06-02 02:41:08

+2

您使用的是哪个版本的PHP? PHP 5.3的本地日期对象应该更快。 – 2011-06-02 02:42:30

+0

量化:60秒并计数... \我的PHP版本是5.3,但我真正需要使用的是Zend_Validate_Date,并且测试我发现缓慢的问题需要Zend_Date和Zend_Locale – FreelanceAr 2011-06-02 15:03:30

回答

0

Zend_Date和其他一些Zend类已知很慢。您可以通过使用缓存加速行动Zend_Date的运算后续调用:

$date = new Zend_Date(...); 
.... 
$cachedDate = new Cache($date); 
print $cachedDate->toString(); 

我知道这听起来简单,但如果你只需要一个格式化的定期约会,只是用php's built-in date object。我保证你会看到一个重大的速度差异。

UPDATE:

如果你真的要调整的类来提高性能,this post有几个补丁/你可以申请调整。

+0

'当我脚本变慢尝试创建Zend_Date对象。“---所以'toString()'的缓存在这种情况下不会起作用(假设OP说的是真的) – zerkms 2011-06-02 02:52:09

+0

它不会帮助instanciation,它在post中也是如此。如果他不重用这个对象,那么php的本地类会更好。如果他正在重新使用该对象,缓存是一个有趣的选择。 – stefgosselin 2011-06-02 03:21:52

4

问题是您的缓存寿命确实很低。 Zend_Date使用Zend_Locale解析一些XML(不是很小的),这需要很多很多时间。创建具有极长寿命的特殊缓存实例(或者更好地将其与文件的修改时间绑定)并将其设置为Zend_Date和Zend_Locale。这应该会加速事态的发展。但是使用Zend_Date并不是一个好主意......在订单列表中回显日期。您可以使用

date('d.m.Y', strtotime($timeFromDb)) 

在进行日期计算或其他高级日期事物时,您应该使用Zend_Date。不是简单的选择,除非你需要在任何语言环境中实际回显它:)

+0

实际上,我需要使用Zend_Validate_Date,并且当我尝试使用它时,我停留了超过60秒的等待脚本。然后debbuging我发现缓慢的问题请求Zend_Date和Zend_Locale – FreelanceAr 2011-06-02 14:00:32

+0

这就是关于缓存区域设置和日期与长寿命地区的部分;) – 2011-06-03 22:57:41