baserproject / basercms

baserCMS : Based Website Development Project
http://basercms.net
Other
173 stars 130 forks source link

アップロード画像、リサイズ関連のアルゴリズムについて、負荷、パフォーマンスの観点からの提案 #1626

Open gondoh opened 3 years ago

gondoh commented 3 years ago

概要

都度アクセスするたびにファイルの存在チェックをするような処理はbaserCMSの速度低下に繋がり、あまり良くない実装と思われます。 この部分改善していったほうがいいのではと思いこの課題を起票。

PHPの処理で存在チェックを行い、CMS側のビューファイルで表示する画像の標準を指定できます。
例えば、サフィックスがない画像を表示したい場合、サフィックスが __thumb の画像を表示したい場合、ということを指定できます。
表示したい画像の存在チェックは行っており、例えば表示指定で __thumb を指定していたとしても、
もしその画像がなければサフィックスナシの必ず存在する画像を表示します。
・必ず存在する画像: NO_eye_catch.jpg
・サイズ設定値より超えた場合に生成される画像(サイズ設定値を超えてなければ生成されない): NO_eye_catch__thumb.jpg
・サイズ設定値より超えた場合に生成される画像(サイズ設定値を超えてなければ生成されない): NO_eye_catch__mobile_thumb.jpg
・表示のときには __thumb を指定していて、その画像が存在していたら __thumbを表示、なければ サフィックスナシの画像を表示

アップロードする際に画像が小さくてすべてファイルを生成したほうがいいのではないでしょうか。

ryuring commented 3 years ago

すべてファイルを生成する方がシンプルでよいと思いました。

yama commented 3 years ago

@ryuring @gondoh phpThumbのような仕組みをbaserCMSコアとは独立した形で実装することを提案します。 理由は下記のとおり。

phpThumb自体は多機能になり過ぎてあまりおすすめできませんが、サイズ違いの画像を返すことだけに 特化すれば、かなり軽量なものを作ることができます。条件付きGETを組み合わせると、実画像を生成して 用意する以上の負荷軽減も可能です。最低限の処理として、ソースとなる画像ファイルのタイムスタンプを 見ることは行ないます。 もしよければ試作しますので、それを見てから検討いただければと思います。

yama commented 3 years ago

NO_eye_catchというのが気になりますが、デフォルト画像に関係する話でしょうか?

yama commented 3 years ago

すべてファイルを生成する

連投すみません。あるいは、上記はオプション設定で選べるようになっていても よいかとも思いました。

kaburk commented 3 years ago

NO_eye_catchというのが気になりますが、デフォルト画像に関係する話でしょうか?

ブログ記事などのアイキャッチ画像のことですね。例えば 00000002_eye_catch.jpg などです。 (DBのNoカラムの値前ゼロ+ファイル名、モデルのBcUploadビヘイビアで設定されるファイル名)