как уменьшить использование памяти в image gd или ускорить процесс, чтобы освободить память быстрее

#php #gd #memory-management

#php #gd #управление памятью

Вопрос:

У меня есть скрипт image GD, который в настоящее время использует около 9 МБ памяти. Я получаю много трафика и, следовательно, иногда он использует чертовски много оперативной памяти на моем сервере.

Есть ли какой-либо способ уменьшить использование памяти для image gd? Или, по крайней мере, ускорить процесс скрипта, чтобы он быстрее освобождал память, которую он использует.

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

Спасибо.

Ответ №1:

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

Что вы могли бы сделать, так это использовать вместо этого внешний imagemagick двоичный файл — он выполняется за пределами ограничения памяти скрипта PHP — но это совершенно другая технология, и вам потребуется переписать свой код.

Я предполагаю, что вы уже кэшируете результаты GD, поэтому не каждый запрос вызывает его выполнение?

Комментарии:

1. Нужно показать много кода, но я попытаюсь объяснить вам, что я делаю с кодом. У меня есть файл изображения, и у меня есть около 10 других небольших уменьшенных изображений и около 40 других строк, которые должны быть помещены в этот файл изображения. Я думаю, что кэширование может не помочь, поскольку каждый раз генерируется новое изображение, поскольку уменьшенные изображения / строки продолжают меняться каждый раз. Любая помощь?

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

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

4. @Anil За исключением покупки более быстрого сервера, я так не думаю, нет.

5. похоже, мне нужно переместить мое веб-приложение, вероятно, на облачный сервер. Иногда всплески трафика съедают всю мою оперативную память. Хотя спасибо за помощь 🙂

Ответ №2:

Попробуйте избегать использования image GD «на лету», если вас беспокоят ограничения памяти. Трудно решить проблему, не видя кода, но я могу внести предложение.

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

Если вы предоставите больше кода, вы получите лучшую помощь

Комментарии:

1. Нужно показать много кода, но я попытаюсь объяснить вам, что я делаю с кодом. У меня есть файл изображения, и у меня есть около 10 других небольших уменьшенных изображений и около 40 других строк, которые должны быть помещены в этот файл изображения. Каждый раз эскизы / строки разные. Я также не могу использовать cron, поскольку я должен мгновенно показывать конечному пользователю выводимое изображение.

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

3. @lbu, нет, это не captcha, но что-то похожее. Да, уменьшение размера изображения помогло уменьшить использование памяти, но не намного. К сожалению, уменьшение размера изображения не является для меня вариантом в моем веб-приложении.