Как я могу ускорить это? - PullRequest
0 голосов
/ 24 января 2012

У меня есть сценарий, который, я думаю, довольно простой, называйте его как хотите, но в среднем это занимает не менее 6 секунд ... можно ли его ускорить? Переменные $ date предназначены только для синхронизации кода и не добавляют ничего существенного ко времени, которое требуется. Я установил два маркера синхронизации, и каждый из них составляет примерно 3 секунды. Пример URL ниже для тестирования

$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

Это то, что показывают временные метки:

начало отсчета времени 24.01.2012 12:31:50

после geturl 24.01.2012 12:31:50

после file_get_url 24.01.2012 00:31:53

конец времени 24.01.2012 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`

Ответы [ 2 ]

1 голос
/ 24 января 2012

Я не парень по PHP, но мне кажется, что вы выходите в Интернет, чтобы получить файл дважды ...

Сначала используйте это:

$html = file_get_html($url);

Затем снова с помощью этого:

$file_string = file_get_contents($url);

Так что, если каждое попадание занимает пару секунд, вы можете сократить время, найдя способ сократить это до одного попадания в сеть.

Либо так, либо я слепой. Что является реальной возможностью!

1 голос
/ 24 января 2012

Вероятно, это функция getimagesize - она ​​собирается и выбирает каждое изображение на странице, чтобы определить размер.Может быть, вы можете написать что-то с помощью curl, чтобы получить заголовок только для Content-size (хотя, на самом деле, это может быть то, что делает getimagesize).

В любом случае, в тот день, когда я написал несколько пауков,что-то вроде медленного, со скоростью интернета лучше, чем когда-либо, это все еще выборка для каждого элемента.И я даже не имел отношения к изображениям.

...