2012/02/17 デブサミ2012【17-A-3】スマートフォンにおけるHTML5実装の最先端 #devsumiA
JavaScript が遅いのは、アルゴリズムか JIT か GC のどれか。 JIT が遅いのはツールを使うと教えてくれる。 GC が遅いのが一番面倒。 #devsumiA
2012-02-17 13:36:49#devsumia JSが重い理由。 ・アルゴリズムが重い(プログラムがタコなのが悪いから直せ) ・JITが遅い(eval、クロージャの生成を疑う。ま、JSLint一発で拾える) ・GCが遅い(これが一番複雑)
2012-02-17 13:36:55DeNA紀平「先日発売されたPlayStation Vitaでも、Canvasは問題なく動作した、互換性についてはCanvasは安心できる」 #devsumiA
2012-02-17 13:37:32DeNA紀平「Canvasはシチュエーションに応じて変わるアニメーションや、同時に動くものが多い時に有効。CSS3は1枚もののアニメーションや、同時に動くものが少ない時に有効。」#devsumiA
2012-02-17 13:37:58CSS3のアニメーションは同時に動く物体数が増えると急激に重くなるとのこと。。 うーん、こういうところでcanvasとの使い分けが発生するのね。すごく為になる!! #devsumiA
2012-02-17 13:38:28Android の full GC は2〜3秒かかることもあるほど遅い。そんなの走らせた瞬間に負け。 V8 は世代別GCを採用しているので、新世代にいるうちに参照を切る。 iOS の safari はメモリ不足で突然落ちる #devsumiA
2012-02-17 13:39:02JavaScriptのgcは重い。AndroidでFull GCが走ると残念なことになる、走らせたら終わり。v8は世代別gcを使用している、なるべく新世代にいる段階で参照をなくすこと。 #devsumiA
2012-02-17 13:39:51#devsumia 何度も使うメモリは予め確保する(頻繁に使う画像は最初にロードする)。メモリの断片化が起こっちゃうので。 上限の決まっているオブジェクトは、初期化時に上限まで確保しておく(オブジェクト生成の回数を減らす。オブジェクトプーリングと解してOKかしら?)
2012-02-17 13:40:54何度も使うメモリはずっと確保しておく。上限の決まってるオブジェクトは、初期化時に上限まで確保しておく。これらのテクでGCを走らせない。 #devsumiA
2012-02-17 13:41:08メモリの扱いについて。何度も使うものは最初に全部ロードする。上限がわかっているオブジェクトは初期化時にその分とっておいて使い回す。 #devsumiA
2012-02-17 13:41:35#devsumi #devsumiA 製造のコツ的な情報を結構多く語っているなー GCが重い、evalが重い....... evalはAPIからリソース取る時バリバリつかっている… ゲームでeval使う事は少ないのかな
2012-02-17 13:41:40DeNA紀平「iOSのSafariでは突然落ちる特性がある。これはメモリ不足で落ちるのをいかに回避するかが重要な問題」 #devsumiA
2012-02-17 13:41:46メモリ使用量は実機上で確認したい。 iPhone Simulator は信用出来ない。 UIWebView に埋め込んでも、 JIT が働かないから信用出来ない。 しゃーないので JailBreak した… #devsumiA
2012-02-17 13:43:23#devsumia メモリとの戦い邪道編。。実機でのメモリ利用量を調べたい。iPhoneシミュレータは信用出来ない。UIWebViewも信用出来ない(JITが働かないため)。 結局、iphoneはジェイルブレイクした。日本では色々グレーなのでat your own riskで。
2012-02-17 13:44:09一昔前のゲーム開発バッドノウハウ集のような感じ。いつの時代もゲーム開発は泥臭い面倒なことをしなきゃならんのだなあ #devsumiA
2012-02-17 13:44:28JB した上で top 走らせて測る。 JS のメモリ使用量が 100MB を超えると危険信号。これを超えると「落ちる」場合が急増する。 #devsumiA
2012-02-17 13:44:57DeNA紀平「メモリとの戦い:王道編として以下の2つがある。①何度も使うメモリをあらかじめ確保する。(頻繁に使う画像は、最初に全部ロードしておく}②上限の決まっているオブジェクトは、初期化時に上限まで確保しておく。(オブジェクト生成の回数を減らす)」 #devsumiA
2012-02-17 13:45:08実機上でのメモリ使用量の確認。脱獄して確認できる。やるならiPodでね。topコマンドでモバイルブラウザのメモリ使用量を監視する。100mぐらいが目安、超えるとiPhone落ちるかも。 #devsumiA
2012-02-17 13:45:15ExGame には自作プロファイラを仕込んである。CanvasなどビルトインAPIも取れるようにしておくと吉。プロファイルの結果は嘘をつかない。プロファイル大事。 #devsumiA
2012-02-17 13:47:12#devsumia プロファイル:ExGameなどでは自作プロファイルを使用。count,total,selfを関数単位で取得。どの関数のプロファイルを取るかを指定(CanvasなどのビルトインAPIも指定可能) プロファイルのタイミングを設定可能 結果はサーバに送信している
2012-02-17 13:47:17DeNA紀平「メモリとの戦い:邪道編。ここからの話は自己責任でお願いしたいが、まずiPhoneシミュレーターでは信用出来ないCPUなどがそもそも違う。UIWideViewもだめ、JITのコンパイルが働かないので効率が異なる」 #devsumiA
2012-02-17 13:47:28DeNA紀平「そこで、Jailbreakや、root権限を取得する方法がある。危険な行為なので、サポート打ち切りの他、脆弱性、また電波法は著作権の問題を考慮し、やるなら注意してやってもらいたい」 #devsumiA
2012-02-17 13:48:22