Производительность PHP / браузера: генерация миниатюр браузером - PullRequest
0 голосов
/ 01 апреля 2011

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

  1. Это было бы болееэффективный способ сделать это, но насколько эффективнее , чем операция GD на стороне сервера?
  2. Существуют ли библиотеки Javascript , которые могут сохранитьизображение в формате JPG быстро, чтобы его можно было отправить на сервер через Ajax?
  3. Как общее примечание, преобразование будет выполнено с использованием Web Workers , поэтому это не повлияетпользовательский браузер.
  4. Очевидно, что пользователь может потенциально использовать и отправлять миниатюру, которая совершенно не связана с полноразмерным изображением.Есть ли хороший способ обойти это, то есть быстро вычислить, насколько похожи миниатюра и полноразмерное изображение, и если они равны, например, на 98%, то разрешить изображение?выполнение этого, например, полная выгрузка на другой сервер или выполнение пакетной работы в 3 часа утра, например, но для академических / информационных целей, с появлением современного браузера и его улучшенных механизмов Javascript, может работать так, как если бы это было включено в браузер клиентов.

Ответы [ 5 ]

2 голосов
/ 01 апреля 2011

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

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

Одна из возможных идей - использовать апплет Flash / Java для обработки загрузки, автоматически генерируя миниатюру и отправляя ее вместе.

1 голос
/ 01 апреля 2011

То, что я делал, это захват миниатюры EXIF ​​на тех изображениях, у которых она есть, и создание реальных миниатюр только для тех, которые не содержат данных EXIF.

Не совсем отвечает на ваш вопрос, ноэто мои 2 цента: -)

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

0 голосов
/ 01 апреля 2011

Спасибо за все ваши комментарии, однако я нашел хорошее решение для этого:

HTML5: сохранение данных изображения Canvas с использованием PHP и Ajax


Я проведу дополнительное тестирование, чтобы выяснить его целесообразность.

Очевидно, что основные моменты / проблемы здесь:

  • a. Я не заблуждаюсь, что все используют один и тот же браузер и с одинаковыми возможностями canvas / html5, поэтому должна быть установлена ​​резервная система .

  • b. Пользователи имеют разные рабочие браузеры / машины.Так что об этом следует помнить при работе с большими изображениями, чтобы уменьшить их до размера миниатюр.

  • c. Должен ли сборщик данных / эксплойт будет отправлено из браузера / клиентов, тогда я буду обходить это, когда дело доходит до этого ( на самом деле люди могут загружать данные мусора для полноразмерного изображения , в любом случае, и , есличто пользователи намерены сначала испортить сайт, они всегда найдут способ )

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

0 голосов
/ 01 апреля 2011

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

0 голосов
/ 01 апреля 2011

Будете ли вы сталкиваться с таким количеством загрузок в секунду, что вам придется распределять нагрузку обратно на браузеры?

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

Вам следует выполнить нагрузочное тестирование, прежде чем пытаться оптимизировать что-то, что, вероятно, в любом случае будет потеряно при передаче по сети.*

...