ããŒã1.çè«
åŸæ¥ã®ã»ãšãã©ã®éWebããã°ã©ãã³ã°èšèªã¯åæïŒããããã³ã°ïŒã§ãã
ç¹å®ã®èšèªãåæãéåæãã倿ããã«ã¯ã©ãããã°ããã§ããïŒ ããšãã°ãããã°ã©ã ãäžå®æéå®å šã«åæ¢ãããšãã®ã¹ãªãŒãæ©èœã®æç¡ïŒé å»¶ãäžæåæ¢ãªã©ãšãåŒã°ããŸãïŒã
ãåç¥ã®ããã«ãJavaScriptã«ã¯ãã®ãããªæ©èœã¯ãããŸããã ããšãã° setTimeoutã§ããããŸã£ããç°ãªãããšãè¡ããŸãã ã³ãã³ãã®å®è¡ãé ããããããããŸããããããã¯setTimeoutã®åŸãããã°ã©ã ã忢ãããã®äžã§äœãã§ããªããšããæå³ã§ã¯ãããŸããã
éã«ãçè«çã«ã¯ã setTimeoutãåŒã³åºãããåŸãäžéšã®ãªãœãŒã¹ãè§£æŸãããé å»¶ã³ãŒã«ããã¯ïŒãã¥ãŒå ã®é¢æ°ïŒãããé«éã«å®è¡ãããå ŽåããããŸãã
åæ/éåæãšã·ã³ã°ã«ã¹ã¬ãã/ãã«ãã¹ã¬ãããæ··åããªãããšããå§ãããŸãã ãããã®æŠå¿µã¯ççµåã§ãã
JavaScriptã§éåæãå®è£ ããããšã¯ãå¥ã®æŠå¿µãžã®1ã€ã®ã¢ãããŒãã«ãããŸãã-ãã«ãã¿ã¹ã¯ãããã«ã¯æãäŒçµ±çãªè§£æ±ºçããããŸã-ãã«ãã¹ã¬ãã
ãã«ãã¹ã¬ããã®å©ç¹ïŒ
- èãæ¹ãå€ããããåŸæ¥ã®ããããã³ã°èšèªïŒC ++ãJavaãPythonïŒããåèšç·Žããå¿ èŠã¯ãããŸãã
- ãã«ãããã»ããµã³ã³ãã¥ãŒã¿ã䜿çšããŠããŠãããã°ã©ã ãã¹ã¬ããã䜿çšããŠèšè¿°ãããŠããŠãããããäºãã«ãããã¯ããªãå Žåãã€ãŸã ç¬ç«ããããŒã¿ã§åäœãããã®ãããªããã»ããµäžã®ããã°ã©ã ã¯ãããã«éãåäœããŸã
ãã«ãã¹ã¬ããã®æ¬ ç¹ïŒ
- åã¹ã¬ããã«ã¯ããŒã¿ãåŠçããå Žæãå¿
èŠãªã®ã§ããã®ã¡ã¢ãªã䜿çšãããŠãããã¹ã¬ãããã¹ãªãŒãããŠããå Žåã§ããåã¹ã¬ããã¯RAMã䜿ãæãããŸãã
ããã¯ä»¥åã¯å€§ããªåé¡ã§ããããçŸåšã¡ã¢ãªã¯å®äŸ¡ã§ãããåçŽã ããã«ãã¹ã¬ããã®Javaããã°ã©ã ã2 GBã®ã¡ã¢ãªãå æãããšãã©ããããããäžå¿«ã«ãªããŸãã - 2ã€ã®ã¹ããªãŒã ãåãåžå°ãªãªãœãŒã¹ïŒã¡ã¢ãªå
ã®ãªããžã§ã¯ãããããã¯ãŒã¯æ¥ç¶ãªã©ïŒã䜿çšããå ŽåããªãœãŒã¹ã®ãããŒã®ç«¶åïŒç«¶åç¶æ
ïŒãçºçããå¯èœæ§ããããŸãã ãèµ·ããåŸãããšããã®ã¯ããèµ·ããããšèšã£ãå Žåãããããã«æªãããšã§ãã
ã¹ã¬ããéã®ç«¶åã«å¯Ÿæããããã«ããã©ã°ãã»ããã©ãªã©ã䜿çšãããŸãããããã«ã¯1ã€ã®ç®æšããããŸããä»ã®ã¹ã¬ããã«ä¹ãããªãœãŒã¹ãåŸ æ©ãããããšã§ãã ãã ããã¹ã¬ããAãã¹ã¬ããBãåŸ æ©ããBãAãåŸ æ©ããŠããå Žåããããããã¯ã®åé¡ãçºçããå¯èœæ§ããããŸãã
ãããã¯ãã«ãã¹ã¬ããã®2ã€ã®æå€§ã®æ¬ ç¹ã§ããããšãã°ãJavaããã°ã©ããŒãéãéã®ã€ã³ã¿ãã¥ãŒã§ã¯ãã Thread.startïŒïŒã¯Thread.runïŒïŒãšã©ãéãã®ã§ããïŒ ããã Howããããããã¯ãšæŠãïŒ ããªã© Javaããã°ã©ããŒã¯ãã¹ã¬ããã®è±éçãªäœæã«å€å€§ãªæéãè²»ãããããããããã«é¢é£ããåé¡ã®åæ§ã«è±éçãªå æã«æéãè²»ãããŠããŸãã
ãããããåç¥ã®ããã«ãåŸæ¥ã®ããã»ããµã®éçºã«ã¯äžå®ã®éçããããã®ã¬ãã«ãã¬ãŒã¹ã«ããçç£æ§ã®åäžã¯ãã¯ãäžå¯èœã§ãã ãã®å Žåããã«ãã¹ã¬ããåã«ãããããšãã°ãããªã®ãšã³ã³ãŒãæãªã©ã倧éã®å€ããå°ãªããç¬ç«ããããŒã¿ã®åŠçãå€§å¹ ã«å¢å ããŸãã
ããã«ãããããããããã°ã©ããŒåŽã®ãã«ãã¹ã¬ããåã«ãããã«ãã¿ã¹ã¯ã®å°è±¡ã¯æ¬¡ã®ãšããã§ãã ããããã㯠ãã
Javascriptã§ã䞊åã¿ã¹ã¯ãäœæããã«ã¯ã次ã®ããã«æžãã ãã§ãã
setTimeout(function () { console.log('Async'); }, 0);
ãŸãã¯
button.addEventListener('click', function () { console.log('Async click'); }, false)
ãã ããã䞊åã¿ã¹ã¯ãã¯ã10ã³ã¢ããã»ããµäžã§JavaScriptãããé«éã«åäœããããšãæå³ãããã®ã§ã¯ãããŸããã JavaScriptã¯ã¹ã¬ããäžç«ã§ãããECMA仿§ã¯JavaScriptãšã³ãžã³ããã«ãã¿ã¹ã¯ãå®è£ ããæ¹æ³ã説æããŠããŸããã ç§ã®ç¥ãéããæ¢åã®JavaScriptå®è£ ã¯ãã¹ãŠãããŠãŒã¶ãŒç©ºéã®ã¹ããªãŒã ããªã©ã®ãã«ãã¿ã¹ã¯ãªãã·ã§ã³ã䜿çšããŸãïŒããã»ããµã¯åäžããã»ã¹å ã§ã¿ã€ããŒãäžæããããšã§ã¿ã¹ã¯ãè¿ éãã€è¿ éã«åãæ¿ããŸãïŒããããã¯å°æ¥ãæ žãã«ãã¹ã¬ãããJavaScriptã«è¡šç€ºãããªãããšãä¿èšŒãããã®ã§ã¯ãããŸããã
å°æ¥çã«ã¯ãçµå±ã®ãšãããã¹ããªãŒã ã¯Webã¯ãŒã«ãŒãä»ããŠå°ãå¥åŠãªæ¹æ³ã§åŒ·å¶çã«JavaScriptã«å°å ¥ãããŸããããããã«ã€ããŠã¯åŸåã§èª¬æããŸãã
ãã®ãããæšæºJavaScriptã§ã¯ãç¡éã®ã€ãã³ãã«ãŒãïŒã€ãã³ãã«ãŒãïŒãšãã³ããããã³ã°ã³ãŒã«ãä»ããŠããã¹ãŠãç°ãªãæ¹æ³ã§å®è¡ãããŸãã ãã®ã€ãã³ãã«ãŒãã¯ã¡ã€ã³ã®å¯äžã®UIã¹ã¬ããã§å®è¡ãããã³ãŒã«ããã¯ãã¥ãŒã«ã¢ã¯ã»ã¹ãããã¥ãŒãã¯ãªã¢ããããŸã§é çªã«éžæããŠå®è¡ããŸãã
trueãã©ã°ãæå®ããŠsetTimeoutãonclickãããã³XmlHttpRequestãåŒã³åºããšãæ°ããã³ãŒã«ããã¯ãã€ãã³ããã¥ãŒã«å ¥ããããŸãã ã³ãŒã«ããã¯ããã¥ãŒããéžæããŠå®è¡ãããšãå®è¡äžã«å¥ã®ã³ãŒã«ããã¯ãªã©ããã¥ãŒã«å ¥ããããšãã§ããŸãã
ããŒãã«2æéãããããªãé«éJavaScriptãåããé«éãªWebãµã€ããå¿ èŠãªå Žåã¯ãã§ããã ãå€ãã®æäœãé ãããŠãã§ããã ãæ©ãã¡ã€ã³ã¹ã¬ããã«ãžã£ã³ãããŠUIãè§£æŸããŸããã€ãã³ããããŒãžã£ãŒã¯ããã€ãäœããã¥ãŒããåŒã³åºããã倿ããŸããã¢ã€ãã ã¯åŸã ã«ããŒããããŸãã
ã³ãŒã«ããã¯ãã¥ãŒãã¹ãã£ã³ããããã»ã¹ã¯äžæãããåŸ æ©ããŸããã ããŒã¿ãåŸã ã«ããŒãããŠãããã°ã©ã èªäœã®æçµé床ã¯å€ãããŸããããèŠçŽ ãåŸã ã«è¡šç€ºãããéåæãµã€ãã¯ã蚪åè ã«ãã£ãŠé«éã§ãããšèªèãããŸãã
JavaScriptã¯éåææäœã«éåžžã«é©ããŠããããŸãã«ãã®ããã«èšèšãããŸããã
æ®å¿µãªãããæ§æã«ã¯åæäŸå€ããããŸãããããã¯ããã¹ãŠããããã¯ããfalseãã©ã°ä»ãã® alert ã confirm ã promtããã³xmlhttprequestã³ãã³ãã§ãã
ãããããèšäºã®æåŸã§èª¬æãã1ã€ã®äŸå€ãé€ãããããã®ã³ãã³ãã䜿çšããªãããšã匷ããå§ãããŸãã
ããã©ãŒãã³ã¹ã®ç¹ã§ã¯ãéåæåŒã³åºãã¯åæåŒã³åºããããåžžã«åªããŠããŸãã ããšãã°ã nginxãèŠãŠãã ãããããã¯ãäž»ã«éåææäœãå®çŸãã髿§èœã®ãããéåžžã«äººæ°ããããŸãã
æ®å¿µãªããšã« ã node.jsã¯ãŸã æµæã§ãããå¥ã®åæã³ãã³ã-requireãå°å ¥ããŸããã ãã®ã³ãã³ããnode.jsã«ããéããããã©ãŒãã³ã¹ã¯åžžã«äžååã§ãããšç¢ºä¿¡ããŠãããããå人çã«ã¯äœ¿çšããŸããã
ã§ã¯ããªãåæã³ãã³ããéåæèšèªã«å°å ¥ãããŠãèšèªã®ã€ããªãã®ãŒå šäœãæãªãããã®ã§ããããïŒ
ãŸããJavaScriptãã·ã³ã¯ããèªäœã§ã¯åäœããŸãããããŠãŒã¶ãŒã座ã£ãŠãããã©ãŠã¶ãŒã§ã¯ãããã¯ã³ãã³ããJavaScriptèšèªã§ã¯ãªãããããåãå·»ãç°å¢ïŒãã©ãŠã¶ãŒïŒã«è¿œå ãããŸãããããããã®æŠå¿µãè«ççã«åé¢ããããšã¯å°é£ã§ãã
ããã©ãŠã¶ã®å察åŽãã«åº§ã£ãŠããããã°ã©ããŒã¯ãæã倿§ã§ãç°ãªãèšèªããæ¥ãŠãããã»ãšãã©ã®å Žååæçã§ãã éåæã³ãŒãã®èšè¿°ã¯ã¯ããã«é£ããããŸã£ããç°ãªãèãæ¹ãå¿ èŠã§ãã
ãã®ãããã éåææ§ãã»ãšãã©çè§£ããŠããªãããã°ã©ããŒã®èŠæ±ã«å¿ã㊠ããã€ãã³ãã«ãŒããå®å šã«åæ¢ããéåžžã®æªè³ªãªåæé¢æ°ã远å ããŸããã
ã¿ã¹ã¯ãéåæçã«å®äºããæ©äŒã¯åžžã«ãããŸãããéåæåŒã³åºããåæåŒã³åºãã«çœ®ãæããããšã§ç掻ãç°¡çŽ åããèªæã¯å€§ããããŸãã
éåæéçºã®è€éãã¯äœã§ããïŒ
ããšãã°ãé ããæ©ãããJavaScriptããã°ã©ããŒã¯ãã®ãããªããã°ãã«ééããŸãïŒStackOverflowã§æãäžè¬çãªè³ªåã®1ã€ïŒã
ãµãŒããŒã³ãŒã
<?php #booklist.php header('Content-type: application/json'); echo json_encode(array(1, 2, 88)); ?>
ã¯ã©ã€ã¢ã³ãã³ãŒã
var getBookList = function () { var boolListReturn; $.ajax({ url : 'bookList.php', dataType : 'json', success : function (data) { boolListReturn = data; } }); return boolListReturn; }; console.log(getBookListSorted()); // - :)
ãã¡ãããããã§ã®èª€è§£ã¯ãajaxãªã¯ãšã¹ãããã¥ãŒã«å ¥ããconsole.logãã¡ã€ã³ã®Uiã¹ã¬ããã«æ®ã£ãŠãããšããäºå®ã«èµ·å ããŠããŸãã
ajaxãæåãããšãæåã³ãŒã«ããã¯ããã¥ãŒã«å ¥ããŸããããã€ãã¯æåãããããããŸããã ãã¡ãããconsole.logã¯ã颿°ãè¿ãããïŒæªå®çŸ©ã®ïŒäºå®ãå«ãéå»ã®ãã®ã§ãã
ããã°ã©ã ãå°ã倿Žããæ¹ãæ£ç¢ºã§ããæåã³ãŒã«ããã¯å ã§console.logåŒã³åºããæž¡ããšããŸãããã
var getBookList = function (callback) { $.ajax({ url : 'bookList.php', dataType : 'json', success : function (data) { callback(data); } }); }; getBookList(function (bookList) { console.log(bookList); });
ããã«çŸä»£çãªæ¹æ³ã¯ãã³ãŒã«ããã¯ãæäœããããã®äŸ¿å©ãªã€ã³ã¿ãŒãã§ã€ã¹ã«åãæ¿ããããšã§ããããšãã°ããããããçŽæãïŒçŽæãé å»¶ãšãåŒã°ããŸãïŒ-ç¬èªã®ã³ãŒã«ããã¯ãã¥ãŒãçŸåšã®ç¶æ ã®ãã©ã°ããã®ä»ã®ã°ããºãä¿åããç¹å¥ãªãªããžã§ã¯ãã§ãã
var getBookList = function () { return $.ajax({ url : 'bookList.php', dataType : 'json', }).promise(); }; // promise done getBookList().done(function (bookList) { console.log(bookList); });
ãã ããã³ãŒã«ããã¯ã®è² è·ãå¢ãããšã2ã€ä»¥äžã®éåæã³ãã³ãã䜿çšãããšåé¡ãçºçãããšãã2çªç®ã®åé¡ãçºçããå¯èœæ§ããããŸãã
å¥ã®ãµãŒãã¹book.phpã䜿çšããŠããªã¹ãIDããæžç±ã®ååãèŠã€ããå¿ èŠããããšæ³åããŠãã ããã
ãµãŒããŒéšåïŒ
<?php #book.php $id = $_REQUEST['id']; $response = array( "id" => $id ); switch ($id) { case '1': $response['title'] = "Bobcat 1"; break; case '2': $response['title'] = "Lion 2"; break; case '88': $response['title'] = "Tiger 88"; break; } header('Content-type: application/json'); echo json_encode($response); ?>
ã¯ã©ã€ã¢ã³ãã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
var getBookList = function () { return $.ajax({ url : 'bookList.php', dataType : 'json', }).promise(); }; var getBook = function (id) { return $.ajax({ url : 'book.php?id='+id, }).promise(); }; getBookList().done(function (bookList) { $.each(bookList, function (index, bookId) { getBook(bookId).done(function (book) { console.log(book.title); }); }); });
ãã®3é建ãŠã®ã³ãŒãã¯ããã§ã«ããã»ã©ã§ã¯ãããŸããã ãã¡ãããããã§äœãèµ·ãã£ãŠããã®ããææ¡ããããšã¯å¯èœã§ããã倧éã®ãã¹ãã¯å®éã«ã¯åŠšããšãªãããã°ãçºçããå¯èœæ§ã®ããå Žæã«ãªããŸãã
ããããã°ã®1ã€ã§ãã IDãªã¹ãããœãŒããããŠããå ŽåããœãŒãã倱ãããå¯èœæ§ããããŸãã ããšãã°ãäžéšã®ãªã¯ãšã¹ããä»ã®ãªã¯ãšã¹ããããé ãå ŽåããŸãã¯ãŠãŒã¶ãŒããã¬ã³ãããŠã³ããŒãã䞊è¡ããŠå®è¡ãå§ããå Žåããªã¯ãšã¹ãã®çµæã®çºè¡é床ã¯ãã¹ããããããå ŽåããããŸãã
phpã§ã¯ãsleepã³ãã³ãã§ããããšãã¥ã¬ãŒãããŸãã
...
ã±ãŒã¹ '2'ïŒ
ç¡ç ïŒ2ïŒ;
$ response ['title'] = "ã©ã€ãªã³2";
äŒæ©;
...
ã¹ã¯ãªããã¯åºåããŸã
ãããã£ãã1
ã¿ã€ã¬ãŒ88
ã©ã€ãªã³2
ãªã¹ãã¯ã¢ã«ãã¡ãããé ã«ãœãŒããããŠããªããããåé¡ã¯ããã«è¡šç€ºãããŸãïŒ..
ãªã¯ãšã¹ãã®æéãç°ãªãéãã©ã®ããã«ãªã¹ããæŽçã§ããŸããïŒ
ãã®åé¡ã¯èŠããã»ã©åçŽã§ã¯ãªããçŽæã®ãªããžã§ã¯ãã§ããããã§ã¯ããŸã圹ã«ç«ããããã®åé¡ãèªåã§è§£æ±ºããããšãããšãèªåã®èã§ç¶æ³ã®ãã©ããæããã§ãããã
ããŒã2.ç·Žç¿
JavaScriptã©ã€ãã©ãªã®ãã®äžå®å šãªãªã¹ããã芧ãã ããã
async.jsãasyncãasync-miniãatbarãbeginãchainsawãchannelsãCinchãclouddãdeferredããããããEventProxy.jsãfiberizeãfibersãfibers-promiseãasyncblockãfirstãflow-jsãfunkãfuturesã promiseãgroupieãIgniteãjamãJscexãJobManagerãjsdeferredãLAEH2ãminiqueueã$ Nãnestableflowãnode.flowãnode-fnqueueãnode-chainãnode-continuablesãnode-cronãnode-crontabãnode-inflow ãnode_memoãnode-parallelãnode-promiseãnarrowãneuronãnofloãobserverãpoolrãqãread-filesãRubberduckãSCIONãseqãsexyãSignalsãsimple-scheduleãSlideãsoda.jsãStepãstepc ãstreamline.jsãsyncãQBoxãzo.jsãäžæåæ¢å¯èœããŠã©ãŒã¿ãŒãã©ãŒã«
ãããã®ãã€ã¯ã©ã€ãã©ãªã¯ãã¹ãŠããåæåœ¢åŒã§éåæã³ãŒããæžãããšãã1ã€ã®åé¡ã解決ããããšãçŽæããŸãã ã€ãŸã éåæã³ãŒããæžãããšã¯ãåæçã«æžãã®ãšåããããç°¡åã§ãã
ç§ã¯ãããã®ã»ãšãã©ã詊ããŸããããå®éã«ã¯åœŒãã¯æ¬åœã«å©ãã«ã¯ãªããŸããã æšæºã®jQuery.Deferredãšæ¯èŒãããšã倧ããªäŸ¿å©ãã«æ°ä»ããŸããã§ããã
ããããããã§ãããªãã·ã§ã³ãšã¯äœããèããŠã¿ãŸãããã
ãªãã·ã§ã³1ãåæã³ãŒã«ã
ãã¹ããããã¯ãšãªã®åé¡ã«å¯Ÿããæãããªè§£æ±ºçïŒãªã¹ããååŸãããªã¹ãã®èŠçŽ ã調ã¹ãŠãå ã®ãªã¹ãã®é åºãç¶æããªããåèŠçŽ ã«å¯ŸããŠå¥ã®èŠæ±ãå®è¡ããïŒã¯ããã¹ãŠã®åŒã³åºããåæãããããã«æãã§ãïŒ
var getBookList = function () { var strReturn; $.ajax({ url : '../bookList.php', dataType : 'json', success : function (html) { strReturn = html; }, async : false }); return strReturn; }; var getBook = function (id) { var strReturn; $.ajax({ url : '../book.php?id='+id, success : function (html) { strReturn = html; }, async : false }); return strReturn; }; var getBookTitles = function () { return $.map(getBookList(), function (val, i) { return getBook(val).title; }); }; var ul = $('<ul/>').appendTo($('body')); $.each(getBookTitles(), function (index, title) { $('<li>'+ title +'</li>').appendTo(ul); });
ãã®ãœãªã¥ãŒã·ã§ã³ã¯ããéåžžã«é«éã§ããŒãã£ãªãã·ãªãŒãºã®ãã®ã§ãããªããªãããªã¯ãšã¹ãã¯ãã©ãŠã¶ããããã¯ããã ãã§ãªããæ¬¡ã®ãªã¯ãšã¹ããåã®ãªã¯ãšã¹ããåŸ ã€ããããããé·ãããããã§ãã
é·æ
- ãšã©ãŒããã£ããããããã·ã³ãã«ãªã³ãŒã
- ãã¹ããç°¡å
çæïŒ
- ãã©ãŠã¶ããããã¯ããŸã
- çµæã®æéã¯ããã¹ãŠã®ãªã¯ãšã¹ãã®æéã®åèšã§ã
ãªãã·ã§ã³2ããªã¹ãã«å«ãŸãããã¹ãŠã®çŽæã®å±¥è¡ãåŸ ã€çŽæã
æžç±ã®ãªã¹ãèªäœã¯1ã€ã®çŽæïŒãªã¹ãã§ã¯ãªãïŒã«ãªããŸããããã®äžã«ã¯åã ã®çŽæã®ãªã¹ããå«ãŸããããã«å«ãŸãããã¹ãŠã®çŽæãæºããããåŸã«ã®ã¿ã
çµæã¯ãåæããŒã¿ãå«ãé åãšããŠè¿ãããŸã
var getBookTitles = function () { var listOfDeferreds = []; var listDeferred = $.Deferred(); getBookList().done(function (bookList) { $.each(bookList, function (i, val) { listOfDeferreds.push(getBook(val)); }); $.when.apply(null, listOfDeferreds).then(function () { listDeferred.resolve($.map(arguments, function (triple) { return triple[0].title; })); }); }); return listDeferred.promise(); }; getBookTitles().done(function (bookTitles) { $.each(bookTitles, function (index, title) { $('<li>'+ title +'</li>').appendTo('#ul'); }); });
getBookTitles颿°ã³ãŒãã¯éåžžã«éãã§ãã äž»ãªåé¡ã¯ããããééã£ãŠãããåé¡ããã£ããããã®ãé£ããããããã°ãé£ãããšããããšã§ãã
ãã®ãªãã·ã§ã³ã®å©ç¹ïŒ
- ãã©ãŠã¶ããããã¯ããŸãã
- çµæã®æéã¯ãã¯ãšãªã®æé·ã§ãã
çæïŒ
- è€éã§æ¬ é¥ã®ããã³ãŒã
- ãã¹ããé£ãã
ãªãã·ã§ã³3ãuiã§ã®çµæã®å Žæã®äºçŽã
ãã®å ŽåãIDãªã¹ããåãåã£ãŠãããã«å«ãŸããèŠçŽ ãå埩åŠçããããã«UIãªããžã§ã¯ããäœæããŸãã
åãç¹°ãè¿ãã§ãéåæããŒã¿ã®2çªç®ã®éšåãèŠæ±ããŸãããUIãšã¬ã¡ã³ãã¯ã¯ããŒãžã£ãŒãéããŠè¡šç€ºãããã³ã³ãã³ãã§ãããåããŸãã
getBookList().done(function (bookList) { $.each(bookList, function (index, id) { var li = $('<li>Loading...</li>'); li.appendTo('#ul'); getBook(id).done(function (book) { li.html(book.title); }); }); });
é·æ
- ãã©ãŠã¶ããããã¯ããŸãã
- çµæã¯ãåã ã®ãªã¯ãšã¹ããçµäºãããšããã«è¡šç€ºãããŸãã
- ãªã¯ãšã¹ãã¯äžŠè¡ããŠè¡ãããŸã
çæïŒ
- äžå€ã³ãŒã
- ãã¹ããé£ãã
ãªãã·ã§ã³4ãåå¥ã®Webworkerã¹ã¬ããã§ã®åæåŒã³åºãã
èšäºãæžããŠããéçšã§ãã¡ãã£ãšå€ãã£ããªãã·ã§ã³ãåºãŠããŸãã-åæãªã¯ãšã¹ããå®è¡ããŸãããWebWorkerãšã¢ãžã¥ãŒã«ãä»ããå¥ã®ã¹ã¬ããã§ã ãã®å Žåããã©ãŠã¶ãŒã¯ãããã¯ãããŸããããã³ãŒãã¯ç°¡çŽ åãããŸãã
ãããè¡ãã«ã¯ãã¯ãŒã«ãŒçšã®ãã¡ã€ã«ãäœæããããã«node.jsã®requireã®ãããªåæé¢æ°ã䜿çšããŸã ã
// wwarpc.js var require = function () { // Only load the module if it is not already cached. var cache = {}; var gettext = function (url) { var xhr = new XMLHttpRequest(); xhr.open("GET", url, false); // sync xhr.send(null); if (xhr.status && xhr.status != 200) throw xhr.statusText; return xhr.responseText; }; return function (url) { if (!cache.hasOwnProperty(url)) { try { // Load the text of the module var modtext = gettext(url); // Wrap it in a function var f = new Function("require", "exports", "module", modtext); // Prepare function arguments var context = {}; // Invoke on empty obj var exports = cache[url] = {}; // API goes here var module = { id: url, uri: url }; // For Modules 1.1 f.call(context, require, exports, module); // Execute the module } catch (x) { throw Error("ERROR in require: Can't load module " + url + ": " + x); } } return cache[url]; } }(); onmessage = function(e){ if ( e.data.message !== "start" ) { return } var url = e.data.url; var funcname = e.data.funcname; var args = e.data.args; var module = require(url); postMessage(module[funcname].apply(null, args)); };
ã¯ãŒã«ãŒã䟿å©ã«èµ·åããããã®è£å©æ©èœã¯æ¬¡ã®ãšããã§ãã
ãŸããã¯ãŒã«ãŒãšã¢ãžã¥ãŒã«ã®äž¡æ¹ããã£ãã·ã¥ããŠãåŒã³åºãããšã«ãµãŒããŒããã¢ãžã¥ãŒã«ãããŒãããªãããã«ããŸãã
// , , <script src="http://ie-web-worker.googlecode.com/svn/trunk/worker.js"></script> /** * Web Worker Asynchroneous Remote Procedure Call */ var wwarpc = function () { var worker; var getWorker = function () { // for lazy load if (worker === undefined) { worker = new Worker("wwarpc.js"); } return worker; }; return function (url, funcname) { var args = Array.prototype.slice.call(arguments, 2); var d = $.Deferred(); var worker = getWorker(); worker.onmessage = function (e) { d.resolve(e.data); }; worker.postMessage({ message : "start", url : url, funcname : funcname, args : args }); return d.promise(); }; }();
è峿·±ãããšã«ãã¢ãžã¥ãŒã«ã¯node.jsã®ããã«ãªããŸãã
//modules/Books.js exports.getBookList = function () { var the_object = {}; var http_request = new XMLHttpRequest(); http_request.open( "GET", 'bookList.php', false ); http_request.send(null); if ( http_request.readyState == 4 && http_request.status == 200 ) { the_object = JSON.parse( http_request.responseText ); } return the_object; }; exports.getBook = function (id) { var the_object = {}; var http_request = new XMLHttpRequest(); http_request.open( "GET", 'book.php?id='+id, false ); http_request.send(null); if ( http_request.readyState == 4 && http_request.status == 200 ) { the_object = JSON.parse( http_request.responseText ); } return the_object; }; exports.getBookTitles = function () { var Books = exports; return Array.prototype.map.call(Books.getBookList(), function (val, i) { return Books.getBook(val).title; }); };
åæã«ãã¢ãžã¥ãŒã«ã®åãã³ãŒãã¯ãåæïŒãŠããããã¹ãã«ãããã¹ãäžïŒãšéåæïŒå®çšŒåäžïŒã®äž¡æ¹ã§åŒã³åºãããšãã§ããŸãã
ããã«ãããã¡ã€ã³ã³ãŒãã¯3ã€ã§ã¯ãªã2é建ãŠã«ãªããããã·ã³ãã«ã«ãªããŸãã
wwarpc('modules/Books.js', 'getBookTitles').done(function (bookTitles) { $.each(bookTitles, function (index, title) { $('<li>'+ title +'</li>').appendTo('#ul'); }); });
ã€ããªãã®ãŒã§ã¯ããã¹ãŠã®æäœãã¯ãŒã«ãŒã§å®è¡ãããŸãããã¯ãŒã«ãŒã¯éåæã§åŒã³åºãããããããã¹ãã¯åžžã«æå°éã«ãªããŸãã
å©ç¹ïŒ
- æ°ãããã©ãŠã¶ããããã¯ããŸãã
- ã·ã³ãã«ã§çè§£ããããã³ãŒã
- ãã¹ããç°¡åïŒåæã¢ãŒãã§ãã¹ãã§ããéåæã§åŒã³åºãããšãã§ããŸãïŒ
çæïŒ
- IEããã³ã¯ãŒã«ãŒããµããŒãããŠããªãå€ããã©ãŠã¶ãŒããããã¯ããŸã
- çµæã®æéã¯ããã¹ãŠã®ãªã¯ãšã¹ãã®æéã®åèšã§ã
çµè«ïŒ
- ãªãã·ã§ã³3ãuiã§çµæã®å ŽæãäºçŽããããæéã®ãªãã·ã§ã³ã§ãããããè€éãªã³ãŒã
- ã³ãŒãã®å¯èªæ§ãšãã¹ãå®¹ææ§ãIEãŠãŒã¶ãŒã®å¿«é©ããããéèŠã§ããå Žåããªãã·ã§ã³4ãå¥ã®Webworkerã¹ã¬ããã§ã®åæåŒã³åºãããé©åãªéžæã«ãªãå¯èœæ§ããããŸãã
- ãªãã·ã§ã³2ã¯å³å¯ã«åé¿ããå¿ èŠããããŸãïŒããªã¹ãã«ãããã¹ãŠã®çŽæã®å±¥è¡ãåŸ ã€çŽæãïŒ
- åæåŒã³åºãã䜿çšããããšã¯æ£åœåã§ããŸãã
- IEã¯æ»ãªãªããã°ãªããŸããïŒ
ãã®èšäºã¯ã次ã®è³æã®å°è±¡ã®äžã«æžãããŸããã