скорость создания preview

Baranov_Dron

Новичок
скорость создания preview

В общем использовал и не мучался библиотеку http://phpthumb.sourceforge.net/
Но вот понадобилось создать 6 превью. И вот те на. Скорость работы скрипта аж 10 секунд. Не хорошо.
Воспользовался gd2. Скорость создания одного preview около 0.6-0.8 секунд. Тоже не мало же...
Дальше пошёл в сторону imagecopyresized() результат одного превью около секнуды.
Результаты шокировали... Особо не работал с изображениями... как-то phpthumb хватало, но и использование вышеупомянутых функций ненамного быстрее даёт результат.
Сжимаю рисунки с разрешения ![1-2]{1}[0-9]{3}!x![1-2]{1}[0-9]{3}! до ![1-9]{1}[0-9]{2}!X![1-9]{1}[0-9]{2}!
Кто работает часто с изображениями что посоветует? просто сам бешусь когда долго ждёшь отправки формы, а тут всё в твоих руках, нужно к пользователям быть благосклонными.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
ужно к пользователям быть благосклонными.
Ога.
И к пользователям данного форума так-же.

![1-2]{1}[0-9]{3}!x![1-2]{1}[0-9]{3}! до ![1-9]{1}[0-9]{2}!X![1-9]{1}[0-9]{2}!
:confused:
Это ты размер проверяешь? Или telepat level?

-~{}~ 29.02.08 21:03:

скорость создания preview
Тема поднималась в форуме неоднократно.
 

Baranov_Dron

Новичок
верю что поднималась, поэтому и искал но не нашёл(((
не) просто я хотел написать типа x000Xx000 до x00Xx00, но потом подумал что это не красивое разрешение и вспомнил про любимые регулярки, а форум веб программеров. вот и написал так) надеюсь не кто не принял это как обиду, если да извените.
По поводу поиска, в каком направление искать? по каким фразам?
 

kruglov

Новичок
Baranov_Dron
Будьте проще, и люди к вам потянутся.
Если форум программистов, то давайте html-ентитями общаться вместо русских букв?

Ответьте мне, пожалуйста, на вопрос:
Почему вас смущает скорость генерации превьюшек? Какая скорость вам показалась бы нормальной и почему?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
imagemagick.
(в phpThumb() - есть генерация превьюх при помощи imagemagick)
 

Фанат

oncle terrible
Команда форума
Baranov_Dron
если хочешь, чтобы совсем без задержки, сделай как на всех фотохостингах - в фоновом режиме
 

Baranov_Dron

Новичок
Автор оригинала: kruglov
Baranov_Dron
Будьте проще, и люди к вам потянутся.
Если форум программистов, то давайте html-ентитями общаться вместо русских букв?

Ответьте мне, пожалуйста, на вопрос:
Почему вас смущает скорость генерации превьюшек? Какая скорость вам показалась бы нормальной и почему?
ну пожалуй переборщил с регуляркой я,... уже извенился)
почему смущает, ну стараюсь придерживаться минимализма... скорость показалась бы нормальной это меньше 0.5 секунды

-~{}~ 29.02.08 23:13:

Автор оригинала: Mr_Max
imagemagick.
(в phpThumb() - есть генерация превьюх при помощи imagemagick)
хм, я вроде в phpThumb() не пользовался этой опцией, класс написан очень грамозко...
а их документация не понравилась, я бы документацию типа смарти в пример ставил... но завтра попробую как phpThumb() работает с imagemagick. даст меньше хотя бы чуть чуть секунды, останусь на нём. блин помучаться с ним придётся, чтоб выставить опцию imagemagick...

-~{}~ 29.02.08 23:15:

Автор оригинала: *****
Baranov_Dron
если хочешь, чтобы совсем без задержки, сделай как на всех фотохостингах - в фоновом режиме
А вот это хорошее решение! спасибо, если phpthumb c imagemagic себя плохо покажут так и сделаю)
почему сразу не сообразил... только не нравятся мне в php скрипты-демоны(((
 

jonjonson

Охренеть
Baranov_Dron, в фоне != демоны. Можно генерировать основной превиёв, а задачу генерации остальных тупо отдавать крону.

Кроме того, понятия "нравятся" и "не нравятся" из области психологии, а не программирования. И решать такие задачи нужно раздельно и последовательно, что бы рука на клавиатуре не дрогнула. :)
 

Baranov_Dron

Новичок
Да прибегнул я к помощи демонов)
Вернее в фоне. Ну вообще демоны это в php скрипты, которые крутятся постоянно. Про них я и имел в виду. Так как с ними возьни выше крыши:
1)нужно запретить больше одного открытия скрипта или больше n числа потоков
2)нужно отследить, когда скрипт(или одного из потоков) умрёт и его запустить(кроном)
3)нужно организовать чтобы несколько потоков не брало на выполнение одно задание
4)нужно твёрдо знать что потоки, которые зависли завершены. а это как правило ребут апача.
Выполнить все 4 пункта реально, но ВЕСЬМА проблематично...
В ходе дальнейших экспериментов понял, что лучшим компромиссом будет создать в кроне задание, ежеминутное. Как сказал jonjonson. Которое будет делать превью по одной записи(1-5 фото) каждой категории объявлений(у меня их 5). На первое время сойдёт, а дальше наверное сделаю потоки :) В общем то прибегнул к совету данному *****'ом.
Всем спасибо за советы и дискуссию!
 

Alexandre

PHPПенсионер
)нужно запретить больше одного открытия скрипта или больше n числа потоков
2)нужно отследить, когда скрипт(или одного из потоков) умрёт и его запустить(кроном)
3)нужно организовать чтобы несколько потоков не брало на выполнение одно задание
4)нужно твёрдо знать что потоки, которые зависли завершены. а это как правило ребут апача.
забудь всю дурь про потоки.
будь проще:
1) пиши в базу или файл имена тех файлов, для которых необходимо сделать превью.
2) по крону запускай скрипт, который читает имена файлов из БД, осуществляет их конвертацию, помечает их "преобразованными" и заканчивается.
 

Baranov_Dron

Новичок
в твоей схеме изъян
что будет если сработает двойной запуск скрипта? что будет я и сам не знаю, но приятного мало
я сделал так, беру запись с таблицы обявление, там есть три значения в поле preview
1) готово или нет фоток
2) ожидается создание превью
3) в процессе создания
а скрипт берёт только объявления по одному где стоит атрибут 2
кстати немного оффтопа. Решил использовать в проекте phpdoctrine(http://www.phpdoctrine.org/). Чудесная вещь) код - красота получается, даже в этом скрипте для крона (хотя в кроне более логично всё же применить стандартные запросы без ORM).
PHP:
<?
include_once "../constant.php";
include_once "../__autoload.php";


      //поиск в БД записи у которой нет картинки
      $users=Doctrine_Query::create()
           ->select('*')
           ->from('board_car')
           ->where('thumb = ?','no')
           ->orderby('date')
           ->limit(1)
           ->execute();


         if(count($users))
         {
            //пишем что мы работаем над созданием preview
            $users[0]->thumb='creating';
            $users->save();
            $fotos=Doctrine_Query::create()
                                  ->select('*')
                                  ->from('board_foto')
                                  ->where('idboard = ? and idcategory=1',$users[0]->id)
                                  ->orderby('nomer')
                                  ->limit(3)
                                  ->execute();

               foreach($fotos as $foto)
               {
	              $Board_dm=new Board_dm;
                  $Board_dm->add_preview_big($foto->file,$users[0]->id,1,$foto->nomer);
                  $Board_dm='';
               }


            $users[0]->thumb='yes';
            $users->save();
         }
         else
         {
         	echo "Записей нету<p>";
         }
 
?>
 

dron4ik

Новичок
Baranov_Dron
exif, покопайся, посмотри.

все последние фотоаппараты сохраняют в самой фотографии (jpg например) превью картинки 128*96, остаётся отуда только достать. Это самый быстрый способ. К сожалению его не всегда можно использовать, но если всё-таки получается, выигрыш в скорости заметен "на глаз".
 

Baranov_Dron

Новичок
dron4ik спасибо) со своего фотоаппарата смог получить preview)
прикольно. но пока всё же предостерегусь применять это на деле(пускай даже как альтернативную схему, те использовать когда есть).
Как-нибудь потом, когда каналы станут лучше(чтобы передавать нормального качества фото), цифровики лучше и у большего числа народа.
 
Сверху