我用这样的三个函数来支持php:
public function a($html,$text)
{
//blaa
return array();
}
public function b($html,$text){
//blaa
return array();
}
public function c($html,$text){
//blaa
return array();
}
require_once 'simple_html_dom.php';
$a=array();
$html=new simple_html_dom();
$a=$this->a($html,$text);
$b=$this->b($html,$text);
$c=$this->c($html,$text);
$html->clear();
unset($html);
$a=array_merge($a, $c);
$a=array_merge($a, $b);
a($html,$text)
在给出结果前需要5秒
b($html,$text)
在给出结果前需要10秒
c($html,$text)
在给出结果前需要12秒
因此系统需要27秒才能给我一个结果,但我希望在12秒内获得结果。我不能使用线程,因为我的托管不支持线程。我该如何解决这个问题?
答案 0 :(得分:4)
PHP不支持开箱即用。如果你真的想这样做,你有两个基本选择(是的,它会变脏)。如果您需要一个严肃的解决方案,具体取决于您的实际用例,还有另一种选择需要考虑。
选项1:使用一些AJAX-trickery 使用按钮创建一个页面,该按钮触发对要调用的不同功能的三个AJAX调用。
选项2:运行命令 如果您使用的是UNIX,则可以从PHP脚本中触发命令来运行PHP脚本(php xyz.php),并在不同的线程上运行它。
严重选项:使用队列 说真的:使用像rabbitMQ或BeanstalkD这样的队列系统来做这些事情。 Laravel开箱即用。
答案 1 :(得分:3)
如果等待时间是由阻塞IO(等待服务器响应)引起的,那么curl_multi可能会有所帮助。
但是,根据您发布的代码,它看起来不像是您的问题。
看起来更像简单的html dom需要很长时间来解析你的HTML。这并不太令人惊讶,因为它不是一个非常好的图书馆。如果是这种情况,您应该考虑切换到DomXPath。
答案 2 :(得分:1)
你可能想看看jQuery延迟对象.... $。应该处理这种情况。