[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: оптимизация ресайза
Страницы: 1, 2
дианитка
Здравствуйте, есть скрипт ресайза картинок для сайта на лету (например, http://www.partnertrade.com.ua/konditsionery-bytovye), что вызывает нагрузку на сервер и увеличивает время загрузки страницы. подскажите, пожалуйста, какие есть варианты ресайза изображений, которые не вызывают этих проблем

_____________
дианка[COLOR=purple]
linker
Через nginx, на хабре была такая тема.

_____________
Gear Framework
Gear Framework на Github
дианитка
а если сервер - Apache?

_____________
дианка[COLOR=purple]
paul85
дианитка, для чего делать ресайз на лету? В этом есть острая необходимость? Обычно ресайзят картинки при загрузке их на сервер во все необходимые разрешения. А потом отдают уже готовые и бед никаких не знают.
vagrand
дианитка
Без проблем. После того как вы картинку ресайзнули записывайте ее с уникальным именем в какой-то каталог, а перед следующим ресайзом проверяйте е наличие там, и если она там есть, то просто делайте на нее редирект. Таким образом сам ресайз будет происходить только один раз.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
дианитка
спасибо, попробую переделать, чтобы ресайзились при загрузке на сервер

_____________
дианка[COLOR=purple]
killer8080
Цитата (vagrand @ 28.01.2014 - 07:48)
а перед следующим ресайзом проверяйте е наличие там, и если она там есть, то просто делайте на нее редирект.

можно еще проще, перехватываются обращения к несуществующим картинкам, генерится и сохраняется на лету, отдаётся клиенту. никаких редиректов, следующий запрос уже будет к существующему файлу. Клиент и знать не должен откуда контент, динамический или статический.
vagrand
killer8080
Цитата
отдаётся клиенту. никаких редиректов


Каким способом без редиректа будите отдавать сгенеренные в скрипте файлы?

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
killer8080
Цитата (vagrand @ 28.01.2014 - 10:55)
Каким способом без редиректа будите отдавать сгенеренные в скрипте файлы?

 // тут ресайз
imagejpeg($im, $filename, $quality);
header('Content-Type: image/jpeg');
header('Last-Modified: ' . gmdate("D, d M Y H:i:s ")."GMT"));
readfile($filename);

можно еще с е тагом заморочится, но не принципиально, last modified в принципе достаточно
Valick
vagrand, а капчу на страницу вы тоже с редиректом присовокупляете?

_____________
Стимулятор ~yoomoney - 41001303250491
vagrand
killer8080
"Гениальное" решение, читать файл в память вместо того, чтобы сделать на него редирект. Браво.

Valick
Цитата
vagrand, а капчу на страницу вы тоже с редиректом присовокупляете?


Давайте не путать мухи и котлеты. Капча каждый раз при новом запросе должна выдавать новую картинку, т.е. сохранять ее в файл и делать на него редирект не имеет особого смысла.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
killer8080
Цитата (vagrand @ 28.01.2014 - 11:52)
killer8080
"Гениальное" решение, читать файл в память вместо того, чтобы сделать на него редирект. Браво.

Ну во первых не в память, а в поток, во вторых отпадает необходимость создавать второе, не нужное соединение с сервером, чтоб получить то, что можно было отдать при первом запросе.
vagrand
killer8080
Цитата
Ну во первых не в память, а в поток


А по вашему в поток файл идет минуя память сервера? smile.gif

Цитата
во вторых отпадает необходимость создавать второе, не нужное соединение с сервером, чтоб получить то, что можно было отдать при первом запросе


Я полностью согласен с предложенными вами способом по поводу перехватывания запросов к несуществующим файлам. Так что один раз при его непосредственной генерации сделать доп редирект на статический файл 100% лучший вариант, чем читать его в память и отдавать через php скрипт. Тем более через readfile, который читает его весь сразу. Уж тогда лучше будет читать его по блокам и сразу их отдавать.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
killer8080
Цитата (vagrand @ 28.01.2014 - 12:27)
А по вашему в поток файл идет минуя память сервера?

А по вашему он считывается целиком в ОЗУ перед передачей в сокет? smile.gif
Цитата (vagrand @ 28.01.2014 - 12:27)
Тем более через readfile, который читает его весь сразу. Уж тогда лучше будет читать его по блокам и сразу их отдавать.

глупости, эту рутину выполнит сам PHP зачем так извращаться
http://us1.php.net/manual/ru/function.readfile.php
Цитата
Замечание:

readfile() сама по себе не приводит к каким-либо проблемам с памятью, даже при отправке больших файлов.

Цитата (vagrand @ 28.01.2014 - 12:27)
Я полностью согласен с предложенными вами способом по поводу перехватывания запросов к несуществующим файлам.

Это не я придумал, этот способ стар как мир smile.gif
vagrand
killer8080
Цитата
А по вашему он считывается целиком в ОЗУ перед передачей в сокет?


Целиком или нет какая разница? В память то он его читает.

Цитата
Замечание:
readfile() сама по себе не приводит к каким-либо проблемам с памятью, даже при отправке больших файлов.


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

Цитата
Это не я придумал, этот способ стар как мир


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





_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.