скорость создания 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}!
Кто работает часто с изображениями что посоветует? просто сам бешусь когда долго ждёшь отправки формы, а тут всё в твоих руках, нужно к пользователям быть благосклонными.
 
ужно к пользователям быть благосклонными.
Ога.
И к пользователям данного форума так-же.

![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}!
o_O
Это ты размер проверяешь? Или telepat level?

-~{}~ 29.02.08 21:03:

скорость создания preview
Тема поднималась в форуме неоднократно.
 
верю что поднималась, поэтому и искал но не нашёл(((
не) просто я хотел написать типа x000Xx000 до x00Xx00, но потом подумал что это не красивое разрешение и вспомнил про любимые регулярки, а форум веб программеров. вот и написал так) надеюсь не кто не принял это как обиду, если да извените.
По поводу поиска, в каком направление искать? по каким фразам?
 
Baranov_Dron
Будьте проще, и люди к вам потянутся.
Если форум программистов, то давайте html-ентитями общаться вместо русских букв?

Ответьте мне, пожалуйста, на вопрос:
Почему вас смущает скорость генерации превьюшек? Какая скорость вам показалась бы нормальной и почему?
 
imagemagick.
(в phpThumb() - есть генерация превьюх при помощи imagemagick)
 
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 скрипты-демоны(((
 
Baranov_Dron, в фоне != демоны. Можно генерировать основной превиёв, а задачу генерации остальных тупо отдавать крону.

Кроме того, понятия "нравятся" и "не нравятся" из области психологии, а не программирования. И решать такие задачи нужно раздельно и последовательно, что бы рука на клавиатуре не дрогнула. :)
 
Да прибегнул я к помощи демонов)
Вернее в фоне. Ну вообще демоны это в php скрипты, которые крутятся постоянно. Про них я и имел в виду. Так как с ними возьни выше крыши:
1)нужно запретить больше одного открытия скрипта или больше n числа потоков
2)нужно отследить, когда скрипт(или одного из потоков) умрёт и его запустить(кроном)
3)нужно организовать чтобы несколько потоков не брало на выполнение одно задание
4)нужно твёрдо знать что потоки, которые зависли завершены. а это как правило ребут апача.
Выполнить все 4 пункта реально, но ВЕСЬМА проблематично...
В ходе дальнейших экспериментов понял, что лучшим компромиссом будет создать в кроне задание, ежеминутное. Как сказал jonjonson. Которое будет делать превью по одной записи(1-5 фото) каждой категории объявлений(у меня их 5). На первое время сойдёт, а дальше наверное сделаю потоки :) В общем то прибегнул к совету данному *****'ом.
Всем спасибо за советы и дискуссию!
 
)нужно запретить больше одного открытия скрипта или больше n числа потоков
2)нужно отследить, когда скрипт(или одного из потоков) умрёт и его запустить(кроном)
3)нужно организовать чтобы несколько потоков не брало на выполнение одно задание
4)нужно твёрдо знать что потоки, которые зависли завершены. а это как правило ребут апача.
забудь всю дурь про потоки.
будь проще:
1) пиши в базу или файл имена тех файлов, для которых необходимо сделать превью.
2) по крону запускай скрипт, который читает имена файлов из БД, осуществляет их конвертацию, помечает их "преобразованными" и заканчивается.
 
в твоей схеме изъян
что будет если сработает двойной запуск скрипта? что будет я и сам не знаю, но приятного мало
я сделал так, беру запись с таблицы обявление, там есть три значения в поле 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>";
         }
 
?>
 
Baranov_Dron
exif, покопайся, посмотри.

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