サイトの重さ

サイトの重さ

お知らせ

2021/09/15

Web開発において、よく、サイトを軽くしてほしいという話が出てきます。
HTMLやCSS等のシステムが絡んでいないWebサイトでの重さの原因は9割が画像です。
対応ブラウザを視野に入れながら、webpを入れたり、画像圧縮のツールを使うと良いでしょう。

ただ、システムが絡むものの場合は別です。
この場合、9割がデータベースのSQLの書き方と、テーブル構造です。
データベースとは、データを蓄積しておき、そこに保存し、取得できるソフトウェアです。
端的に言ってしまえば、Webシステムとはこのデータベースに保存したり、取得したりする事がメインとなります。

データベースの重さの原因で最初に目につくのがindexの貼り方でしょう。
indexとはなにか?
要はデータの目次をつけるものに近いと思って頂ければと思います。
ただ、気をつけるべきは、indexを無闇に貼れば良いとは限らないと所です。

他にも細かいもので、検索順序を変えたり、取得情報を変えたり、キャッシュさせたり、データベースのコンフィグを変更し、チューニングしたり
DBサーバーを複数個持ったりと様々な手法があるでしょう。

ただ、何件か重さの改善をしましたが、一番の解消法は正規化を減らすことです。
正規かとはなにか?

要はデータ情報をグループ化してしまうことです。
果物で言えば、みかんの情報の「カテゴリ」に柑橘系と入れるのは良い構造ではありません。
この場合、他にレモンを作り柑橘系と入れてしまっては、後々情報を変更する際に面倒なことになります。
他に「カテゴリ」の情報を作り、そこに柑橘系を入れておき、「果物情報」と「カテゴリ情報」を紐付けたほうが
後々変更の際に便利なものになります。

なら、何故、その良い技術である正規化を減らすことが良いか?
少し専門的に言えば、joinやサブクエリを減らせるかです。
もちろん、一番理想的なことは、正規化をしても高速なデータ構造を作るのが理想的です。
ただ、連結するデータがあまりにも増えてしまった場合は(良くないですが。。。)、上記の正規化を止めることも選択肢の一つです。


また、他にも集計を表示時にしているシステムを見かけます。
表示のたびに集計をしていてはシステムも遅くなります。
ここは、登録の際にバックグラウンドで、またはリアルタイム性は損なわれますが
深夜などにまとめて処理をするのも手の一つです。