я сделал изображение resizer в php. Когда изображение изменено, оно кэширует новый jpg файл с новыми размерами. В следующий раз Вы называете точный img.php? file=hello.jpg&size=400, который это проверяет, был ли новый jpg уже создан.
Мой вопрос расценивает второй сценарий. Какой из них быстрее?
header('Location: cache/hello_400.jpg');die();
$data = file_get_contents('cache/hello_400.jpg'); header('Content-type: '.$mime); header('Content-Length: '.strlen($data)); echo $data;
Какие-либо другие способы улучшить это?
Если кто-то хочет сгенерированный код, проверьте это: http://egobits.com/misc/img.phps
Благодаря всем для справки!
Есть ли другие способы улучшить это?
Да.
Есть способ отправить только HTTP-заголовок: условное получение .
Вы можете взглянуть на аналогичный сценарий, http://shiftingpixel.com/2008/03/03/smart-image-resizer/ , для реализации
Возможно, вы могли бы сделать следующее:
, из которого вы можете определить, какое изображение следует изменить размер.
Таким образом, вы получаете некоторые преимущества:
If-modified-Since
и других связанных с кешем заголовков на веб-сервере. Пример .htaccess в вашей папке / img / resizable:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /img.php [L]
Если это возможно в вашем случае, вы также можете реализовать функцию для прямого задания url кэшированного изображения в вашем html, например:
<img src="<?php getImageUrl('hello.jpg', 400); ?>" />
getImageUrl() вернет url кэшированного изображения, если оно существует, иначе вернет url для динамической генерации изображения с измененным размером.
Я бы выбрал вариант никогда не печатать данные в браузер. В обоих сценариях должно происходить постоянное перенаправление на сгенерированное изображение. За исключением случая, когда изображение еще не существует, оно создается до отправки заголовка Location.
Edit:
Просто чтобы уточнить, что я имею в виду под постоянным перенаправлением...
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://path/to/image');
В качестве третьего (более мощного) варианта: кэшировать изображение в двоичном поле базы данных и запрашивать его у базы данных.
Реализуйте все три решения и сравните их.
Я предположу, что первый вариант (перенаправление) будет самым медленным в реальном мире, потому что он требует столько же усилий, сколько и второй вариант (file_get_contents), но включает второй запрос и больше накладных расходов.