ページ読込速度を意識したプログラミング | CyberAgent SEO Information  (サイバーエージェントSEO情報ブログ)

CyberAgent SEO Information  (サイバーエージェントSEO情報ブログ)

サイバーエージェントSEOラボです。当ブログでは、皆様がウェブサイトを運営するにあたって必要となるSEOに関する情報をご提供して参ります。

動的なWEBサイトでは、PHPという言語が多く使われています。
PHPは文字列処理に優れるなど、WEBサイトの作成などが行いやすいよう設計されているため、
WEB系の開発者には重宝される言語です。

さて、情報ポータルなどでよく見られるサイトとして、大量のデータが格納されたデータベースから、
特定の情報を抽出して表示させるようなシステムがあります。

このようなサイトもPHPで書かれることが多いのですが、多くの情報を扱うようなサイトでは、
「配列」という概念が多用されます。

PHPで気を付けなければいけない関数の1つとして、この「配列」を扱う関数が挙げられます。
配列を扱う関数には、shuffle関数や、array_search関数などがあります。

これらの関数の多くは、取り扱うデータの数が多くなれば多くなるほど、
大きな処理時間がかかってしまいます。

実際に、shuffle関数を使って検証してみましょう。

shuffle関数は、「配列をランダムに並び替える」という
単純ですが非常に便利な関数です。

「たくさんのデータが格納された配列から、無作為に1つ値を抜き出したい」
ということは、開発者としてはよくあることです。

では、上のような条件を満たすプログラムを実際に作ってみます。

【プログラム①】

<?php
//データ数が3,000,000件の配列を作成
for($i = 0; $i<3000000; $i++){
$array[] = "search data $i";
}
shuffle($array); //配列並び替え
$result = $array[0]; //並び替えた配列の先頭を抜き出す

echo $result; //抜き出した配列を出力
?>

上記のプログラムは、3,000,000件の配列をshuffle関数を用いてバラバラに並び替え、
その先頭の値を抜き出すことで条件を満たします。

さて、このプログラムについて、shuffle関数の前後で経過時間を取得してみると、

【経過時間①】

1.8739120960236 秒

マイクロ秒まで取得しましたが、おおよそ1.9秒ですね。

どうでしょう?多くの人は、「たかが1.9秒」と思うかもしれません。
しかし、この配列数は3,000,000件で、もっと多くのデータ数の配列を使う場面も出てきます。

また、上記の例では、1次元配列となっておりますが、これが多次元配列になると
さらに処理速度は遅くなってしまいます。

しかし、上記のプログラムは、ちょっと手を加えれば処理時間が大幅に向上します。
下に例を書いてみました。

【プログラム②】

<?php
//データ数が3,000,000件の配列をさくせい
for($i = 0; $i<3000000; $i++){
$array[] = "search data $i";
}
$rand = mt_rand(0, 2999999); //0~2999999までのランダムな値を取得
$result = $array[$rand]; //上をキーにして配列から抜き出す

echo $result; //抜き出した配列を出力
?>

これは配列を直接操作せず、配列のキー(ここでは0~2999999)の中からランダムに数値を取得し、
その数値をキーとして配列の要素を取得するといったものです。

結果はプログラム①同様、プログラムを実行するごとに完全にランダムに配列を1つ
抜き出せるようになっています。

さて、このプログラムの配列抜き出し部分(6~7行目)の前後の時間経過を同様に取得してみると、

【経過時間②】

0.0000491142272 秒

ほとんど時間がかかっていません。

このように、ある目的を果たすことができるプログラムは、1つではありません。
複数の選択肢から、よりページ読み込み速度が早いものを選び、ユーザフレンドリーなWEBサイトを
意識することが、SEOとしての効果にも直結するのではないでしょうか。

(坪 昌史)