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としての効果にも直結するのではないでしょうか。
(坪 昌史)