2012-01-24 89 views
0

我有一个脚本,我认为它是非常基本的抓取,可以称它为你,但平均需要至少6秒......是否有可能加速它? $ date变量仅用于计时代码,并且不会为其花费的时间添加任何重要内容。我设置了两个定时标记,每个定时标记之间大约3秒钟。例如下面的网址进行测试我如何加快速度?

$date = date('m/d/Y h:i:s a', time()); 

echo "start of timing $date<br /><br />"; 

include('simple_html_dom.php'); 

function getUrlAddress() 
{ 
$url = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http'; 
return $url .'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
} 

$date = date('m/d/Y h:i:s a', time()); echo "<br /><br />after geturl $date<br /><br />"; 

$parts = explode("/",$url); 

$html = file_get_html($url); 

$date = date('m/d/Y h:i:s a', time()); echo "<br /><br />after file_get_url $date<br /><br />"; 

$file_string = file_get_contents($url); 
preg_match('/<title>(.*)<\/title>/i', $file_string, $title); 
$title_out = $title[1]; 

foreach($html->find('img') as $e){ 

    $image = $e->src; 

    if (preg_match("/orangeBlue/", $image)) { $image = ''; } 

    if (preg_match("/BeaconSprite/", $image)) { $image = ''; } 

    if($image != ''){ 

    if (preg_match("/http/", $image)) { $image = $image; } 

    elseif (preg_match("*//*", $image)) { $image = 'http:'.$image; } 

    else { $image = $parts['0']."//".$parts[1].$parts[2]."/".$image; } 

    $size = getimagesize($image); 
    if (($size[0]>110)&&($size[1]>110)){ 
    if (preg_match("/http/", $image)) { $image = $image; } 
    echo '<img src='.$image.'><br>'; 
    } 
    } 
    } 

$date = date('m/d/Y h:i:s a', time()); echo "<br /><br />end of timing $date<br /><br />"; 

例如URL

UPDATE

这是实际的标记显示什么时间:

时间2012年1月24日12时31分50秒开始am

geturl之后01/24/2012 12:31:50 am

时机file_get_url 2012年1月24日上午12点31分53秒

结束后的2012年1月24日上午12时31分57秒

http://www.ebay.co.uk/itm/Duke-Nukem-Forever-XBOX-360-Game-BRAND-NEW-SEALED-UK-PAL-UK-Seller-/170739972246?pt=UK_PC_Video_Games_Video_Games_JS&hash=item27c0e53896` 
+0

你在哪里调用'getUrlAddress()'和/或设置'$ url'变量? – Phil

+0

你有3个时间标记。你能显示他们输出的内容吗?因此,“开始计时”,“geturl之后”,“file_get_url之后”,“计时结束” –

+0

有一点很突出,那就是你自由使用'preg_match'。有时'strpos'或'strstr'可以更快。正如@Hans所说,'getImageSize()'也是值得关注的东西。 –

回答

1

这也许是和getimagesize功能 - 它会和获取页面上的每个图像,以确定其大小。也许你可以用curl编写一些东西来获取仅用于内容大小的标题(尽管实际上,这可能是getimagesize所做的)。

无论如何,回到当天我写了一些蜘蛛,这样做的速度很慢,网络速度比以往任何时候都要好,它仍然是每个元素的获取。我甚至不关心图像。

+0

是的,'getImageSize()'是问题的一部分。我有一个脚本做类似的事情,并且我也遇到了与该函数相同的问题 –

1

我不是一个PHP的家伙,但它就像你走出去到网上来获取文件两次...

首先使用这看起来对我说:

$html = file_get_html($url); 

然后再次使用这样的:

$file_string = file_get_contents($url); 

所以,如果每个命中需要几秒钟,你也许能找到一个方法来削减下来到一个单一的网络命中,以减少你的时间。

要么这样,要么我是盲人。这是一个真正的可能性!