
ãã®æçš¿ã¯ãGWTã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã®æé©åãšæ¹åã«é¢ããäžé£ã®èšäºã®å§ãŸãã§ãã ç§ã¯ããããã®è³æãèç©ããŠããã®ã§ã2ã3ã®éšåã«åããããšã«ããŸããã
æåã®èšäºã§ç§ãã¡ãåŸ
ã£ãŠãããã®ã説æããŸãã
察åŠãã¹ã質å
GWTã¢ããªã±ãŒã·ã§ã³ã®æé©åã«é¢ããäžé£ã®èšäºã®æåã®éšåã§ã¯ã次ã®ããšã«ã€ããŠèª¬æããŸãã
- ã¯ã©ã€ã¢ã³ãã³ãŒãåé¢ããªã³ããã³ãããŠã³ããŒã
- ã¯ã©ã€ã¢ã³ãã§ã®éãã¯ã©ã¹ã®äœ¿çšãåãé€ã
- ãªãœãŒã¹ãã£ãã·ã³ã°
- RESTã䜿çšããGWT RPCããã©ãŒãã³ã¹ã®åé¡
- ã¬ã€ã¢ãŠããã¢ããªã±ãŒã·ã§ã³ã«äžãã圱é¿ã®ç¹åŸŽ
- äŒéã®æé©å
- ã¹ã±ãžã¥ãŒã©ã䜿çšãã
- ãã£ã¹ãããã£ãŒã䜿çšããŠãµãŒããŒèŠæ±ãéçŽãã
ãããŠä»ãèšåãããåç¹ã«ã€ããŠè©³çްã«èª¬æããŸãã
ã¯ã©ã€ã¢ã³ãã³ãŒãåé¢ããªã³ããã³ãããŠã³ããŒã
GWTã«ã¯ãéçºè
ãã¢ããªã±ãŒã·ã§ã³ãããŒãã«ãã«ãããã§ããçµã¿èŸŒã¿ã¡ã«ããºã ããããŸãã ããã¯ãŸããæ¬¡ã®ç®çã®ããã«å¿
èŠã§ãã
- ããŠã³ããŒãããããŒã¿ã®åæãµã€ãºãæžãã
- é
å»¶ããŒãã®ååã䜿çš-å¿
èŠãªããŒã¿ã¯å¿
èŠã«å¿ããŠã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠããŠã³ããŒããããŸã
ã¯ã©ã€ã¢ã³ãã³ãŒããéšåã«åå²ããã«ã¯ãGWT.runAsyncã¡ãœããã®åŒã³åºãã䜿çšããŸãã
RunAsyncã®äŸïŒ
GWT.runAsync(new RunAsyncCallback() { public void onSuccess() { new MySettingsDialog().show(); } public void onFailure(Throwable ohNoes) {
åæã«ãGWTã³ã³ãã€ã©ã¯ãã¯ã©ã€ã¢ã³ãã³ãŒããåå²ããã ãã§ãªããã³ãŒãã®ã³ãŒãã£ã³ã°æ¹æ³ãåæãã責任ãè² ããŸãã åé¢ãæ£ããããšãä¿èšŒãããŸãã ãã ããåé¢ãçºçããªãå ŽåããããŸãã ãã®çç±ã¯ãã³ãŒãå
ã®çžäºåç
§ã§ããå¯èœæ§ããããŸãã
Google I / Oã䜿çšããGWT Can What Whatãã¬ãŒã³ããŒã·ã§ã³ã§ã¯ãrunAsyncã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãããŠã³ããŒãããåãšåŸã§ã¢ããªã±ãŒã·ã§ã³ã®ããŠã³ããŒãéåºŠãæ¯èŒã§ããŸãã

ãããã£ãŠãrunAsyncã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã®åæããŒãæéã倧å¹
ã«ççž®ãããã¯ã©ã€ã¢ã³ãã«éä¿¡ãããããŒã¿éãåæžãããŸãã
AsyncProxyã¯ã©ã¹ã«æ³šæãã䟡å€ããããŸãã ãããããç§ã¯åœŒã®èª¬æãèšäºã®ç¬¬2éšã§èª¬æããŸããã圌ã®
ææžã«åŸã£ãŠåœŒã«ç²Ÿéããããšãã§ã
ãŸã ã
ã¯ã©ã€ã¢ã³ãã§ã®éãã¯ã©ã¹ã®äœ¿çšãåãé€ã
Google Web Toolkitã°ã«ãŒãããŒãžã§ã¯ãã³ã³ãã€ã«ãããGWTã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºãåæžããæ¹æ³
ã«é¢ããè°è«ãèŠã€ããããšãã§ããŸãã ç¹ã«ãã¯ã©ã€ã¢ã³ãåŽã§ãéããã¯ã©ã¹ã䜿çšããããšãæåŠããã¯ã©ã€ã¢ã³ãåŽã§å€§éã®ã³ãŒããå«ããå¿
èŠããããšããã¢ãããŒããæ³šç®ãããŠããŸãã
ãŸããã¯ã©ã€ã¢ã³ãã§Comparatorã䜿çšããäŸã瀺ããŸãã ããã䜿çšããã«ã¯ãã¯ã©ã€ã¢ã³ãé¢é£éšåã«ã10 Kbã®ã³ãŒãé¢é£ã¯ã©ã¹ãå«ããå¿
èŠããããŸãã
RequestFactoryã䜿çšãããšãã¯ã©ã€ã¢ã³ããããã«å¢å ãââãŸããäžèšã®èª¬æã§ã¯ãã¯ã©ã€ã¢ã³ãéšåã150 Kbå¢å ããŸããã
å€éšã¢ãžã¥ãŒã«ã䜿çšããå Žåãæ³šæãã䟡å€ããããŸã-ãããžã§ã¯ãã«ããããå«ãããšãä»ã®å€ãã®ã¯ã©ã¹ã远å ããããããã¯ã©ã€ã¢ã³ãéšåã倧å¹
ã«å¢å ããå¯èœæ§ããããŸãã
ãªãœãŒã¹ãã£ãã·ã³ã°
ã¯ã©ã€ã¢ã³ãåŽã®HTTPãªã¯ãšã¹ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã€ã¢ã³ãåŽã®éèŠãªããã©ãŒãã³ã¹å¶éã§ãã ã¢ããªã±ãŒã·ã§ã³ãåãªãœãŒã¹ãåå¥ã«èŠæ±ããå Žåããã¹ãŠã®ãªãœãŒã¹ãããŠã³ããŒãããããã®æéã¯é«ããªããŸãã
ã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã®é床äœäžãé²ãããã«ããªãœãŒã¹ãã£ãã·ã³ã°ã«é¢é£ããã¢ãããŒãã䜿çšãããŸãã
GWTã«ã¯ClientBundleãšããã¡ã«ããºã ããããŸãã ClientBundleã¯ãããŸããŸãªã¿ã€ãã®ãªãœãŒã¹ïŒããã¹ããã°ã©ãã£ãã¯ãCSSãªã©ïŒããã£ãã·ã¥ããŸãã ClientBundleã«ã€ããŠã¯
ãã¡ããã芧
ãã ãã ã
ClientBundleã¢ãããŒãã®å©ç¹ïŒ
- å¿
èŠãªãªãœãŒã¹ã¯ã䜿çšããããã³ã«ããŒãããã®ã§ã¯ãªããäžåºŠããŒããããŸã
- ä¿ç®¡ããããªãœãŒã¹ã®åèšéã¯å°ãªããªããŸã
ClientBundleã§ãªãœãŒã¹ã¹ãã¬ãŒãžã®æå°åã¯ã©ã®ããã«æ©èœããŸããïŒ
GWTã§ã§ããããšãã¬ãŒã³ããŒã·ã§ã³ã«æ»ãã ãã®äžã«æ¬¡ã®å³ãèŠãããšãã§ããŸãïŒ

ãããã£ãŠãåãããŒã¿ãæ ŒçŽããããã®ãªãŒããŒããããåæžãããŸãã
çµæãšããŠã©ã®ããã«ãªãœãŒã¹ãåæžã§ããŸããïŒ

RESTã䜿çšããGWT RPCããã©ãŒãã³ã¹ã®åé¡
GWT RPCã¯æ¬åœã«äŸ¿å©ãªããŒã«ã§ãã IDEã®ãµããŒããåããŠããµãŒãã¹ã®ã¯ã©ã€ã¢ã³ãã³ãŒããšãµãŒããŒã³ãŒããæŽçããããã®ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããããšã¯ãGWTã§AJAXã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããçŽ æŽãããæ©èœã®1ã€ã§ãã ãã ããèªåã«åã£ãŠãããã©ãããæ€èšãã䟡å€ããããŸãã
GWT RPCã䜿çšããå Žåã®äž»ãªæ¬ ç¹ã¯ãèŠæ±ã«åé·ãªããŒã¿ãéå°ã«è¿œå ããããããã°ãè€éã«ãªãããšã§ãã
RESTã®äœ¿çšã¯ããããã®åé¡ã®è§£æ±ºçãšããŠæ³šç®ããããšãã§ããŸãã Zack Grossbartã«ãã
èšäºã§ ãGWTãããžã§ã¯ãã«RESTã䜿çšããäŸãèŠã€ããããšãã§ããŸãã
åæã«ã圌ã®
èšäº 4 More GWT Anti-patternsã§ãRESTã®äž»ãªå©ç¹ã«æ³šç®ããŠããŸãã
- RESTã«ãããéçºè
ã¯APIã«ã€ããŠèããããã«ãªããŸãã APIã¯å€éšãµãŒãã¹ãã¢ããªã±ãŒã·ã§ã³ã«ãæäŸã§ããããã察話ã®å©äŸ¿æ§ãšæ©èœã远å ãããŸãã
- ãŠãŒã¶ããªãã£ãã¹ã
- ã¯ã©ã€ã¢ã³ããšãµãŒããŒã®æç¢ºãªåé¢
ã¬ã€ã¢ãŠããã¢ããªã±ãŒã·ã§ã³ã«äžãã圱é¿ã®ç¹åŸŽ
å€ãã®å Žåãgwtéçºè
ã¯èªå調æŽã¬ã€ã¢ãŠãã䜿çšããŸãã ãã®äŸã¯ãã³ã³ããŒãã³ãã§ã®height = "100ïŒ
"ã®äœ¿çšã§ãã contentHeightãoffsetHeightã¯éãæäœã§ãããšèšã䟡å€ããããŸãã 以äžã¯ãGoogle I / O 2009ã®ãããªç§åäœã®æž¬å®ããã¬ãŒã³ããŒã·ã§ã³ããååŸããIEH offsetHeightã©ã³ã¿ã€ã çµ±èšã§ãã

æäœã®çµæãäžååã«äºæž¬ãããã ãã§ã¯ãããŸããã 18åã®æž¬å®ã®ããŒã¯å€ã¯ã85 msã®ãªãŒããŒã®å€ã«éããŸããã
ãµã€ãºå€æŽã€ãã³ãã®å®å
šãªåŠçã«ã¯æéãããããŸãã å€ãã®å Žåã匷å¶ã¬ã€ã¢ãŠãã®å Žåã®ãµã€ãºå€æŽæäœã¯ãã¹ã¿ã€ã«ã®åèšç®ãããæ°åæéãããããŸãã
ã©ãããã°ãã®åé¡ãåãé€ãããšãã§ããŸããïŒ CSSã䜿çšããå¿
èŠããããŸãã CSSã§å®çŸ©ãããã¬ã€ã¢ãŠãã¯ãããé«éã«ã¬ã³ããªã³ã°ããããããã³ã³ããŒãã³ãã®DOMéå±€å
šäœã«å¯ŸããŠoffsetHeightãªã©ã®éãã¡ãœãããåŒã³åºãå¿
èŠããªããªããŸãã
ãµã€ãºå€æŽãªãã·ã§ã³ã§javaScriptã䜿çšããªããæŽæ°ãããDockPanelã䜿çšã§ããŸãã
ãã¹ãããããŠã£ãžã§ããã®å€§ããªããªãŒãäœæããŠä¿åããããšã¯åŒ·ããå§ãããŸããã ãŠã£ãžã§ããã«ã¯è¿œå ã®ãªãŒããŒããããããã䜿çšãããã¡ã¢ãªãšã¯ã©ã€ã¢ã³ãã®ãµã€ãºã«æªåœ±é¿ãåãŒããŸãïŒçµæãšããŠãé床ïŒã HTMLPanelããœãªã¥ãŒã·ã§ã³ãšããŠäœ¿çšã§ããŸãã ããŒãžäžã®ãŠã£ãžã§ããã®æ°ã远跡ããããã«ãInspectorWidgetããŒã«ããããŸãã ãã©ã°ã€ã³ã®ããããã£ã«ã€ããŠã¯ããã®
ããŒãžã§ç¢ºèªã§ããŸã ã
äŒéã®æé©å
ã·ãªã¢ã«åå¯èœãªãªããžã§ã¯ãã¯ãã¯ã©ã€ã¢ã³ããšãµãŒããŒéã§åžžã«éä¿¡ãããŸãã éçºè
ã¯èªåããå¿
èŠããããŸã-æãå¿
èŠãªããŒã¿ã®ã¿ãå®éã«éä¿¡ãããŸããïŒ ãªããžã§ã¯ãã®å€§ããªã°ã©ãããã¹ãããããµããªããžã§ã¯ããããã³äžèŠãªãã©ã¡ãŒã¿ã®ã»ããã¯è²Žéãªæéãè²»ãããäœåãªè² è·ãäœæããŸãã ã¯ã©ã€ã¢ã³ãã§å¿
èŠãªãã®ã ããéä¿¡ããŸãã å€ãã®å ŽåããŠãŒã¶ãŒã«è¡šç€ºããããã®ã®ã¿ã å¿
èŠã«å¿ããŠãããŒã¿ã§å¿
èŠãªãã®ããã¹ãŠå
¥æã§ããŸãã ãã¡ããããã®ã¢ãããŒãã¯ãã¯ã©ã€ã¢ã³ãåŽã§ãªãœãŒã¹ããã£ãã·ã¥ãããšããããªã·ãŒãšççŸããã¹ãã§ã¯ãããŸããã
ã¹ã±ãžã¥ãŒã©ã䜿çšãã
GWTã«ã¯ä¿çäžã®åŒã³åºãã¡ã«ããºã ããããŸãã 以åã¯DeferredCommandãšåŒã°ããŠããŸããããéæšå¥šãšå®£èšãããŸããã çŸåšããã®ã¡ã«ããºã ã¯ã¹ã±ãžã¥ãŒã©ãšåŒã°ããŠããŸãã
ã¹ã±ãžã¥ãŒã©ã¯ãå®éã«ã¢ã¯ã·ã§ã³ãéåæã«å®è¡ããããã®ã¯ã©ã¹ãæäŸããŸãã ãã©ãŠã¶ãŒã®ã€ãã³ãã«ãŒãã®çµäºåŸã«ã¢ã¯ã·ã§ã³ãå®è¡ãããããšãä¿èšŒãããŠããŸãã
å©ç¹ïŒ
- å®è¡ã®ã¹ã¬ããããããã¯ããŸãã
- æåã®UIã€ãã³ããå®äºã§ããŸãã
å€ãã®å Žåãã¹ã±ãžã¥ãŒã©ã¯äžéšã®ãªããžã§ã¯ãã®æ§ç¯ã®åŸåã§äœ¿çšãããŸãã ãã ããå Žåã«ãã£ãŠã¯ãUIã€ãã³ãã®åªå
é äœãããé«ããªããããã¢ããªã±ãŒã·ã§ã³UIãé©åã«äœ¿çšãããšã¢ããªã±ãŒã·ã§ã³UIãé«éã«ãªããŸãã
ãã£ã¹ãããã£ãŒã䜿çšããŠãµãŒããŒèŠæ±ãéçŽãã
ãµãŒããŒãžã®ååŒã³åºãã¯ãå®è¡ã«äžå®ã®é
å»¶ã課ããŸãã ãµãŒããŒã«å¯ŸããŠé »ç¹ã«è€æ°ã®åŒã³åºããè¡ãå¿
èŠãããå Žåã¯ãããããããã€ãã®ãããåäœã«éçŽã§ããŸãã
ããŒãžã§ã³2.3以éãGWTã«ã¯RequestFactoryã䜿çšããæ©èœããããŸãã
requestContext.method1().to(new Receiver<T>(){...}); requestContext.method2().to(new Receiver<T>(){...}); requestContext.fire(new Receiver<Void>(){...});
ãã®ã¢ãããŒãã®å©ç¹ã¯æããã§ã-åŒã³åºãã®æ°ã倧å¹
ã«åæžããããã®çµæãå®è¡ã®é
å»¶ãçºçããŸãã
ãµãŒããŒã®å¿çããã£ãã·ã¥ã§ããå Žåã¯ããã£ãã·ã¥ãããŒãžã£ãŒã䜿çšã§ããŸãã
ãªã³ã¯ãã¯ãªãã¯ããŠããããã®äœ¿ç𿹿³ã確èªã§ããŸãã
çµè«ãšããŠ
GWTã¯ãåªããã¯ãã¹ãã©ãŠã¶ã€ã³ã¿ãŒãã§ã€ã¹ãäœæã§ãã匷åãªããŒã«ã§ãããGoogle以å€ã§æ¢ã«åºã䜿çšãããŠããŸãã ãã ãããã®æã䟿å©ãªããŒã«ã®ããã€ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«é倧ãªå¶éã課ããŠããŸãã ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã®æäœã«æºè¶³ã§ããããã«ãã¢ããªã±ãŒã·ã§ã³ã®é床ãæ
éã«æé©åããå¿
èŠããããŸãã
次åã®èšäºã§ã¯ãããã©ãŒãã³ã¹ã®æ¹åãšGWTã¢ããªã±ãŒã·ã§ã³ã®æé©åã®æ©èœã«ã€ããŠåŒãç¶ã話ãåãäºå®ã§ãã ç¹ã«ãGWT RPCãJS Shrinkãã¯ã©ã€ã¢ã³ãã§ãã€ãã£ãã³ãŒãã䜿çšããæ©èœãã¹ã¯ãªããã®ãµã€ãºãçž®å°ããããã®ãã³ãã®éåºŠãæ¹åããæ¹æ³ãæ€èšããŸãã ãŸããã³ã³ãã€ã«éåºŠã®æé©åã«ã€ããŠè©±ããã€ã³ã¿ãŒãã§ã€ã¹ã®ã¬ã€ã¢ãŠãã«é¢ãããã³ããæäŸããäºå®ã§ãã
ãæž
èŽããããšãããããŸããïŒ
æçšãªãªãœãŒã¹ïŒ
- static.googleusercontent.com/external_content/untrusted_dlcp/www.google.com/en//events/io/2011/static/presofiles/drfibonacci_devtools_high_performance_gwt.pdf
- dl.google.com/io/2009/pres/W_1115_GWTCanDoWhat.pdf
- dl.google.com/io/2009/pres/W_1230_MeasureinMilliseconds-PerformanceTipsforGoogleWebToolkit.pdf
- turbomanage.wordpress.com/2010/07/12/caching-batching-dispatcher-for-gwt-dispatch
- www.zackgrossbart.com/hackito/antiptrn-gwt
- www.zackgrossbart.com/hackito/antiptrn-gwt2
- www.zackgrossbart.com/hackito/gwt-rest
- habrahabr.ru/blogs/gwt/99614