gwt♥html5

41
GWT HTML5 @tan_go238 Friday, September 17, 2010

Upload: go-tanaka

Post on 08-May-2015

1.403 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: GWT♥HTML5

GWT ♥ HTML5@tan_go238

Friday, September 17, 2010

Page 2: GWT♥HTML5

Agenda

・GWTって何?

・GWTを使うメリット

・GWTの最適化処理

・GWTを始めよう

・GWTとHTML5

Friday, September 17, 2010

Page 3: GWT♥HTML5

Agenda

・GWTって何?

・GWTを使うメリット

・GWTの最適化処理

・GWTを始めよう

・GWTとHTML5

Friday, September 17, 2010

Page 4: GWT♥HTML5

GWT?

Google Web Toolkit

Java で書かれたソースコードからコンパイルして

Ajax アプリケーションを生成します

JavaCompile

JavaScript

Friday, September 17, 2010

Page 5: GWT♥HTML5

Agenda

・GWTって何?

・GWTを使うメリット

・GWTの最適化処理

・GWTを始めよう

・GWTとHTML5

Friday, September 17, 2010

Page 6: GWT♥HTML5

・ブラウザ固有の動作への対応を書かずにすむ

・速度やファイルサイズを減らす処理を最適化

GWTを使うメリット

特にスピードに関してはスゴいこだわりがあるex) ImageResource, Inliner

Friday, September 17, 2010

Page 7: GWT♥HTML5

・ブラウザ固有の動作への対応を書かずにすむ

GWTを使うメリット

Friday, September 17, 2010

Page 8: GWT♥HTML5

Agenda

・GWTって何?

・GWTを使うメリット

・GWTの最適化処理

・GWTを始めよう

・GWTとHTML5

Friday, September 17, 2010

Page 9: GWT♥HTML5

・Deferred Binding

・Code Splitting

・Perfect Caching

GWTの最適化処理

Friday, September 17, 2010

Page 10: GWT♥HTML5

Deferred Binding

Friday, September 17, 2010

Page 11: GWT♥HTML5

“Deferred Binding is Google Web Toolkit's answer to Java reflection.”

Deferred Binding

http://code.google.com/webtoolkit/doc/1.6/FAQ_Client.html#What_is_Deferred_Binding?

Friday, September 17, 2010

Page 12: GWT♥HTML5

Deferred Binding

Single JavaCode Base

http://www.youtube.com/watch?v=nvti32k4xyU

Your Code

FireFox 1.0.x

en_US

Your Code

IE6

en_UK

Your Code

Safari 2.0.x

fr_FR

Your Code

Opera 9

fr_CA

Download exactly what you need in a single, optimized,

can’t-go-wrong chunk

Then cache it on the clientuntil the sun explodes

1D04ADDA.cache.html 15F361B8.cache.html

7EFE4D24.cache.html D415D917.cache.html

Friday, September 17, 2010

Page 13: GWT♥HTML5

Deferred Binding

<module>  <!-- Fall through to this rule is the browser isn't IE or Mozilla -->  <replace-with class="com.google.gwt.user.client.ui.impl.PopupImpl">    <when-type-is class="com.google.gwt.user.client.ui.impl.PopupImpl"/>  </replace-with>

  <!-- Mozilla needs a different implementation due to issue #410 -->  <replace-with class="com.google.gwt.user.client.ui.impl.PopupImplMozilla">    <when-type-is class="com.google.gwt.user.client.ui.impl.PopupImpl" />    <any>      <when-property-is name="user.agent" value="gecko"/>      <when-property-is name="user.agent" value="gecko1_8" />    </any>  </replace-with>

  <!-- IE has a completely different popup implementation -->  <replace-with class="com.google.gwt.user.client.ui.impl.PopupImplIE6">    <when-type-is class="com.google.gwt.user.client.ui.impl.PopupImpl"/>    <when-property-is name="user.agent" value="ie6" />  </replace-with></module>

private static final PopupImpl impl = GWT.create(PopupImpl.class);

Friday, September 17, 2010

Page 14: GWT♥HTML5

Code Splitting

Friday, September 17, 2010

Page 15: GWT♥HTML5

Code Splitting

最初のロード時にはダウンロードしないが

実行されたときに初めてダウンロード・実行する

    Button b = new Button("Click me", new ClickHandler() {      public void onClick(ClickEvent event) {        GWT.runAsync(new RunAsyncCallback() {          public void onFailure(Throwable caught) {            Window.alert("Code download failed");          }          public void onSuccess() {            Window.alert("Hello, AJAX");          }        });      }    });

Friday, September 17, 2010

Page 16: GWT♥HTML5

How GWT Loads Code

Browser Server

Host Page (Module.html)

Selection Script(module.nocache.html)

Permutation Script(Strongly-named.cache.html)

onload

Module starts running

runAsync Fragments

Code Splitting

Friday, September 17, 2010

Page 17: GWT♥HTML5

Code Splitting

Friday, September 17, 2010

Page 18: GWT♥HTML5

Perfect Caching

Friday, September 17, 2010

Page 19: GWT♥HTML5

・ファイルがキャッシュされているかどうか 気にしなくてもよい

Perfect Caching

・Bootstrapスクリプトは <app_name>.nocache.js として生成(キャッシュしない、ファイルサイズは小さい)

・それ以外のファイルは <md5>.cache.html として生成 (ファイルサイズは大きいがキャッシュされる) ※コードに変更があればmd5の値が変わるので再度キャッシュされる

Friday, September 17, 2010

Page 20: GWT♥HTML5

Agenda

・GWTって何?

・GWTを使うメリット

・GWTの最適化処理

・GWTを始めよう

・GWTとHTML5

Friday, September 17, 2010

Page 21: GWT♥HTML5

必要なモノ

・Eclipse

・Goole Plugin for Eclipse

・GWT SDK

http://code.google.com/webtoolkit/usingeclipse.html

Friday, September 17, 2010

Page 22: GWT♥HTML5

プロジェクトの作成1. File→New→Web Application Project を選択2. Project name を gwtdemo とする3. Use Google Web Toolkit と Use Google App Engine の両方に チェックを入れて Finish をクリック

※Google App Engineは必須では無いが簡単に試すには ちょうどいいので今回使用した

Friday, September 17, 2010

Page 23: GWT♥HTML5

プロジェクトの実行

1. 生成されたプロジェクトを右クリック Run As → Web Application

2. 表示されたURL(http://127.0.0.1:8888/Gwtdemo.html?gwt.codesvr=127.0.0.1:9997)

 をブラウザで確認する ※開発モードの場合はブラウザにプラグインのインストールが必要

Friday, September 17, 2010

Page 24: GWT♥HTML5

コンパイルの実行

1. ツールバーから      をクリックする

2. プロジェクトとEntry Point を指定して Compile を実行

Friday, September 17, 2010

Page 25: GWT♥HTML5

Agenda

・GWTって何?

・GWTを使うメリット

・GWTの最適化処理

・GWTを始めよう

・GWTとHTML5

Friday, September 17, 2010

Page 26: GWT♥HTML5

GWT+HTML5

HTML5とは何か?

・Audio and Video elements

・Canvas

・WebGL

・WebSockets

・CSS3

・Local Storage

Friday, September 17, 2010

Page 27: GWT♥HTML5

GWT+HTML5

GWT support for HTML5

・Javaのラッパークラスを書くのはとても簡単

・既にたくさんのオープンソースプロジェクトがある

・それらは将来GWTに取り込まれる予定(~2.2)

・GWTのコアにはまだ取り込まれていない

  → クロスブラウザ対策

  → HTML5の機能を全てのブラウザが実装していない

Friday, September 17, 2010

Page 28: GWT♥HTML5

GWT+HTML5

GWT support for HTML5

本格的なゲームをGWTで書くとどうなるのか?

Friday, September 17, 2010

Page 29: GWT♥HTML5

GWT+HTML5Jake2とは

Quake2というゲームエンジンのJava版

レンダリングにはLWJGL(Light Weight Java OpenGL)

を使用している

Friday, September 17, 2010

Page 30: GWT♥HTML5

GWT+HTML5

Demo

Quake II in the Browser

Friday, September 17, 2010

Page 31: GWT♥HTML5

GWT+HTML5

問題点

Quake II in the Browser

詳しくは http://code.google.com/events/io/2010/sessions/gwt-html5.html を参照

Friday, September 17, 2010

Page 32: GWT♥HTML5

GWT+HTML5

Problems porting Jake2 to GWT

・LWJGLをWebGLに変換しないといけない

 → LWJGLはOpenGL 1.x を元に作られていてデータ通信に

   Java nio buffersを使用する

 → WebGLは OpenGL ES 2.0ベースでデータ通信に

   WebGL arrays, buffersを使用する

Friday, September 17, 2010

Page 33: GWT♥HTML5

GWT+HTML5

Problems porting Jake2 to GWT

LWJGLをWebGLへのポーティング

・ OpenGL 1.xのエミュレートすることは可能

・しかし、WebGLのDOMベースの画像ローディングは使用できない

・ピクセルレベルの画像の扱いはJavaScriptでは非力

Friday, September 17, 2010

Page 34: GWT♥HTML5

GWT+HTML5

Problems porting Jake2 to GWT

http://code.google.com/events/io/2010/sessions/gwt-html5.html

Friday, September 17, 2010

Page 35: GWT♥HTML5

GWT+HTML5

Problems porting Jake2 to GWT

 その他の問題

・No file system in the browser

 

・XHRs are asynchronous & No UDP support

 

 

Friday, September 17, 2010

Page 36: GWT♥HTML5

GWT+HTML5

Problems porting Jake2 to GWT

その他の問題

・No file system in the browser

 → シンプルなファイルシステムをLocal Storageを使って実装

・XHRs are asynchronous & No UDP support

 

 

Friday, September 17, 2010

Page 37: GWT♥HTML5

GWT+HTML5

Problems porting Jake2 to GWT

その他の問題

・No file system in the browser

 → シンプルなファイルシステムをLocal Storageを使って実装

・XHRs are asynchronous & No UDP support

 → UDPの代わりに WebSocket を使用

 → リソースを非同期に取得(ローディング中はフレームをスキップするようにする)

Friday, September 17, 2010

Page 38: GWT♥HTML5

GWT+HTML5

Problems porting Jake2 to GWT

他にも問題は山積み...

Mesh animation: Quake II animations based on keyframes Point-cloud linear interpolation: terrible in Javascript  Move this to the vertex shader

GWT compiler optimizations: Initializing small arrays is too complex Lazy static initializers hit too oftenBrowser improvements:

 Parsing binary data is incredibly slow in Javascript  Make WebGL TypedArrays general mechanism for operating on binary data Spec and    FPS depending on window size hints at potential frame buffer handling improvements

LocalStore is synchronous but has limited capacity

Friday, September 17, 2010

Page 39: GWT♥HTML5

GWT+HTML5

Wrapping Up

・HTML5で”native”なアプリを作れる日は遠くない

・将来的にGWTはHTML5関連のAPIをCoreに入れるはず

・それを使うとブラウザ互換とか気にせずガンガン

 HTML5なアプリが作れる!

・更に最適化の処理もコンパイル時に自動的にしてくれる!

Friday, September 17, 2010

Page 40: GWT♥HTML5

Links

Google Web Toolkit

http://code.google.com/webtoolkit/overview.html

http://code.google.com/events/io/2010/sessions.html#GWT

Google I/O 2010 Sessions

Friday, September 17, 2010

Page 41: GWT♥HTML5

ご清聴ありがとうございました

Friday, September 17, 2010