Который более эффективен/быстрее при вызове кэшируемого изображения?

я сделал изображение resizer в php. Когда изображение изменено, оно кэширует новый jpg файл с новыми размерами. В следующий раз Вы называете точный img.php? file=hello.jpg&size=400, который это проверяет, был ли новый jpg уже создан.

  1. Если это еще НЕ было создано, это создает файл и затем печатает (прохладный) вывод.
  2. Если это УЖЕ существует, никакой новый файл не должен быть сгенерирован и вместо этого, это просто называет уже кэшируемый файл.

Мой вопрос расценивает второй сценарий. Какой из них быстрее?

  1. перенаправление: header('Location: cache/hello_400.jpg');die();
  2. захват данных и печать кэшируемого файла: $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

Благодаря всем для справки!

7
задан Andres SK 13 May 2010 в 20:58
поделиться

5 ответов

Есть ли другие способы улучшить это?

Да.

Есть способ отправить только HTTP-заголовок: условное получение .
Вы можете взглянуть на аналогичный сценарий, http://shiftingpixel.com/2008/03/03/smart-image-resizer/ , для реализации

{{1} }
3
ответ дан 6 December 2019 в 19:34
поделиться

Если это возможно в вашем случае, вы также можете реализовать функцию для прямого задания url кэшированного изображения в вашем html, например:

<img src="<?php getImageUrl('hello.jpg', 400); ?>" />

getImageUrl() вернет url кэшированного изображения, если оно существует, иначе вернет url для динамической генерации изображения с измененным размером.

0
ответ дан 6 December 2019 в 19:34
поделиться

Я бы выбрал вариант никогда не печатать данные в браузер. В обоих сценариях должно происходить постоянное перенаправление на сгенерированное изображение. За исключением случая, когда изображение еще не существует, оно создается до отправки заголовка Location.

Edit:

Просто чтобы уточнить, что я имею в виду под постоянным перенаправлением...

header('HTTP/1.1 301 Moved Permanently'); 
header('Location: http://path/to/image'); 
5
ответ дан 6 December 2019 в 19:34
поделиться

В качестве третьего (более мощного) варианта: кэшировать изображение в двоичном поле базы данных и запрашивать его у базы данных.

Реализуйте все три решения и сравните их.

Я предположу, что первый вариант (перенаправление) будет самым медленным в реальном мире, потому что он требует столько же усилий, сколько и второй вариант (file_get_contents), но включает второй запрос и больше накладных расходов.

0
ответ дан 6 December 2019 в 19:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: