Ad Network

あわせて読みたい

  • あわせて読みたい

« 優秀なエンジニアは「入社時のスキルを問わない会社」には就職してはいけない | Main | 「au向けのiPhoneは作ってはいけない」という契約になっている(らしい) »

ianime.jsの高速化

 先日公開した、iPhone/iPod touch用アニメーション・ライブラリ「ianime.js」、夕食を食べながらもっと早くできそうなアイデアが浮かんだのでちょっとトライ。これが思い通りの効果を出して、50個のアイコンを特別な効果なしに動かした時のフレームレートを11fpsから15fpsに改善。

 iPhone/iPod touchのJavascriptの実行があまりに遅いので、ちょっとでも余計な条件判定やファンクションコールが入るだけで格段に遅くなる。そこを上手に避けながら、かつさまざまなオプション機能を提供する、というのはなかなか難しい。

 ちなみに今回のデモは、アイコンの落ちるスピードに少し変化を持たせたベンチマーク。これだとその変化の分だけ遅くなり14fpsほどだが、ちょっとした落ちゲー(「さめがめ」とか「bejewlled」)の効果には十分。「連鎖」だってこなせる^^。

http://satoshi.blogs.com/ianime/test20.html

  ◇ ◇ ◇

 しかし、javascriptのsetIntervalには悩まされてしまった。コールバック関数にthisを渡す方法がなかなか見つからずに、色々と無駄なことをしてしまったのだ。結論から言えば、

var self = this;
setInterval(function() {self.callback();}, 33);

で良かったのだが、この二行にたどり着くまでにいったい何行の無駄なコードを書いたのだろう(短い文章を書く方が時間がかかるというが、プログラムも同じだ)。

 どうして

setInterval(this.callback, 33);

setInterval(function() {this.callback();}, 33);

ではだめなのかをちゃんと理解している人ってどのくらいいるんだろう?このあたりの「直感的なプログラミングのしにくさ」っていうのがJavascriptの欠点だと私は思っているんだが、どうなんだろう。

TrackBack

TrackBack URL for this entry:
http://www.typepad.com/services/trackback/6a00d8341c4f9853ef00e54f8ff7058834

Listed below are links to weblogs that reference ianime.jsの高速化:

» ianime.js使ってみた from にゃにゃん.と
仲島さんのBlogのコメント欄に書いてたけど長く成ったので、 trackbackすることにする。 元記事はこの辺。 ianime.js、iPhone/iPod touch 用アニメーション・ライブラリ ianime.jsの高速化 普段あんま... [Read More]

» [javascript]setInterval(this.callback, 33)がうまく動かない理由 from y/n
http://satoshi.blogs.com/life/2007/11/ianimejs-1.html で言っているselfとthisの違いをちょっとだけまとめてみるね。  しかし、javascriptのsetIntervalには悩まされてしまった。コールバック関数にthisを渡す方法がなかなか見つからずに、色々と無駄なことをしてしまっ... [Read More]

» javascriptのsetInterval from Awakenings
ianime.jsの高速化より。 JavaScript の setInterval で、第一引数に渡す関数に this を使った記述をしていると、思ったとおりに動かないというもの。最近JavaScriptに腰を入れてみようかと思っていたのでちょうどよいと思い、少し調べたり動かしたりしてみた。中島さんのでいえば、次の4つ目のものでしか思ったとおりの動きはしない。 this.callbackを直接記述 setInterval(this.callback, 33); this.callbackを... [Read More]

Comments

rivertop

はじめまして

一番下のコードのほうは無名のfunctionのthisなんだから、つまりfunctionもオブジェクトであるというJavaScriptの仕様からしたらそのメソッドであるcallback()を呼び出してるのはなんだかヘンな事をしてるなあと言うか不思議な感じがします。

ただ、その上のthis.callback();を渡してる方がうまくいかないのは、まあなんだか直感的じゃあない気はしますね。へぇ意図したように動かないんだ・・・という。

Post a comment

This weblog only allows comments from registered users. To comment, please Sign In.