2007-05-28
2007-05-27
■PHP、array_map と for文の実行速度は for文の方が速い。しかしもっと速いのは・・・。
みんな知っていることかもしれないけれど・・・。
array_map 関数って便利だなー、是非活用しよう!と思ったんですがもしかしたら速度に問題ないだろうか?と思って調べてみました。
ネットで調べたところでは、
というのがあって array_map 関数のほうが速いと書いてありました。
でも簡単に作った比較のスクリプトでは array_map の方が遅くて、for文よりも foreach文の方がはやかったのです。
どうやら、
for($i=0; $i<count($array); $i++ ) {
ここの配列の数を毎回取得しているのが原因なのと $i++ より ++$i の方がはやいらしい。なぜかは今は知りませんw
これを直してテストをしました。
また繰り返しも加えたのと foreach を加えたのと、おまけもあります。
簡単に作ったスクリプトは以下の通り。
<?php function a($a) { return $a . "\n"; } $loop = 50; $array = array_pad(array(), 32000, "a"); $array_count = count($array); /* * array_map の計測 */ $s = 0; $s = microtime(true); for ($l = 0; $l < $loop; ++$l) { $array2 = array_map("a", $array); unset($array2); } $u_map = microtime(true) - $s; /* * for文 の計測 */ $s = 0; $s = microtime(true); for ($l = 0; $l < $loop; ++$l) { for($i = 0; $i < $array_count; ++$i) { $array2[] = a($array[$i]); } unset($array2); } $u_for = microtime(true) - $s; /* * foreach文 の計測 */ $s = 0; $s = microtime(true); for ($l = 0; $l < $loop; ++$l) { foreach($array as $k => $d) { $array2[] = a($d); } unset($array2); } $u_foreach = microtime(true) - $s; /* * foreach文 の計測 * 配列の参照を加えた。 */ $s = 0; $s = microtime(true); for ($l = 0; $l < $loop; ++$l) { foreach($array as $k => $d) { $array2[] = a($array[$k]); } unset($array2); } $u_foreach2 = microtime(true) - $s; echo "array_map: $u_map\n"; echo "for: $u_for\n"; echo "foreach: $u_foreach\n"; echo "foreach2: $u_foreach2\n";
結果は、
array_map: 4.18736886978 for: 4.02036190033 foreach: 4.01496505737 foreach2: 4.30645799637
という感じです。
2007-05-24 [Opera][Wii]インターネットチャンネルの拡張機能について。
■Wii、インターネットチャンネルの拡張機能を少し触ってみました。
インターネットチャンネル向けのウェブページを作りたいのですが…。 : Q&A - Wii
↑を参考にして色々触ってみました。読んでみると isBrowsing が 1 の時の動作が微妙かな?と思いましたが本当に微妙なところがありました。
もうひとつ微妙だと思ったのは2本目以降のリモコンのリンクなどへのイベントかな。2本目以降の当たり判定は自作になりそう。
- dpdDistance と dpdValidity は isBrowsing が 1 のリモコンからしか取得できない、っぽい。
- dpdScreenX, dpdScreenY という画面のピクセル数を基にした座標の数値を取得するプロパティがある。isBrowsing の値には関係なし。しかし画面外にカーソルがあるときはこのプロパティが存在しないようになる。
- isBrowsing が 1 の時は拡張機能によるボタンフラグの取得ができない。
- しかしキーイベントから取得が可能である。参考:bolinfestivus home
- しかししかし isBrowsing が 0 のリモコンはボタンフラグから値の取得が可能で、ボタンを押しっぱなしにすると連続して値が取得できるが、isBrowsing が 1 のリモコンで使わざるを得ないキーイベントでは押した瞬間しか値が取れない。
- isBrowsing が 0 のリモコンはリンクにカーソルを当ててもクリックができないし、ロールオーバーイベントも取得できない。
- 複数リモコンでゲームを作るには、isBrowsing が 1 の時はボタンのイベントが微妙で、isBrowsing が 0 の時は当たり判定を独自に実装する必要あり、かと。
- no title http://flix.2kki.com/sample/wii/test.html ここで色々テストできます。
isBrowsing が 1 でも 0 でも同一の操作性を持たせるライブラリができると嬉しいですね。
2007-04-22 [JavaScript][Firefox][Opera]Google in Sidebar 機能追加。
■Google in Sidebar に機能を追加しました!
詳しい使い方は前回の日記[Firefox][Opera][Sidebar]サイドバーにGoogle検索を。 - フリックスの日記をごらんいただくと分かります。
検索結果をタブで切り替えられるように機能を変更しました。
タブの数を増やすと折り返しがあるとタブの画像が変なところで折れたりしてしまいます・・・。
画像でタブを表現しなくても別にいいかな〜、なんて思ってますがどんなもんでしょ?
Ajax の動作は jQuery を利用しています。
あと JavaScript でのクラスの実装や、 prototype も理解できるようにコーディングしていきました。
何か気がついた点などありましたらご意見ください・・・。
2007-03-25 [Firefox][Opera][Sidebar]サイドバーにGoogle検索を。
■サイドバーにGoogle検索を。
Firefox のツールバー周りが見直されてきているのかな?
サイドバーで Google 検索ができるようしてみました。
FORM の acition とリンクのターゲットを、サイドバーにするのか、メインとなる画面へのリンクとするのかを制御しているぐらいが特徴です。
勢いで作った、ってやつです。
これで検索結果を常に見える位置に置いて実際のページを開き、次のページを見るときに毎回閉じたりウィンドウを切り替えたりする必要がなくなります。
こんな感じ
Firefox のサイドバーに追加する方法
Opera のサイドバーに追加する方法
「関連検索」と「次へ」はこれから実装してみたいと思います。




