2013-11-30 2 views
2

В настоящее время я переписываю веб-сайт, для которого требуется много разных размеров для каждого изображения. Раньше я делал это, создавая изображения эскизов для всех размеров при загрузке. Но теперь я сомневаюсь в производительности. Это потому, что теперь я должен изменить свой дизайн, и половина моих изображений не имеет нужного размера. Поэтому я думаю о 2 решениях:Создать эскизы «на лету» с кешем или при загрузке?

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

  2. загрузить только реальный размер, и при отображении его, положить в SRC тега что-то вроде стер = "thumbs.php? Img = мой образ-путь/image.jpg & ширина = 120 высота = & 120 ». Затем создайте большой палец и покажите его. Также мой скрипт проверяет, существует ли большой палец, если он ему не нужен, чтобы просто его отобразить. Каждые 5 дней запускают скрипт с помощью crontask, чтобы удалить все большие пальцы (чтобы использовать только полезные).

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

Спасибо за ваши советы

+1

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

+0

Итак, вы хотите повысить производительность и решает, какая хорошая идея восстановить все миниатюры каждый раз, когда кто-то посещает страницу? Думаю об этом. – Havenard

+0

Это действительно зависит. Что для вас наиболее важно - загрузить производительность или производительность дисплея? У вас высокая изменчивость в размере эскизов, где предикация больших пальцев будет непрактичной? Какой тип трафика у вас есть. Являются ли пользователи comiong на ваших страницах снова и снова, где важна высокая кешируемость, или они являются одноразовыми посетителями, чтобы получить изображения для них, чтобы загрузить их в первый раз так же быстро, как это необходимо? Вы изучали создание превью с асинхронным процессом, чтобы он не влиял на производительность загрузки? –

ответ

1

Используйте второй вариант, если вы не слишком много места, и первым, если вы не слишком много ресурсов процессора.

Или вы можете комбинировать их: сгенерировать и сохранить изображение при первом открытии генератора эскизов php и времени nex просто вернуть кэшированное изображение.

С помощью этого решения у вас будут только необходимые изображения, и если вы хотите, вы можете иногда удалять старые.

1

Основываясь на исходном вопросе и последующих комментариях, это звучит так, как будто бы по-вашему требованию было бы подходящим для вас, поскольку это не похоже на то, что у вас будет сложная среда с точки зрения абсолютно минимизации времени загрузки к конечному клиенту.

Возможно, у вас уже есть выбор, чтобы дать вашим тегам <img> значение src, являющееся скриптом PHP, причем этот скрипт либо обслуживает кэшированную миниатюру, если она существует, либо генерирует ее на лету, кешируя ее , а затем обслуживать его, поэтому позвольте мне дать вам другой вариант.

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

  1. Это потребует дополнительных накладных расходов вызова PHP служить такого рода запросов, что-то гораздо более оптимизирован с базовым веб-сервером, таким как Apache, Nginx и т. д. Это означает, что ваш сайт сможет обрабатывать меньше трафика на сервер, потому что он использует дополнительную память, процессор и т. д., чтобы обслуживать этот статический контент.
  2. Это затрудняет перемещение этих статических ресурсов в один репозиторий за пределами сервера для обслуживания содержимого (например, CDN). Это означает, что вы должны дублировать свои файлы на каждом веб-сервере, на котором вы используете сайт.

Таким образом, мое предложение состояло в том, чтобы по-прежнему показывать изображения в виде файлов статического изображения через веб-сервер, но генерировать эскизы «на лету», если они отсутствуют. Для этого вы можете просто создать собственное правило перенаправления или обработчик 404 на веб-сервере, так что запросы в каталоге миниатюр, которые не соответствуют существующему эскизному изображению, могут быть перенаправлены на скрипт PHP, чтобы автоматически генерировать миниатюру и обслуживать изображение (без браузера, даже зная его). Будущие запросы против этого эскиза будут переданы как статическое изображение.

Эта шкала довольно хорошо, так как, если в будущем вам нужно будет перемещать ваши статические изображения на один сервер (или CDN), вы можете просто использовать механизм pull-pull, чтобы попытаться получить контент с вашего основного серверов, которые будут автоматически генерировать их с помощью того же механизма, о котором я только что упомянул.

+0

Спасибо, что нашли время! :) Что вы думаете о нескольких веб-серверах, имеющих одно и то же хранилище NAS, смонтированных для этой цели (хранение изображений, их создание по требованию)? У вас есть опыт работы, когда NAS должен обрабатывать одновременный доступ? (У меня есть s3 от AWS в виду, используя плагин s3fs плавкий предохранитель) – hek2mgl

+0

@ hek2mgl Просто полагаться на NAS, вероятно, будет очень медленно при обслуживании изображений. К счастью для вас, есть решение для S3, чтобы сделать это немного более терпимым и фактически дать вам производительность локального диска. Взгляните на s3fs (http://code.google.com/p/s3fs/). Это позволяет монтировать ведро S3 в локальной файловой системе, чтобы вы могли получить к нему доступ, как локальный диск. Это все еще медленно, но у него механизм кэширования для кэширования файлов в настоящий локальный каталог для повышения производительности. –

+0

@ hek2mgl Хех. Думаю, я полностью замалчиваю ваше упоминание о s3fs в вашем первоначальном комментарии :) –

Смежные вопросы