2009-08-14 1 views
0

У меня есть функция в PHP, которая изменяет размер изображений в миниатюре, мой сценарий загрузки изображений принимает загруженное изображение и запускает эту функцию для изменения размера изображения, если он шире, чем 700 пикселей, тогда он также запускает функцию еще 2 раза для создания миниатюрных изображений разного размера, так что в общей сложности 3 изображения сохраняются каждый раз, когда пользователь загружает изображение. Моя функция изменения размера/миниатюр вызывается 2 раза для эскизов, а иногда - в 3 раза, если файл имеет широкий размер.Вопрос о производительности изображения в PHP

Теперь эта функция изменения размера использует getimagesize() для получения размеров, поэтому мой скрипт uplaod вызывает эту функцию, затем функция изменения размера использует функцию getimagesize() еще 2-3 раза, чтобы сделать изображения другого размера.

Я думаю, что я должен просто передать dimesions на функцию изменения размера, так как я получаю их в процессе загрузки?

Мой настоящий вопрос: есть ли getimagesize() ресурс, голодный functon, было бы лучше использовать его по крайней мере, насколько это возможно, или вызывает его несколько раз, когда 1 изображение загружается в порядке?

ответ

3

Просто наконечник/precausion, я asssume вы используете функции GD. При создании более одного миниатюры обычное узкое место ошибочно реализует функции изменения размера изображения - каждый раз, читая исходное изображение, а затем сохраняя измененный размер. Лучше всего загрузить изображение один раз и использовать ресурс изображения для создания всех миниатюр с помощью imagecopyresampled - не только передать размеры изображения в функцию - пройдите также ссылку GD.В любом случае ваш исходный файл загружается только один раз.

+0

Спасибо, что я думал об этом – JasonDavis

2

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

Это, как говорится, getimagesize() не особо дорого, но если вы можете назвать это только один раз, сделайте это. Но я не предсказываю, что большая часть увеличения скорости. Дорогая часть вашего скрипта - это изменение размера изображения.

1

Это не особенно ресурсный голод - он должен открыть файл и прочитать заголовок изображения.

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

0

Лучшее, что нужно сделать, это профилировать ваши скрипты.

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

Кроме того, с этой привычкой, вы будете иметь возможность:

  • обнаружить узкие места
  • сделать разницу между микро-оптимизацией и крупной оптимизацией.

Я лично dev. на Windows и развернуть на * nix.

На моем dev dox я использую xdebug + WinCacheGrind для чтения результатов.

Я не мог жить без них. :)

http://elrems.wordpress.com/2008/02/12/profiling-php-with-xdebug-and-wincachegrind/

0

Я не думаю, что загружаемая часть должна быть там, где вы изменяете размер изображения. Вы должны изменить размер изображения в более позднее время как задание cron. Вы можете использовать стороннее приложение, например imagemagick или другое приложение для изменения размера, для изменения размеров изображений. Таким образом вы сэкономите время на переднем конце. Вы можете запускать операцию изменения размера каждые 5 минут или около того.

+0

Я рассматривал это – JasonDavis