2012/02/17 デブサミ2012【17-A-3】スマートフォンにおけるHTML5実装の最先端 #devsumiA

10年後も世界で通じるエンジニアであるために Developers Summit 2012 http://codezine.jp/devsumi/2012 <講演概要> 続きを読む
0
Emma Haruka Iwao @Yuryu

JavaScript が遅いのは、アルゴリズムか JIT か GC のどれか。 JIT が遅いのはツールを使うと教えてくれる。 GC が遅いのが一番面倒。 #devsumiA

2012-02-17 13:36:49
ヤコペッティ @jacotan

#devsumia JSが重い理由。 ・アルゴリズムが重い(プログラムがタコなのが悪いから直せ) ・JITが遅い(eval、クロージャの生成を疑う。ま、JSLint一発で拾える) ・GCが遅い(これが一番複雑)

2012-02-17 13:36:55
nyamairi @nyamairi

JavaScriptは、JITを何度も呼び出すような記述(eval,クロージャ)をしてはいけない。 #devsumiA

2012-02-17 13:37:09
フルスイング by DeNA @DeNA_fullswing

DeNA紀平「先日発売されたPlayStation Vitaでも、Canvasは問題なく動作した、互換性についてはCanvasは安心できる」 #devsumiA

2012-02-17 13:37:32
フルスイング by DeNA @DeNA_fullswing

DeNA紀平「Canvasはシチュエーションに応じて変わるアニメーションや、同時に動くものが多い時に有効。CSS3は1枚もののアニメーションや、同時に動くものが少ない時に有効。」#devsumiA

2012-02-17 13:37:58
いっさん @issps2009

CSS3のアニメーションは同時に動く物体数が増えると急激に重くなるとのこと。。 うーん、こういうところでcanvasとの使い分けが発生するのね。すごく為になる!! #devsumiA

2012-02-17 13:38:28
Emma Haruka Iwao @Yuryu

Android の full GC は2〜3秒かかることもあるほど遅い。そんなの走らせた瞬間に負け。 V8 は世代別GCを採用しているので、新世代にいるうちに参照を切る。 iOS の safari はメモリ不足で突然落ちる #devsumiA

2012-02-17 13:39:02
nyamairi @nyamairi

JavaScriptのgcは重い。AndroidでFull GCが走ると残念なことになる、走らせたら終わり。v8は世代別gcを使用している、なるべく新世代にいる段階で参照をなくすこと。 #devsumiA

2012-02-17 13:39:51
TA-29 @futabachannel

Canvasが流行るのは嫌だなと思ってるがCSS3は互換性や速度面でしんどいようだ #devsumiA

2012-02-17 13:40:53
ヤコペッティ @jacotan

#devsumia 何度も使うメモリは予め確保する(頻繁に使う画像は最初にロードする)。メモリの断片化が起こっちゃうので。 上限の決まっているオブジェクトは、初期化時に上限まで確保しておく(オブジェクト生成の回数を減らす。オブジェクトプーリングと解してOKかしら?)

2012-02-17 13:40:54
Emma Haruka Iwao @Yuryu

何度も使うメモリはずっと確保しておく。上限の決まってるオブジェクトは、初期化時に上限まで確保しておく。これらのテクでGCを走らせない。 #devsumiA

2012-02-17 13:41:08
nyamairi @nyamairi

メモリの扱いについて。何度も使うものは最初に全部ロードする。上限がわかっているオブジェクトは初期化時にその分とっておいて使い回す。 #devsumiA

2012-02-17 13:41:35
もぐろふくぞー @mogurohukuzo

#devsumi #devsumiA 製造のコツ的な情報を結構多く語っているなー GCが重い、evalが重い....... evalはAPIからリソース取る時バリバリつかっている… ゲームでeval使う事は少ないのかな

2012-02-17 13:41:40
フルスイング by DeNA @DeNA_fullswing

DeNA紀平「iOSのSafariでは突然落ちる特性がある。これはメモリ不足で落ちるのをいかに回避するかが重要な問題」 #devsumiA

2012-02-17 13:41:46
Emma Haruka Iwao @Yuryu

メモリ使用量は実機上で確認したい。 iPhone Simulator は信用出来ない。 UIWebView に埋め込んでも、 JIT が働かないから信用出来ない。 しゃーないので JailBreak した… #devsumiA

2012-02-17 13:43:23
ヤコペッティ @jacotan

#devsumia メモリとの戦い邪道編。。実機でのメモリ利用量を調べたい。iPhoneシミュレータは信用出来ない。UIWebViewも信用出来ない(JITが働かないため)。 結局、iphoneはジェイルブレイクした。日本では色々グレーなのでat your own riskで。

2012-02-17 13:44:09
nagaseyasuhito @nagaseyasuhito

一昔前のゲーム開発バッドノウハウ集のような感じ。いつの時代もゲーム開発は泥臭い面倒なことをしなきゃならんのだなあ #devsumiA

2012-02-17 13:44:28
Emma Haruka Iwao @Yuryu

JB した上で top 走らせて測る。 JS のメモリ使用量が 100MB を超えると危険信号。これを超えると「落ちる」場合が急増する。 #devsumiA

2012-02-17 13:44:57
ヤコペッティ @jacotan

#devsumia JBしたiPhoneでtopの統計をとった。 メモリ使用量が100MBを超えたら危険信号と考えると良い。

2012-02-17 13:45:04
フルスイング by DeNA @DeNA_fullswing

DeNA紀平「メモリとの戦い:王道編として以下の2つがある。①何度も使うメモリをあらかじめ確保する。(頻繁に使う画像は、最初に全部ロードしておく}②上限の決まっているオブジェクトは、初期化時に上限まで確保しておく。(オブジェクト生成の回数を減らす)」 #devsumiA

2012-02-17 13:45:08
nyamairi @nyamairi

実機上でのメモリ使用量の確認。脱獄して確認できる。やるならiPodでね。topコマンドでモバイルブラウザのメモリ使用量を監視する。100mぐらいが目安、超えるとiPhone落ちるかも。 #devsumiA

2012-02-17 13:45:15
Emma Haruka Iwao @Yuryu

ExGame には自作プロファイラを仕込んである。CanvasなどビルトインAPIも取れるようにしておくと吉。プロファイルの結果は嘘をつかない。プロファイル大事。 #devsumiA

2012-02-17 13:47:12
ヤコペッティ @jacotan

#devsumia プロファイル:ExGameなどでは自作プロファイルを使用。count,total,selfを関数単位で取得。どの関数のプロファイルを取るかを指定(CanvasなどのビルトインAPIも指定可能) プロファイルのタイミングを設定可能 結果はサーバに送信している

2012-02-17 13:47:17
フルスイング by DeNA @DeNA_fullswing

DeNA紀平「メモリとの戦い:邪道編。ここからの話は自己責任でお願いしたいが、まずiPhoneシミュレーターでは信用出来ないCPUなどがそもそも違う。UIWideViewもだめ、JITのコンパイルが働かないので効率が異なる」 #devsumiA

2012-02-17 13:47:28
フルスイング by DeNA @DeNA_fullswing

DeNA紀平「そこで、Jailbreakや、root権限を取得する方法がある。危険な行為なので、サポート打ち切りの他、脆弱性、また電波法は著作権の問題を考慮し、やるなら注意してやってもらいたい」 #devsumiA

2012-02-17 13:48:22