2009-08-14 8 views
0

画像をサムネイルにサイズ変更するPHPの関数があります。画像アップロードスクリプトはアップロードされた画像を取り込み、この関数を実行して画像のサイズを変更します。機能2をさらに2回使用して2つの異なるサイズのサムネイル画像を作成するので、ユーザーが画像をアップロードするたびに合計3つの画像が保存されます。私のサイズ変更/サムネイル機能は、サムネイルで2回呼び出され、ファイルが幅が広い場合には3回目に呼び出されます。PHPの画像サムネイルのパフォーマンスに関する質問

このサイズ変更関数はgetimagesize()を使用して寸法を取得するので、uplaodスクリプトがこの関数を呼び出すと、サイズ変更関数はgetimagesize()関数をさらに2-3回使用して他のサイズの画像を作成します。

私はアップロードプロセスでそれらを取得するので、私はちょうどresize関数にdimesionsを渡す必要があると思っていますか?

私の本物の質問は、リソースを浪費しているfunctonをgetimagesize()することです。可能な限り少なくともそれを使用するのが最善か、1つの画像がうまくアップロードされたら数回呼び出すのですか?

答えて

3

は、私はあなたがGDの機能を使用しているasssume。複数のサムネイルを作成する場合、通常のボトルネックは間違って実装された画像のサイズ変更機能です。元の画像を読み込んだ後でサイズ変更した画像を保存するたびに機能します。より良い方法は、画像を一度読み込んで、画像リソースを使用してすべてのサムネイルをimagecopyresampledにすることです。画像の次元を関数に渡すだけでなく、GD参照も渡します。あなたの元のファイルが一度だけ読み込まれる方法。

+0

ありがとう、これは私がやっていることについて考えていたものです – JasonDavis

2

アップロード時にのみ動作するものについては、それほど気にする必要はありません。アップロードは、ユーザーが超高速応答を期待する動作ではありません。 早期最適化はすべての悪の根源です

言われているように、getimagesize()は特に高価ではありませんが、一度だけ呼び出すことができるのであれば、そうしてください。しかし、私はスピードアップの大部分を予測していません。スクリプトの高価な部分は、画像のサイズ変更自体です。

1

特にリソースが不足しているわけではありません。ファイルを開いてイメージヘッダーを読み取る必要があります。

あなたはそれを最適化するために外出しないでください。簡単なら、それを実行してください。それ以外の場合は、最適化する前にのボトルネックがアプリケーション内のどこにあるかを確認してください。

0

スクリプトをプロファイルするのが最も良い方法です。

特定の状況に当てはまらない理論的な回答ではなく、本当の答えが得られ、本当に有益です。

また、この習慣で、次のことができるようになります:

  • ボトルネック
  • を発見するには、マイクロ最適化と主要な最適化の違いを作ります。

私は個人的に開発者です。 * nix上に展開してください。

私の開発者doxでは、私はxdebug + WinCacheGrindを使って結果を読みます。

私はそれらなしでは生活できませんでした。 :)ただ、先端/ precausion

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

0

アップロードする部分が画像のサイズを変更する場所であるとは限りません。後でcronジョブとしてイメージのサイズを変更する必要があります。画像のサイズを変更するには、imagemagickや他のサイズ変更アプリケーションのようなサードパーティアプリケーションを使用できます。そうすれば、フロントエンドで時間を節約できます。 5分ほどごとにサイズ変更ジョブを実行できます。

+0

私はこれを検討しています – JasonDavis

関連する問題