Помещает ли php-скрипт в src тега image медленнее, чем обычно, и насколько? - PullRequest
2 голосов
/ 09 февраля 2009

Если я добавлю этот тег в мой HTML:

<img src="http://server/imageHandler.php?image=someImage.jpg" />

вместо

<img src="http://server/images/someImage.jpg" />

и используйте скрипт imageHandler.php, чтобы прочитать файл изображения, вывести заголовки expire и распечатать данные изображения, я ожидаю, что это будет медленнее Является ли это жизнеспособным способом манипулирования заголовками изображений, или это слишком много для снижения производительности, так как изображения вокруг. Есть ли другие способы установить истекающие заголовки на изображениях через мой php-код?

Ответы [ 4 ]

3 голосов
/ 09 февраля 2009

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

Вместо этого вы можете установить истечение срока действия заголовков, используя директивы конфигурации Apache. См. Документацию для mod_expires. Например, вы можете поместить следующие директивы в файл Apache httpd.conf или .htaccess:

# enable expirations
ExpiresActive On
# expire JPG images after a month in the client's cache
ExpiresByType image/jpg A2592000
2 голосов
/ 09 февраля 2009

Попробуйте что-то вроде

header("Expires: <the date>");
http_send_file("someImage.jpg");

из http://us3.php.net/manual/en/function.http-send-file.php Функция http_send_file (если она работает так, как я думаю) копирует файл непосредственно с диска в сетевой интерфейс, поэтому она отправляет само изображение примерно так же быстро, как изначально сервер. (Конечно, время, затрачиваемое на запуск интерпретатора PHP, все же сделает общий запрос немного медленнее, чем обслуживание статического файла.)

Как упомянул хотя бы один другой ответ, вероятно, лучший способ установить заголовок Expires (или любой другой заголовок), если вы используете Apache, - это использовать файл .htaccess, или еще лучше, если у вас есть доступ к основным файлам конфигурации сервера, поместите туда конфигурацию Expires. Посмотрите на mod_expires .

1 голос
/ 09 февраля 2009

Если обработчик изображений использует GD или Imagick, он будет значительно медленнее, чем обычный тег img.

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

Вы можете использовать htaccess для установки срока действия.

.htaccess Кэширование

0 голосов
/ 09 февраля 2009

Это будет зависеть от того, какую задачу выполняет imageHandler.php. Вы можете измерить его, напечатав время в миллисекундах в вашем коде.

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