例のヤツをうちのCelleron機(2GHz)のIE6で動作させてみたら酷いスピードだったので、パフォーマンス改善できないか確認。開発自体はクアッドコアとかいう上等なもの積んだ子のFireofxでやってるので、遅い子のIEで見るとそれはもう愕然とする。Celleron機でもFirefoxで見れば耐えられるスピードなんだけど。
全ての画像をasboluteで配しているのを、floatで一行配置した後に、それを囲んだdivでずいっと移動という形にしてみる。floatの方がnativeな配置だから早くなるかと思ったが、結果は惨敗。
positionを持ってくところではなく、普通に画像を何百枚も描画するのにかかるコストが問題な様子。ていうか、同じ画像を1回ずつLoadしてやがりますね。使用する画像を全部下の方に表示して、画像も含めて全部onloadを通知したら描画スタートということもやってみたのですが、結果は変わらず。ぬう。
IE7の方は同じ画像は1回Loadに留めてくれている様子。ただ、街や城に入る際の動作が重い。F5押した場合より城を出た方が時間がかかるということは、非同期通信の結果を待ってるところが問題か。もしくはElementをRemoveしてるところも危険そう。
非同期通信が問題であれば、画面表示フィールド内の街や城のマップ情報を先読みすれば、なんとかなる。ElementのRemoveが問題の場合は、固定数の画像に対して、src指定を切り替える形にする方法が思いつく。けど、srcの中身変えた時の反応が各ブラウザイマイチ遅い。IEは特に遅い。
それから、キー押下があった際に、Activeになってるウィンドウ(フィールドか、メニューか、メッセージか、どれに命令送るか)を判定させるロジックとして、Activeな要素にactiveという名前のクラスを配置する方法を試してみる。コード的には格好良かったのだけど、結果は惨敗。予想はしていたけど、連打に対して全然弱かった。
やはりそこは変数で判断するとして、キーイベントでころころ値が変わることを考えると、syncronized的なことをしたいのだけど、Javascriptではどうやるのだろう。最悪、セマフォっぽくすればいけるか。
http://www.mwsoft.jp/game/dqp/20090105/dqp.html※基本、昨日と何も変わりなし
※描画をfloatにしたけど、差はないと思う
※試しに下の方で画像先読みしてるけど、やはり差はないと思う
※Xボタンを押すとメニューが出て、そのまま動かなくなる