Медленный рост - PullRequest
       15

Медленный рост

1 голос
/ 31 августа 2010

Мне нужно показать несколько сообщений на моем сайте. Эти посты объединяют внутренние и внешние посты. Внешние сообщения периодически импортируются и сохраняются в моей БД с помощью cronjob.

Перед показом постов извлекаю текст из всего HTML. Кроме того, я пытаюсь найти первое изображение, содержащееся в посте, продолжая, пока не найду изображение, высота и ширина которого соответствуют моим требованиям. (Я показываю только небольшую версию текста и одну картинку из поста в качестве тизера)

Чтобы найти наиболее подходящую картинку, я использую getimagesize, но, к сожалению, это часто создает время выполнения PHP в несколько секунд!

Как я могу ускорить мою функцию ниже? Я отчаянно нуждаюсь в подсказках и хороших способах настройки !!

Заранее спасибо

//extract text without tags from blog post
$content = str_get_html("".$post_text."")->plaintext;

$max_width = 475;
$picture_id = 0;

//fetch images from blog post
foreach($html->find('img') as $e) {

//get picture attributes
list($width, $height, $type, $attr) = getimagesize((is_absolute_url($e->src) ? $e->src : $_SERVER['DOCUMENT_ROOT'].$e->src));

//adjust image width & height, so it's the size of the page
$new_width = $max_width;
$new_height = $new_width / $width * $height;

//find percentage of current width versus max width
$percentage = ($width / $max_width) * 100;

    //select picture for display and resizing if the picture is large enough (we don't want to stretch it too much)
    if($percentage >= 60) {

        $e->width = $new_width;
        $e->height = $new_height;

        $picture = array('src' => $e->src, 'width' => $e->width, 'height' => $e->height);

        //stop after first picture is found :: we only need one per post
        if (++$picture_id == 1) break;

    }

}

Ответы [ 2 ]

4 голосов
/ 31 августа 2010

Причина: Это очень хорошо известная проблема: getimagesize работает медленно на удаленных файлах.

Решение: Рекомендуется сохранить файлы на локальном сервере (временно), а затем выполнить на нем getimagesize.

2 голосов
/ 31 августа 2010

Когда вы передаете URL в качестве параметра для getimagesize, он получает изображение через HTTP, что является медленным процессом.

Вы должны получить его размер только в первый раз и сохранить его в базе данных на будущее.

...