誰でも簡単にできるサーバー負荷対策

レンタルサーバーは保存できるデータ量とは別に、1日のデータアクセス量が決まっていたり、 アクセスが集中した場合に制限をかける場合があります。
簡単に言うと、混雑しているとアクセスしたユーザーはページが表示しにくくなります。

このサイトで紹介している有名なレンタルサーバーのロリポップもプランごとにそういった上限を設けているため、 それを超えると制限がかかります。
ロリポップではそういった場合に「サーバー負荷に関するアクセス制限」といった内容のメールにてお知らせが届きます。
お知らせも来ないまま運営を続けていると、見られないユーザーが多数いることに気付かない場合もあるかと思うので、 こういったお知らせが来ることで気づくことができれば、対策も考えられるので親切だと思います。

この制限というのは、短時間のうちに数千〜数万というPVがあるサイトでの話しなので、 それほどのアクセスが無い場合は気にしなくても良いでしょう。

実際にレンタルサーバー(自サイト)の負荷を下げる方法としては、.htaccessファイルで振り分けたり、PHPで分散させる方法もありますが、 ここではもっとシンプルで、なおかつ効果があり、誰でも簡単にできる方法をお話しします。


画像ファイルを減らしてサーバー負荷を下げる

画像ファイルは比較的小さな物でも、テキストデータより大きくなってしまいます。
それが複数個ある場合、合計すると思っている以上に大きくなります。
更に、ファイルは大きなファイルひとつよりも小さなファイルがたくさんある方が負荷がかかるので、 データ量の割には結構負荷がかかっています。
例えば下記それぞれを読み出す場合、
・ 1MBの画像ひとつ
・ 1KBの画像1000個
共に1MBのデータ量になりますが、後者の方が圧倒的に負荷が高くなります。
比較にならないほど圧倒的差です。

装飾などで小さな画像ファイルを並べている場合や、 たくさんのバナーを並べている場合に、 それらをすべて削除し、テキストに置き換えた場合、 圧倒的にサーバーの負担を減らすことができます。


画像ファイルをインデックスカラーにしてファイルサイズを小さくする

特に大きな画像を表示している場合に効果が期待できるのが、 ファイルモードをRGBではなく、インデックスカラーに変更する方法です。
これは、画像で使用されるカラーパレットを最適化することで、大幅にファイルサイズを小さくすることが出来ます。
使っているPhotoshopやGimpなどの画像加工ソフトでそういったことが出来るので探してみて下さい。
使っている色によっては見た目はほとんど変わらないのに、 ファイルサイズを半分以下に落とすことも出来ます。

これは基本的にはPNGやGIFでの話なのですが、 サムネイル画像などで使う写真、JPGファイルについても検討する価値があります。
そもそもサムネイルなのでそれほど品質が高い必要がないため、 JPGではなくPNGで保存し、それをさらにインデックスカラーにすることでファイルサイズを小さくできます。


大きな写真のサイズや見かたでデータサイズを下げる

近年ではレンタルサーバーの容量が大きくなったことから、 比較的大きな写真を掲載しているサイトも多くなりました。
特に大きな写真の場合元々のファイルサイズが大きいため、縦横100pxずつでも縮小することでだいぶデータ量を減らすことができるので検討します。

大きな写真を載せる場合、通常は小さなサムネイル画像を用意し、一覧などではサムネイル、クリックされると大きな写真の表示、といった流れです。
これをせずに、元々の大きな写真を読み出しながら、表示上だけ小さくしている場合は、 常に大きな写真分のデータを読むことになってしまいます。
特に一覧で載せている場合に各写真がすべて大きな写真を読み込んでいると、 そのページを見た全員が全ての写真をロードすることになるため、相当な通信量となります。
全ての人が全ての写真を見るわけではないので、サムネイル表示することで負荷を減らすことができます。


動画や写真は別サーバーに置いてサーバーの負荷を分散させる

現在(2014年10月)では動画や写真を別サーバーに置いているケースも多くなりました。
特に動画はYouTubeを利用する場合がほとんどです。
これはサーバー容量とは別に、最もデータ量の多い動画を別サーバーから読み出すことで、 圧倒的に自サイトのサーバー負荷を減らすことができるからです。
今は自サイトに動画を直接置いているケースはあまりありませんが、 もしそうで、なおかつサーバー負荷が高いのであれば、 YouTubeなどを利用することも十分検討する価値があります。

同じ理由で写真を載せる場合も、特に実寸などの大きなファイルの場合、 写真投稿サイトなどを利用するのも手です。
直接写真を自サイトに表示できない場合でも、サムネイルを用意し、リンクを張るなどします。

それとは別に、データを置くだけのサーバーを用意する方法もあります。
冒頭で述べた.htaccessやPHPで分散させる場合に使う方法なのですが、 これをページ内で指定することで、.htaccessやPHPを使わなくても良いようにします。
サイト内ではimgフォルダなどを設け、そこに画像を置き、ページからはそのパスを指定するわけですが、 そのimgフォルダそのものを別サーバーに置くわけです。
こうすることでこれまでサーバーひとつに集中していたトラフィックを、 ふたつのサーバーで分散して処理することができます。
.htaccessやPHPを使う場合、動的や平均的に処理を分散させることもできるのですが、 単純にページ内から指定する場合そういうわけにもいかないので、 サーバーごとに1ページ辺りに読み出されるデータ量を分散させなくてはいけません。



特に小さな画像を並べている場合や、大きな写真を載せている場合、 それぞれ対策することで大きくサーバー負荷を下げることができ、 なおかつ費用もかからず比較的簡単にできるので、 とにかく負荷を下げたい場合に検討してみて下さい。



PHPの処理を見直してそもそものサーバー負荷を減らす

プログラミング系のサイトなので一応すこし触れておきます。
コンピューターは通常、
・ 100×100
・ 10×10×10×10
このふたつの演算は後者の方が速くなります。
普通は前者の方が短いため速いような気がしますよね。
CPUやPCの構成によっては違う結果になるかも知れませんが、 特に処理に時間のかかることをしている場合は、 見直すことでサーバーの負荷を下げられるかもしれません。
これは通信量とは全く別ですが、通常はどのレンタルサーバーもPHPによる高負荷は嫌がります。

実は以前に完全消去系のソフトの開発をしたことがあるのですが、 初期の段階よりも、十分見直した後に数倍早くなったことがあります。
もともと数時間かかる処理なので、これは大きな違いでした。
処理の結果は全く同じことを実現しているので、 本当に内部構造を見直しただけです。
1秒で終わる処理であっても、それが0.5秒で終わるようになれば、 倍のユーザー数に対応できることになるため、 PVが多い場合は更にやる価値があります。

PHPと言えば今はWordpressなどを使う場合も多いので、 あまり手を入れたくないかもしれませんが、抜けるところは結構あります。
処理自体を改変するわけではなく、不必要な部分を抜くだけなら簡単です。
何かしらの処理を自分自身で入れた部分については見直す価値もあるでしょう。

また、Javascriptについては処理はユーザーPCになるため、スクリプト処理が重いかどうかは関係なく、 単純にファイルサイズだけの話になります。



サンプル

著作権について
ファイルからデータの読み込み
ファイルへのデータの書き込み
フォルダ内のファイル名取得
アクセスカウンターの作り方
アンケートの作り方
フォームからのデータの取得
フォーム以外のページからのデータの取得
ファイル内、文章内の文字列の検索
パスワード認証の方法と作り方

0から始めるPHP

PHPのすすめ(これ飛ばしてもいい)
必要な環境とPHPへのアクセス
開発に使うもの
初めての方への注意点
PHPの基本(何らかの言語経験者向け)
PHPの基本(初めての人向け)
書き方
ファイルの読み込み

プログラミング講座
文字などの出力
PHPにおける変数
ifによる条件比較
forによる繰り返し処理
PHPにおける配列
これまでとこれからの学び方

PHPの使える
おすすめレンタルサーバー

スタードメイン

レンタルサーバーの選び方


その他

プログラミングのコツ
プログラマーと年齢
誰でも簡単にできるサーバー負荷対策
社内や自宅サーバーのグローバルIPアドレスが変わってもアクセスできるようにする

日記

2014年
日本語形態素データとキーワード出現回数
Androidベースのゲーム機に期待
4月末に判明したIEの脆弱性について
フラッシュプレーヤーの製作
ホームページとウェブサイトの違い
WIFIなどの用語は正しく使いたい
国産ゲーム会社のサイトについて
検索エンジンの開発について
プレインストールWindowsからの脱却
Android・iPhoneとアプリ開発
Windows8、スタートボタンはもういらない?
サイトの作成とやるやらないは別
あの人は詳しいと言う人と言われる人
index.htmlと/の正規化について
AndroidOSとLinuxOS
モバイル端末で必ず見るもの
ユーザー参加型市民アプリ

2013年2月
2013年1月
2012年12月
2012年11月
2012年10月
2012年9月