æè¿ãç§ã¯å¹žéã«ãã翻蚳ã«é¢ããè峿·±ãèšäºã«åºäŒããŸããã ä»åã¯ãHTML5ãã£ã³ãã¹ã®ããã©ãŒãã³ã¹ã«é¢ããHTML5Rocksã®èšäºã§ãã èè
ã¯ãã¢ããªã±ãŒã·ã§ã³ãäœæãããšãã«éçºè
ãç«ã¡åããç¹å®ã®å£ã«ã€ããŠæžããŠããŸãã å°ãåã«ãå€ãè¯ãã²ãŒã ãCanvasã«ç§»æ€ãããšãã«ãééããŸããã
æ®å¿µãªããããªãªãžãã«ã®ã°ã©ãã£ãã¯ã¯iframeãä»ããŠæ¿å
¥ãããŸãã åçãæ®ã£ãŠç»åãé
眮ããããšã¯ã§ããŸãããèè
èªèº«ãé¢é£ããã°ã©ããšæŽæ°ãããã°ã©ããé
眮ããã®ã§ãããããžã®ãªã³ã¯ãæçš¿ããŸããã çŽ æµãªèªæžãïŒ
- ãšã³ããªãŒ
- æ§èœè©Šéš
- ä»®æ³ãã£ã³ãã¹ã§äºåã¬ã³ããªã³ã°
- ã°ã«ãŒãé話
- äžèŠãªç¶æ
倿Žãé¿ãã
- ãã£ã³ãã¹å
šäœã§ã¯ãªããéãã®ã¿ãæã
- è€éãªã·ãŒã³ã«ã¬ã€ã€ãŒããã£ã³ãã¹ã䜿çšãã
- shadowBlurãé¿ãã
- ç»é¢ãã¯ãªã¢ããããŸããŸãªæ¹æ³
- æŽæ°ä»¥å€ã®åº§æšãé¿ãã
- ãrequestAnimationFrameãã§ã¢ãã¡ãŒã·ã§ã³ãæé©åãã
- ã»ãšãã©ã®ã¢ãã€ã«ãã£ã³ãã¹ã®å®è£
ã¯é
ã
- ãããã«
- åç
§è³æ
ãšã³ããªãŒ
Appleã®å®éšãšããŠå§ãŸã£ãHTML5ãã£ã³ãã¹ã¯ãã€ã³ã¿ãŒãããäžã®2D
ãã€ã¬ã¯ãã°ã©ãã£ãã¯ã¹ã§æãåºãåãå
¥ããããŠããæšæºã§ãã å€ãã®éçºè
ã¯ãããŸããŸãªãã«ãã¡ãã£ã¢ãããžã§ã¯ããèŠèŠåãã²ãŒã ã§ããã䜿çšããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã®è€éããå¢ãã«ã€ããŠãéçºè
ã¯ããã©ãŒãã³ã¹ã®å£ã«å¶ç¶ã«åºããããŸãã
ãã£ã³ãã¹ã®æé©åã«ã¯å€ãã®ãããªãã¯ããæ£åšããŠããŸãã ãã®èšäºã®ç®çã¯ããããããŸãšããŠãéçºè
ãèªã¿ããããªãœãŒã¹ãäœæããããšã§ãã ãã®èšäºã«ã¯ãã³ã³ãã¥ãŒã¿ãŒã°ã©ãã£ãã¯ã¹ã®ãã¹ãŠã®é åã«é©çšãããåºæ¬çãªæé©åãšããã£ã³ãã¹ã®å®è£
ãé²åããã«ã€ããŠå€åãããã£ã³ãã¹ã®ç¹å®ã®ææ³ã®äž¡æ¹ãå«ãŸããŠããŸãã ç¹ã«ãGPUã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã䜿çšããããšã説æãããŠããææ³ã®ããã€ãã¯ããŸãéèŠã§ã¯ãªããªããŸãã å¿
èŠã«å¿ããŠããã瀺ãããŸãã
ãã®èšäºã¯HTML5ãã£ã³ãã¹ãã¥ãŒããªã¢ã«ã§ã¯ãªãããšã«æ³šæããŠãã ããã ãã ããHTML5Rocksã®é¢é£
èšäº ãã
Dive into HTML5ãã®ç« ãããã³
MDNã®ã¬ãã¹ã³ãåŠç¿ã§ããŸãã
æ§èœè©Šéš
HTML5ãã£ã³ãã¹ã®ããŒã¹ã®éãäžçã§ã¯ã
JSPerf ïŒ
jsperf.com ïŒã¯ãææ¡ãããæé©åããã¹ãŠæ©èœããããšã確èªããã®ã«åœ¹ç«ã¡ãŸãã JSPerfã¯ãéçºè
ãJavaScriptããã©ãŒãã³ã¹ãã¹ããäœæã§ããWebã¢ããªã±ãŒã·ã§ã³ã§ãã åãã¹ãã¯ãååŸããããšããŠããçµæïŒããšãã°ããã£ã³ãã¹ã®ã¯ãªãŒãã³ã°ïŒã«çŠç¹ãåœãŠãŠãããããŸããŸãªã¢ãããŒããå«ãŸããŠããŸãã JSPerfã¯ãåãªãã·ã§ã³ãå¯èœãªéãçæéã§å®è¡ããçµ±èšçã«æå³ã®ãã1ç§ãããã®ååŸ©åæ°ã衚瀺ããŸãã åžžã«ããè¯ããã®ã§ãïŒ
JSPerfããŒãžãžã®èšªåè
ã¯ããã©ãŠã¶ã§ãã¹ããå®è¡ããJSPerfãæ£èŠåãããçµæã
Browserscope ïŒ
browserscope.org ïŒã«ä¿åã§ããããã«ã
ãŸã ã ãã®èšäºã®æé©åææ³ã¯JSPerfã«ä¿ç®¡ãããŠããããããã€ã§ãæ»ã£ãŠããã®ææ³ãŸãã¯ãã®ææ³ããŸã é©çšå¯èœãã©ããã«é¢ããææ°æ
å ±ã確èªã§ããŸãã ãããã®çµæãèšäºã§äœ¿çšãããŠããã°ã©ããšããŠè¡šç€ºããå°ããªãã«ããŒ
ã¢ããªã±ãŒã·ã§ã³ã
äœæããŸããã
ãã®èšäºã®ãã¹ãŠã®ããã©ãŒãã³ã¹ãã¹ãã®çµæã¯ããã©ãŠã¶ãŒã®ããŒãžã§ã³ã«é¢é£ä»ããããŠããŸãã ããã¯ããã©ãŠã¶ãã©ã®OSã§èµ·åãããã®ããããã«éèŠãªããšã«ã¯ããã¹ããè¡ââããããšãã«HTML5ãã£ã³ãã¹ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ããªã³ã«ãªã£ãŠãããã©ãããããããªããããå¶éã®ããã§ãã ã¢ãã¬ã¹ããŒã«ã
about:gpu
ãšå
¥åãããšãChromeã§ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ãæå¹ã«ãªã£ãŠãããã©ããã確èªã§ããŸãã
ä»®æ³ãã£ã³ãã¹ã§äºåã¬ã³ããªã³ã°
åæ§ã®ããªããã£ããå€ãã®ãã¬ãŒã ã«ããã£ãŠç»é¢ã«æç»ããå ŽåïŒã²ãŒã ãäœæããå Žåã«ããããããšã§ãïŒãã¹ããŒãžå€ã§å€§ããªéšåãæç»ããããšã§ãããã©ãŒãã³ã¹ã倧å¹
ã«åäžãããããšãã§ããŸãã äºåã¬ã³ããªã³ã°ã§ã¯ãäžæçãªç»åãæç»ãããä»®æ³ïŒãŸãã¯ä»®æ³ïŒãã£ã³ãã¹ã䜿çšããä»®æ³ãã£ã³ãã¹ã衚瀺å¯èœãªãã£ã³ãã¹ã«ã³ããŒããŸãã ã³ã³ãã¥ãŒã¿ã°ã©ãã£ãã¯ã¹ã«ç²ŸéããŠãã人ã«ãšã£ãŠããã®ææ³ã¯
ãã£ã¹ãã¬ã€ãªã¹ããšãåŒã°ã
ãŸã ã
ããšãã°ã1ç§ããã60ãã¬ãŒã ã§ããªãªãåæç»ãããšããŸãã åãã¬ãŒã ã«åœŒã®åžœåãå£ã²ãããMããæãããã¢ãã¡ãŒã·ã§ã³ãéå§ããåã«äºåã«æãããšãã§ããŸãã
äºåã¬ã³ããªã³ã°ãªãïŒ
äºåã¬ã³ããªã³ã°ïŒ
var m_canvas = document.createElement('canvas'); m_canvas.width = 64; m_canvas.height = 64; var m_context = m_canvas.getContext('2d'); drawMario(m_context); function render() { context.drawImage(m_canvas, 0, 0); requestAnimationFrame(render); }
requestAnimationFrameã«æ³šæããŠãã ãããrequestAnimationFrameã®äœ¿ç𿹿³ã«ã€ããŠã¯ãåŸã»ã©è©³ãã説æããŸãã æ¬¡ã®ã°ã©ãã¯ãäºåã¬ã³ããªã³ã°ïŒ
jsperf ïŒã䜿çšããå©ç¹ã瀺ããŠããŸãïŒ
ã°ã©ã ã
ãã®ææ³ã¯ãã¬ã³ããªã³ã°ãé£ããå Žåã«ç¹ã«å¹æçã§ãïŒdrawMarioïŒã è¯ãäŸã¯ãããã¹ãã®ã¬ã³ããªã³ã°ã§ããããã¯éåžžã«é«äŸ¡ãªæäœã§ãã äºåã¬ã³ããªã³ã°ããã¹ãïŒ
jsperf ïŒã䜿çšãããšãããã©ãŒãã³ã¹ãåçã«åäžããŸãã
ã°ã©ãå¯èœæ§ãšããŠãäžèšã®äŸã§ã¯ããäºåã«ã¬ã³ããªã³ã°ãããã«ãŒãºããã¹ãã®ããã©ãŒãã³ã¹ãäœãããšãããããŸãã äºåã¬ã³ããªã³ã°ããå Žåãäžæãã£ã³ãã¹ã®ãµã€ãºãã€ã¡ãŒãžã«å¯ŸããŠããã€ããããšã確èªããããšãéèŠã§ããããããªããšã倧ããªãã£ã³ãã¹ãå¥ã®ãã£ã³ãã¹ã«ã³ããŒãããšãã«ããã©ãŒãã³ã¹ãåäžããããã©ãŒãã³ã¹ãäœäžããŸãïŒã¿ãŒã²ãããã£ã³ãã¹ã®ãµã€ãºã®é¢æ°ã®ããã«èŠããŸãïŒã äžèšã®äŸã«é©ãããã£ã³ãã¹ã¯æ¬¡ã®ãšããã§ãã
can2.width = 100; can2.height = 40;
å€§ãšæ¯èŒããŠïŒ
can3.width = 300; can3.height = 100;
ã°ã«ãŒãé話
ã¬ã³ããªã³ã°ã¯é«äŸ¡ãªæäœã§ãããããã³ãã³ãã®é·ããªã¹ãã䜿çšããŠæç»ã¹ããŒããã·ã³ãããŒããããããããããªãããã¡ãŒã«ã¢ããããŒãããæ¹ãã¯ããã«å¹ççã§ãã
ããšãã°ãè€æ°ã®ç·ãæç»ããå Žåããã¹ãŠã®ç·ã§1ã€ã®ãã¹ãäœæãã1åã®åŒã³åºãã§æç»ããããšããå§ãããŸãã ã€ãŸããåã
ã®ç·ãæããããïŒ
for (var i = 0; i < points.length - 1; i++) { var p1 = points[i]; var p2 = points[i+1]; context.beginPath(); context.moveTo(p1.x, p1.y); context.lineTo(p2.x, p2.y); context.stroke(); }
1æ¬ã®ããªã©ã€ã³ãæç»ããæ¹ãé©åã§ãïŒ
context.beginPath(); for (var i = 0; i < points.length - 1; i++) { var p1 = points[i]; var p2 = points[i+1]; context.moveTo(p1.x, p1.y); context.lineTo(p2.x, p2.y); } context.stroke();
ããã¯ãã£ã³ãã¹ã«ãé©çšãããŸãã ããšãã°ãè€éãªãã¹ãæç»ããå Žåãã»ã°ã¡ã³ããåå¥ã«æç»ããïŒ
jsperf ïŒïŒ
graphããããããã«ãã¹ãŠã®ãã€ã³ããé
眮ããæ¹ãé©åã§ãã
ãã ããcanvasã«ã¯ãã®ã«ãŒã«ã®éèŠãªäŸå€ãããããšã«æ³šæããŠãã ããïŒæç»ããããªããžã§ã¯ãã®ããªããã£ããåšå²ã«å°ããªé·æ¹åœ¢ïŒå¢çããã¯ã¹ïŒãæã£ãŠããå Žåãããããåå¥ã«ïŒ
jsperf ïŒæç»ããæ¹ãå¹ççã§ããããšã
ããã ãŸã ã
äžèŠãªç¶æ
倿Žãé¿ãã
Canvasã¯ã¹ããŒããã·ã³ã«åºã¥ããŠå®è£
ãããŸããã¹ããŒããã·ã³ã¯ãå¡ãã€ã¶ãã¹ã¿ã€ã«ãã¹ãããŒã¯ã¹ã¿ã€ã«ã®ã»ããçŸåšã®ãã¹ã圢æãã以åã®ãã€ã³ãã远跡ããŸãã æé©åããããšãããšãæç»ã«éäžããããªãèªæããããŸãã ãã ããã¹ããŒããã·ã³ã§ã®æäœãã³ã¹ãã«ã€ãªãããŸãã
ã·ãŒã³ã§è€æ°ã®å¡ãã€ã¶ãã®è²ã䜿çšããå Žåããã£ã³ãã¹äžã®å Žæãããè²ã§ãã€ã³ãããæ¹ãå®äŸ¡ã§ãã æµ
ãã¹ããªããã«ãã¯ã¹ãã£ãæç»ããã«ã¯ãç·ãæç»ããè²ã倿Žããæ¬¡ãæç»ããŸãã
for (var i = 0; i < STRIPES; i++) { context.fillStyle = (i % 2 ? COLOR1 : COLOR2); context.fillRect(i * GAP, 0, GAP, 480); }
ãŸãã¯ããã¹ãŠã®å¶æ°ãã³ããšå¥æ°ãã³ããæç»ããŸãã
context.fillStyle = COLOR1; for (var i = 0; i < STRIPES/2; i++) { context.fillRect((i*2) * GAP, 0, GAP, 480); } context.fillStyle = COLOR2; for (var i = 0; i < STRIPES/2; i++) { context.fillRect((i*2+1) * GAP, 0, GAP, 480); }
ãããã®ã¡ãœããã®æ¯èŒã¯ã次ã®ãã¹ãïŒ
jsperf ïŒã§ç€ºãããŠããŸãïŒ
graphäºæ³ã©ãããéè·¯ã®ç¶æ
ãæäœãããããæåã®ãªãã·ã§ã³ã¯é
ããªããŸãã
ãã£ã³ãã¹å
šäœã§ã¯ãªããéãã®ã¿ãæã
ãæ³åã®ãšãããæç»ããç»é¢ã®å°ããéšåã»ã©å®äŸ¡ã§ãã åæç»ã®éã«ããããªéããããªãå Žåãéãã®ã¿ãã¬ã³ããªã³ã°ããããšã§ããã©ãŒãã³ã¹ã倧å¹
ã«åäžãããããšãã§ããŸãã ã€ãŸããã¬ã³ããªã³ã°ããåã«ç»é¢å
šäœãã¯ãªã¢ãããããïŒ
context.fillRect(0, 0, canvas.width, canvas.height);
ããã¢ãã«ã®å¢çããã¯ã¹ãèŠãŠãããã ããã¯ãªã¢ããŸãã
context.fillRect(last.x, last.y, last.width, last.height);
ããã¯ãç»é¢ã暪åãçœãç¹ïŒ
jsperf ïŒãå«ã次ã®ãã¹ãã§ç€ºãããŠããŸãïŒ
graph ã
ã³ã³ãã¥ãŒã¿ã°ã©ãã£ãã¯ã¹ãåŸæã§ããã°ããåæç»é åããšåŒã°ãããã®ææ³ãç¥ã£ãŠããå¿
èŠããããŸãããã®ææ³ã§ã¯ã以åã®å¢çããã¯ã¹ãä¿åãããã¬ã³ããªã³ã°ããšã«ã¯ãªã¢ãããŸãã
ãã®ãã¯ããã¯ã¯ããã®
ãã³ãã³ããŒJavaScriptãšãã¥ã¬ãŒã¿ãŒã®èª¬æ
ã®ããã«ããã¯ã»ã«åäœã®ã¬ã³ããªã³ã°ã«ãé©çšãã
ãŸã ã
è€éãªã·ãŒã³ã«ã¬ã€ã€ãŒããã£ã³ãã¹ã䜿çšãã
åè¿°ã®ããã«ã倧ããªç»åã®ã¬ã³ããªã³ã°ã¯é«äŸ¡ã§ãããé¿ããã¹ãã§ãã ãªãã¹ã¯ãªãŒã³ãããã¡ãŒïŒäºåã¬ã³ããªã³ã°ã»ã¯ã·ã§ã³ïŒã䜿çšããããšã«å ããŠãäºãã«ç©ã¿éãããããã£ã³ãã¹ã䜿çšã§ããŸãã æäžäœã¬ã€ã€ãŒã®éæåºŠã䜿çšããŠãGPUã䜿çšããŠã¬ã³ããªã³ã°äžã«ã¢ã«ãã¡ãã£ãã«ãé©çšã§ããŸãã æ¬¡ã®ããã«ã絶察ã«é
眮ããã2ã€ã®ãã£ã³ãã¹ãéããŠäœ¿çšããŸãã
<canvas id="bg" width="640" height="480" style="position: absolute; z-index: 0"> </canvas> <canvas id="fg" width="640" height="480" style="position: absolute; z-index: 1"> </canvas>
åäžã®ãã£ã³ãã¹ãè¶
ããå©ç¹ã¯ãäžéšãã¬ã³ããªã³ã°ãŸãã¯ã¯ãªãŒãã³ã°ãããšãã«ãèæ¯ã«åœ±é¿ãäžããªãããšã§ãã ã²ãŒã ãŸãã¯ãã«ãã¡ãã£ã¢ã¢ããªã±ãŒã·ã§ã³ã2ã€ã®ã¬ã€ã€ãŒã«åå²ã§ããå Žåãããããç°ãªããã£ã³ãã¹ã«æç»ããŠããã©ãŒãã³ã¹ã倧å¹
ã«åäžãããããšããå§ãããŸãã æ¬¡ã®ã°ã©ãã¯ã1ã€ã®ãã£ã³ãã¹ãšãå¿
èŠã«å¿ããŠæäžå±€ïŒ
jsperf ïŒãåæç»ãŸãã¯ã¯ãªãŒãã³ã°ãããã£ã³ãã¹ãšã®åçŽãªããŒãžã§ã³ãæ¯èŒãã
ã°ã©ãã§ãã
å€ãã®å Žåãæ¬ é¥ã®ãã人éã®èªèããæ©æµãåããããšãã§ããèæ¯ã1åãŸãã¯1å以äžã®é »åºŠã§ããæç»ã§ããŸããïŒãŠãŒã¶ãŒã®æ³šæã®ã»ãšãã©ãæç»ããŸãïŒã ããšãã°ããããã¬ã€ã€ãŒãNã¬ã³ããªã³ã°ããŠãèæ¯ã1åã ãæââç»ã§ããŸãã
ãã®æ¹æ³ã¯ãã¢ããªã±ãŒã·ã§ã³ããã®ãããªæ§é ã§ããé©åã«æ©èœããå Žåãä»ã®ä»»æã®æ°ã®ã¬ã€ã€ãŒã«ãé©çšãããŸãã
shadowBlurãé¿ãã
ä»ã®ã°ã©ãã£ã«ã«ç°å¢ãšåæ§ã«ãHTML5ãã£ã³ãã¹ã§ã¯éçºè
ãããªããã£ãããŒããããšãã§ããŸããããã®æäœã¯éåžžã«é«äŸ¡ã§ãã
context.shadowOffsetX = 5; context.shadowOffsetY = 5; context.shadowBlur = 4; context.shadowColor = 'rgba(255, 0, 0, 0.5)'; context.fillRect(20, 20, 150, 100);
ãã®ãã¹ãã¯ãåœ±ã®æç¡ã«ãããããæç»ãããåãã·ãŒã³ãšããã©ãŒãã³ã¹ã®æ±ºå®çãªéãïŒ
jsperf ïŒã瀺ããŠã
ãŸã ã
ç»é¢ãã¯ãªã¢ããããŸããŸãªæ¹æ³
ãã£ã³ãã¹ã¯
峿ã°ã©ãã£ãã¯ã¢ãŒãã®ãã©ãã€ã ãªã®ã§ãã·ãŒã³ã¯åãã¬ãŒã ã§åæç»ããå¿
èŠããããŸãã ãã®ããããã£ã³ãã¹ã®ã¯ãªãŒãã³ã°ã¯ãã¢ããªã±ãŒã·ã§ã³ããã³ã²ãŒã ã§åºæ¬çã«éèŠãªæäœã§ãã
äžèŠãªç¶æ
倿Žã®åé¿ã»ã¯ã·ã§ã³ã§è¿°ã¹ãããã«ããã£ã³ãã¹å
šäœãã¯ãªã¢ããããšã¯ãã°ãã°æãŸãããããŸãããããããè¡ãå¿
èŠãããå Žåãcontext.clearRectïŒ0ã0ãwidthãheightïŒãåŒã³åºãããããã¯ã䜿çšããŸãïŒcanvas.width = canvas .width;ã
å·çæç¹ã§ã¯ãclearRectã¯å¹
ã®ãªã»ããã远ãè¶ããŸãããå Žåã«ãã£ãŠã¯ãChrome 14ïŒ
jsperf ïŒïŒ
graphã§å¹
ã®ãªã»ããã䜿çšããæ¹ãã¯ããã«é«éã§ãã
ãããã®ããªãã¯ã¯ããã£ã³ãã¹ã®å®è£
ã«å€§ããäŸåããŠãããããæ³šæããŠãã ããã 詳现ã«ã€ããŠ
ã¯ããã£ã³ãã¹ã®ã¯ãªãŒãã³ã°ã«é¢ããSimon Sarrisã®èšäºãåç
§ããŠãã ããã
æŽæ°ä»¥å€ã®åº§æšãé¿ãã
HTML5ãã£ã³ãã¹ã¯ãµããã¯ã»ã«ã¬ã³ããªã³ã°ããµããŒãããŠãããç¡å¹ã«ããæ¹æ³ã¯ãããŸããã æŽæ°ä»¥å€ã®åº§æšã§æç»ããå Žåãèªåçã«ã¢ã³ããšã€ãªã¢ã¹ã䜿çšããŠç·ãæ»ããã«ããŸãã
Seb Lee-Delisleã®
èšäºã®ãµããã¯ã»ã«ããã©ãŒãã³ã¹ã®èŠèŠå¹æã以äžã«ç€ºã
ãŸã ã

å¹³æ»åãããã¹ãã©ã€ããå¿
èŠãªãã®ã§ã¯ãªãå ŽåãMath.floorãŸãã¯Math.roundïŒ
jsperf ïŒïŒ
graphã䜿çšããŠåº§æšã倿ããæ¹ãã¯ããã«é«éã§ãã
éæŽæ°åº§æšãæŽæ°åº§æšã«å€æããã«ã¯ãããã€ãã®æ©ç¥ã«å¯ãã ææ³ããããŸãããã®ã»ãšãã©ã¯ãæ°ã«ååã远å ãããããåäœã®æäœãé©çšããŠã«ãããªãåé€ããããšã«åºã¥ããŠããŸãã
ããã§ããã©ãŒãã³ã¹ã®å®å
šãªå
èš³ïŒ
jsperf ïŒïŒ
ã°ã©ã ã
ãã®æé©åæ¹æ³ã¯ããã£ã³ãã¹ã®å®è£
ãGPUã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã«ãªã£ãç¬éããæå³ããªããªããªããéæŽæ°åº§æšããã°ããæç»ã§ããŸãã
ãrequestAnimationFrameãã§ã¢ãã¡ãŒã·ã§ã³ãæé©åãã
æ¯èŒçæ°ããrequestAnimationFrame APIã¯ããã©ãŠã¶ã§ã€ã³ã¿ã©ã¯ãã£ãã¢ããªã±ãŒã·ã§ã³ãå®è£
ããããã«æšå¥šãããŸãã ç¹å®ã®é »åºŠã§æç»ããããã«ãã©ãŠã¶ã«æç€ºãã代ããã«ãã¬ã³ããªã³ã°ãåŒã³åºãããã«äžå¯§ã«ãã©ãŠã¶ã«èŠæ±ããå®äºãããéç¥ããŸãã ããã«ãããŒãžãéã¢ã¯ãã£ããªå Žåããã©ãŠã¶ã¯æç»ããªãã»ã©ã¹ããŒãã§ãã
requestAnimationFrameåŒã³åºãã¯60 FPSã察象ãšããŠããŸããããããä¿èšŒãããã®ã§ã¯ãªããããæåŸã®ã¬ã³ããªã³ã°ããçµéããæéã远跡ããå¿
èŠããããŸãã æ¬¡ã®ããã«ãªããŸãã
var x = 100; var y = 100; var lastRender = new Date(); function render() { var delta = new Date() - lastRender; x += delta; y += delta; context.fillRect(x, y, W, H); requestAnimationFrame(render); } render();
requestAnimationFrameã®äœ¿çšã¯ããã£ã³ãã¹ãšWebGLãªã©ã®ä»ã®æè¡ã®äž¡æ¹ã«é©çšãããããšã«æ³šæããŠãã ããã
ãã®èšäºã®å·çæç¹ã§ã¯ãAPIã¯ChromeãSafariãFirefoxã§ã®ã¿äœ¿çšå¯èœã§ããã®ã§ã
æ
éã«äœ¿çšãã
å¿
èŠããããŸãã
ã»ãšãã©ã®ã¢ãã€ã«ãã£ã³ãã¹ã®å®è£
ã¯é
ã
ã¢ãã€ã«ãã©ãããã©ãŒã ã«ã€ããŠè©±ããŸãããã æ®å¿µãªãããå·çæç¹ã§ã¯ãSafari 5.1ãæèŒããiOS 5.0ããŒã¿çã®ã¿ããã£ã³ãã¹ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã䜿çšããŠããŸããã ããããªããšãã¢ãã€ã«ãã©ãŠã¶ã«ã¯ãææ°ã®ãã£ã³ãã¹ã¢ããªã±ãŒã·ã§ã³ã«ååãªCPUãæèŒãããŠããŸããã äžèšã®ããã€ãã®ãã¹ãã¯ããã¹ã¯ããããšæ¯èŒããŠã¢ãã€ã«ãã©ãããã©ãŒã ã®ããã©ãŒãã³ã¹ãäœäžããé åºã瀺ããŠãããæåãæåŸ
ã§ããã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã±ãŒã·ã§ã³ã®ã¿ã€ãã倧å¹
ã«å¶éããŠããŸãã
ãããã«
ãã®èšäºã§ã¯ãçç£çãªHTML5ãã£ã³ãã¹ã¢ããªã±ãŒã·ã§ã³ã®éçºã«åœ¹ç«ã€ãæçšãªæé©åã®åºç¯ãªã»ããã«ã€ããŠèª¬æããŸããã ããã§äœãæ°ããããšãåŠãã ã®ã§ãå
ã«é²ã¿ãçŽ æŽãããäœåãæé©åããŸãã ãŸãã¯ãã²ãŒã ãæé©åã¢ããªããŸã ãæã¡ã§ãªãå Žåã¯ã
Chrome ExperimentsãŸãã¯
Creative JSãåèã«ããŠãã ããã
åç
§è³æ
ãæ°ã«å
¥ãã®ã³ã¡ã³ã
ãã±ãã¬ããªã³ ïŒã¢ãã€ã«ããã€ã¹ã§ã¯ãç¶æ³ã¯ãŸã£ããéã§ã-å€å±€ãã£ã³ãã¹ã¯éåžžã«é
ãããã1 +ã·ãŒã³ãã¬ã¬ã³ããªã³ã°ãèæ¯ã«äœ¿çšããå¿
èŠããããŸãïŒãããŠãdivã®åŸãã¯ãã£ã³ãã¹ã®ãµã€ãºã§ããããã£ã³ãã¹ã®èæ¯ãäžå¯è§£ãªããšã«éåžžã«é
ãããïŒã
ãã£ãšããªãããŒãªæ¹æ³ã§ãæºåž¯é»è©±ã§å®å
šã«éåžžã®é床ã®ãã£ã³ãã¹ãå®çŸã§ããŸãã
TheShock ïŒ...
ã³ãŒããã倿ãããšãåãã¬ãŒã ã«ã°ã©ãã£ãã¯ããªããã£ããæç»ãã代ããã«ããããã¡ã«äžåºŠæç»ããŠãããããã¡ããæç»ããæ¹ãããããšãæå³ããŸããæ°åŠã«åŸã£ãŠã.arcãŸãã¯æ²ç·ã§è¡ãããæ°åŠèšç®ã«åŸã£ãŠåãæç»ããã®ã¯æ¬åœã§ãã bezierCurveToã§è¡ãããèšç®ã¯ãé©åãªãµã€ãºã®ç»åãåã«ã³ããŒãããããã¯ããã«é
ããªããŸãã
ããããå®éã®ãããã«ãããã¡ãªã³ã°ãã¯ããŸãæå³ããããŸããããã©ãŠã¶ã«ã¯ç¬èªã®ããã¯ãããã¡ããããããã¯ãããã¡ãã¡ã€ã³ã¬ã€ã€ã«æç»ããŸãã
1.æéããããããã
2.ã¬ã³ããªã³ã°ã®ããã«ããã¯ãæ¢ãã®ãé£ãããªããŸã
...