Пакетное изменение размера более 50 изображений в ColdFusion - PullRequest
1 голос
/ 08 сентября 2011

Я пытаюсь обновить систему фотогалереи, мы должны иметь возможность взять папку с изображениями размером 50-100 больших (~ 500 КБ-1 МБ) и выполнить пакетную обработку уменьшенной, средней и высокой версии для каждого ( и добавьте запись для каждого в базу данных).

Я написал <cffunction>, который делает именно это. Он хорошо работает с небольшой папкой с небольшими изображениями, однако большая папка с большими изображениями вызовет серьезные проблемы с производительностью и вызовет случайные ошибки (тайм-ауты или проблемы с правами доступа к файлам) после выполнения только 10 из 50 или более, которые я выбрасываю.

Мой вопрос: как мне добиться чего-то такого интенсивного при минимальном влиянии на производительность всего сервера? Возможно ли это только с ColdFusion, или мне нужно изучить другие плагины сервера? (У меня нет никакого опыта в этой области.)

Обновление: Из-за моих ограничений общего хостинга я в настоящее время перенаправляю свое внимание на изменение размера на стороне клиента (Flash) перед загрузкой, поэтому серверу нужно только загрузить / переместить и создать записи базы данных. Однако мне нужно что-то, что изменяет размеры исходных изображений в большую / среднюю / большую версию для каждого и загружает их все. Прямо сейчас я вижу только примеры, которые загружают одно изображение с измененным размером, но я попытаюсь поиграться с источниками.

Обновление 2: Я видел несколько довольно классных демонстраций, демонстрирующих изменение размеров изображений с использованием HTML5 <canvas>, и я собираюсь попробовать свои силы в этом. Я опубликую любые результаты.

Ответы [ 4 ]

3 голосов
/ 08 сентября 2011

<cfexecute> с ImageMagik превзойдет изменение размера с <cfimage> с точки зрения скорости и эффективности.

http://www.imagemagick.org/www/mogrify.html

3 голосов
/ 08 сентября 2011
1 голос
/ 09 сентября 2011

Возможно, проблема в том, что вы пытаетесь сделать все это в одном процессе?

Вот пара предложений: -

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

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

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

Джеймс

1 голос
/ 08 сентября 2011

Ну, может быть, сочетание Async Gateways, настройка JVM, возможно добавление дополнительной оперативной памяти или разделение обработки изображений на отдельный физический сервер, на котором не запускается основное приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...