Использует ли библиотека GD много памяти? - PullRequest
8 голосов
/ 14 января 2010

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

Будет ли это замедлять работу сервера или использовать необычный объем памяти?

Ответы [ 5 ]

7 голосов
/ 14 января 2010

GD использует много памяти. Он полностью загружает изображение в память и распаковывает его, поэтому вам потребуется не менее 32 бит на пиксель. Изображение размером 800 x 600 затем используйте:

800 * 600 * 32 бита = 15,4 мегабита = 2 МБ

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

Вам действительно стоит подумать о кэшировании ваших миниатюр, так что они должны быть сгенерированы только один раз (это ускорит страницу и для ваших посетителей!).

Я также прочитал сейчас, что вы загружаете изображения с внешнего сервера, и в этом случае вы ДЕЙСТВИТЕЛЬНО должны кэшировать изображение, потому что в противном случае ваши посетители должны ждать, пока вы загрузите все изображение в первую очередь. Это становится еще хуже, если внешний сервер отключен или перегружен, и вашим посетителям придется ждать тайм-аут (это будет выглядеть так, как будто ваш сервис работает медленно). В дополнение к этому вы потеряете много трафика, если будете загружать изображение каждый раз, когда пользователь запрашивает его миниатюру.


Поскольку GD использует так много памяти, может быть целесообразно вместо этого генерировать миниатюры, используя расширение IMagick. ImageMagick значительно лучше масштабируется в отношении потребления памяти и также очень быстр (но вы все равно должны кэшировать изображения по причинам, указанным выше).

1 голос
/ 14 января 2010

Любой вид обработки изображения, вероятно, будет занимать много памяти.

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

PHP-библиотекой, которая выполняет большую часть этого кеширования, является phpThumb - она, вероятно, идеально подходит для таких задач.

http://phpthumb.sourceforge.net/

1 голос
/ 14 января 2010

Зависит от того, что вы делаете с ним, но почему бы не попробовать для себя:

1 голос
/ 14 января 2010

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

0 голосов
/ 14 января 2010

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

...