Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Долгое выполнение функции, Уменьшение и сохранение картинки 
V
    Опции темы
Blaga
  Дата 10.6.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЛамМер++
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 15.11.2005
Где: г. Иркутск

Репутация: нет
Всего: 4



Доброго времени суток, уважаемые форумчане!
Столкнулся с такой вот проблемой. У меня есть сайт с обоями для рабочего стола, и там в админке есть скрипт для добавления картинок в БД. Так вот там когда добавляеться картинка, создаеться превью для нее. Превью создаю с помощью вот такой вот функции.
Код

  function resize($inputFilename,$name_image,$category)
{
    $imagedata = getimagesize($inputFilename);
    $w = $imagedata[0];
    $h = $imagedata[1];
       $new_w = 138;
       $new_h = $h*$new_w/$w;
    $im2 = ImageCreateTrueColor($new_w, $new_h);
    $image = ImageCreateFromJpeg($inputFilename);
    imagecopyResampled ($im2, $image, 0, 0, 0, 0, $new_w, $new_h, $imagedata[0], $imagedata[1]);
    imagejpeg($im2,"../".$category."/th/displayart_ru_".$name_image."");
    imagedestroy($image);
}



Так вот недавно сделал массовый загрузчик обоин. И теперь эта функция стала медленно работать. (Скорее всего она и раньше долго работала просто я не замечал smile ) подскажите пожалуйста как ее улучшить или убыстрить что бы она работала побыстрее.
А то например она тока одну картинку чуть меньше 30 сек масштабирует smile .
Для полноты картины кусок скрипта где я ее использую.
Код

if(isset($_POST['category']))
{
  function resize($inputFilename,$name_image,$category)
{
    $imagedata = getimagesize($inputFilename);
    $w = $imagedata[0];
    $h = $imagedata[1];
       $new_w = 138;
       $new_h = $h*$new_w/$w;
    $im2 = ImageCreateTrueColor($new_w, $new_h);
    $image = ImageCreateFromJpeg($inputFilename);
    imagecopyResampled ($im2, $image, 0, 0, 0, 0, $new_w, $new_h, $imagedata[0], $imagedata[1]);
    imagejpeg($im2,"../".$category."/th/displayart_ru_".$name_image."");
    imagedestroy($image);
}

    function dbsave_pic($filename, $name_show, $category, $keywords)
    {
        //конектимся к MySQL
        $my_sql = mysql_connect(HOST, LOGIN, PASS) ;
        //Выбираем БД
        mysql_select_db(NAMEDB, $my_sql) ;



        $name_image=time().rand(0,5000).".jpg";
    copy($filename, "../".$category."/img/displayart_ru_".$name_image."");
    //include_once("inc/resize.php");
        resize("../".$category."/img/displayart_ru_".$name_image."",$name_image,$category);

        $im=imagecreatefromjpeg("../".$category."/img/displayart_ru_".$name_image."");
        $color_text1=imagecolorallocate($im,90,90,90);
        $str="DisplayArt.ru";
        imagettftext($im, 10, 0, 10, 20, $color_text1, "inc/MAIAN.TTF", $str);
        imagejpeg($im,"../".$category."/img/displayart_ru_".$name_image."",95);

        $file_size_up= getfilesize("../".$category."/img/displayart_ru_".$name_image."");
        $razrxy=getimagesize("../".$category."/img/displayart_ru_".$name_image."");

        //создаем запрос на добавление
        $my_sql_str = "INSERT INTO ".PREF."paper_".$category." (name, name_show, razr, size, date_add, name_autor, keywords, lasttime) VALUES ('displayart_ru_".$name_image."', '".$name_show."', '".$razrxy['0']."x".$razrxy['1']."', '".$file_size_up."', '".date('d.m.Y')."', 'blaga', '".$keywords."', '".time()."')";
        mysql_query($my_sql_str, $my_sql);
        mysql_query("UPDATE `wall_users` SET walls=walls+1 WHERE login='blaga';",$my_sql);
        mysql_query("UPDATE `wall_img_counter` SET quantity=quantity+1 ;",$my_sql);

        chmod("../".$category."/img/displayart_ru_".$name_image."", 0644);
        chmod("../".$category."/th/displayart_ru_".$name_image."", 0644);


  }
  print_r($_POST);

  for ($i=0; $i<count($_POST['filename']); $i++)
    {
        if($_POST['category'][$i] != "null")
        {
            dbsave_pic($_POST['filename'][$i],$_POST['name_show'][$i],$_POST['category'][$i], $_POST['keywords'][$i]);

    }
    else
    {
     echo "no<br>";
    }

  }
}

Заранее спасибо(+) Всем ответившим, по сабжу. smile


--------------------

http://displayart.ru - Обои.
http://a2themes.ru - Сайт о движках DLE, phpBB3, WordPress.
PM MAIL ICQ   Вверх
MoLeX
Дата 10.6.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 2
Всего: 140



Цитата(Blaga @  10.6.2008,  12:49 Найти цитируемый пост)
Заранее спасибо(+) Всем ответившим, по сабжу.

сабж  smile 


Blaga, что бы понять какое именно место тормозить раставь через ф-цию время выполнения скрипта и погляди.


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
krundetz
Дата 10.6.2008, 13:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: нет
Всего: 69



MoLeX а может не городить агород и использовать профайлер


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
MoLeX
Дата 10.6.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 2
Всего: 140



krundetz, да хоть чем) лишь бы понять какое место в скрипте вызывает нагрузку


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Blaga
Дата 10.6.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЛамМер++
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 15.11.2005
Где: г. Иркутск

Репутация: нет
Всего: 4



krundetz, я не знаю что это такое...

MoLeX, всмысле функция microtime()? Сейчас попробую...


--------------------

http://displayart.ru - Обои.
http://a2themes.ru - Сайт о движках DLE, phpBB3, WordPress.
PM MAIL ICQ   Вверх
MoLeX
Дата 10.6.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 2
Всего: 140



Blaga, да, главное вычисли разницу потом  smile 


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Blaga
Дата 10.6.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЛамМер++
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 15.11.2005
Где: г. Иркутск

Репутация: нет
Всего: 4



получаеться так написал вот такой код
Код

    $t=microtime(true);
        $resii=resize("../".$category."/img/displayart_ru_".$name_image."",$name_image,$category);
        printf(" 1 >> $resii: %.2f c <br />", microtime(true)-$t);

с тремя картинками выдало вот такой результат
1 >> : 0.85 c 
1 >> : 0.84 c 
1 >> : 1.04 c


а потом написал вот так 
Код

  function resize($inputFilename,$name_image,$category)
{
    $imagedata = getimagesize($inputFilename);
    $w = $imagedata[0];
    $h = $imagedata[1];
       $new_w = 138;
       $new_h = $h*$new_w/$w;
$t=microtime(true);
    $im2 = ImageCreateTrueColor($new_w, $new_h);
printf(" 2 >> $im2: %.2f c <br />", microtime(true)-$t);

$t=microtime(true);
    $image = ImageCreateFromJpeg($inputFilename);
printf(" 3 >> $image: %.2f c <br />", microtime(true)-$t);

$t=microtime(true);
    $rre=imagecopyResampled ($im2, $image, 0, 0, 0, 0, $new_w, $new_h, $imagedata[0], $imagedata[1]);
printf(" 4 >> $rre: %.2f c <br />", microtime(true)-$t);

$t=microtime(true);
    $terr=imagejpeg($im2,"../".$category."/th/displayart_ru_".$name_image."");
printf(" 5 >> $terr: %.2f c <br />", microtime(true)-$t);

    imagedestroy($image);
}


вот что вывело

2 >> Resource id #14: 0.00 c 
3 >> Resource id #16: 0.09 c 
4 >> 1: 0.97 c 
5 >> 1: 0.00 c 
1 >> : 1.07 c 
2 >> Resource id #23: 0.00 c 
3 >> Resource id #25: 0.10 c 
4 >> 1: 0.77 c 
5 >> 1: 0.00 c 
1 >> : 0.88 c 
2 >> Resource id #32: 0.00 c 
3 >> Resource id #34: 0.09 c 
4 >> 1: 0.77 c 
5 >> 1: 0.01 c 
1 >> : 0.87 c


Я прошу прощения за такое неудобное представление. 

Насколько я понял тут дольше всех выполняються эти функции
1 >> : 1.07 c 
4 >> 1: 0.97 c 

под цифрой 1 это у меня сама вся функция resize()
а под цифрой два функция imagecopyResampled()
наверное все дело в ней.... smile 



--------------------

http://displayart.ru - Обои.
http://a2themes.ru - Сайт о движках DLE, phpBB3, WordPress.
PM MAIL ICQ   Вверх
Feldmarschall
Дата 10.6.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 2
Всего: 32



30 секунд и 1 секунда - разница в 30 раз.
так сколько времени у тебя выполняется эта команда?
PM   Вверх
Blaga
Дата 10.6.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЛамМер++
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 15.11.2005
Где: г. Иркутск

Репутация: нет
Всего: 4



Собственно что делать то теперь? smile

Добавлено через 1 минуту и 54 секунды
Feldmarschall, весь скрипт с 3 картинками сейчас около полторы минуты. Я сделал вывод что это функция тормозит потому что у меня раньше в php.ini стояло значение на максим. выполнение скрипта 30 сек. я увеличил до 200 и вот теперь пока работает по 3 -4 штуки.

Добавлено через 9 минут и 42 секунды
собственно попробовал грузануть около 40 картинок за 200 сек грузануло тока 5 штук.
Вылезла ошибка 
Fatal error: Maximum execution time of 200 seconds exceeded in Z:\home\dis.lo\www\gamma\ad\add_robot.php on line 51
на 51 строке 
51     $t=microtime(true);
52     $resii=resize("../".$category."/img/displayart_ru_".$name_image."",$name_image,$category);
53    printf(" 1 >> $resii: %.2f c <br />", microtime(true)-$t);


--------------------

http://displayart.ru - Обои.
http://a2themes.ru - Сайт о движках DLE, phpBB3, WordPress.
PM MAIL ICQ   Вверх
Blaga
Дата 10.6.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЛамМер++
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 15.11.2005
Где: г. Иркутск

Репутация: нет
Всего: 4



эм собственно для интереса измерил время функции copy() собственно она то и копирует по 30 сек. 
и тут возникает вопрос. но вначале обрисую ситуацию.
картинки беруться с другого сервака и тащаться сейчас мне на комп. получаеться они качаються сколько то там... а канал у меня узкий 128кбит так вот это наверное изза канала так плохо да?
сосбственно на серваке такого быть не должно?


--------------------

http://displayart.ru - Обои.
http://a2themes.ru - Сайт о движках DLE, phpBB3, WordPress.
PM MAIL ICQ   Вверх
MoLeX
Дата 10.6.2008, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 2
Всего: 140



Цитата(Blaga @  10.6.2008,  14:28 Найти цитируемый пост)
картинки беруться с другого сервака и тащаться сейчас мне на комп. получаеться они качаються сколько то там... а канал у меня узкий 128кбит так вот это наверное изза канала так плохо да?
сосбственно на серваке такого быть не должно? 

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


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Blaga
Дата 10.6.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


ЛамМер++
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 15.11.2005
Где: г. Иркутск

Репутация: нет
Всего: 4



MoLeX, собственно на серваке за 2 минуты управились 23 картинки. А это все какие были. Так что все хорошо. smile Всем спасибо за участие. Хоть и сам себя запутал... smile


--------------------

http://displayart.ru - Обои.
http://a2themes.ru - Сайт о движках DLE, phpBB3, WordPress.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




[ Время генерации скрипта: 0.0526 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.