More Related Content Similar to 从无阻塞并行脚本加载(Lab.js)到浏览器消息模型 (20) 从无阻塞并行脚本加载(Lab.js)到浏览器消息模型68. var script = document.createElement('script'); script.src = 'myscript.js';var head = document.getElementsByTagName('head')[0];head.appendChild(script);5/7/2011 15 69. Script标签的onload事件 function loadScript(url, callback){ var script = document.createElement(”script”) script.type = “text/javascript”; if (script.readyState){ //IE script.onreadystatechange = function(){ if (script.readyState == “loaded” || script.readyState == “complete”){ script.onreadystatechange = null; callback(); } }; } else { //Others script.onload = function(){ callback(); }; } script.src = url; document.body.appendChild(script);} 5/7/2011 16 117. <script src="LAB.js"></script> <script>$LAB .script("http://remote/jquery.js”).wait() .script("/local/plugin1.jquery.js") .script("/local/plugin2.jquery.js").wait() .script("/local/init.js").wait(function(){ initMyPage(); }); </script>5/7/2011 36 162. WebApp = 浏览器 + JavaScript + CSS + HTML + Images + …. + API 180. varhttpRequest;if (window.XMLHttpRequest) { // Mozilla, Safari, ... httpRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE httpRequest= new ActiveXObject("Microsoft.XMLHTTP"); }httpRequest.onreadystatechange = function(){ if (httpRequest.readyState === 4) { if (httpRequest.status === 200) { // perfect! } else { // there was a problem with the request, // for example the response may be a 404 (Not Found) // or 500 (Internal Server Error) response codes} } else { // still not ready }};httpRequest.open('GET', ‘http://url', true);httpRequest.send(null); 5/7/2011 51 187. 消息编程模型 Vs. 多线程编程 消息模型是构建在多线程的基础之上的 在JavaScript的领域里(包括NodeJS), 多线程的细节被隔离 应用里的多线程操作通过事件驱动和消息传递暴露给程序员 鼓吹消息模型而鄙视多线程模型的程序员不是好的工程师 5/7/2011 55 191. 5/7/2011 消息模型的优势 编程模型简化 多线程框架由底层实现和托管,我们只负责调用API启动线程,发送消息和侦听消息 对编程人员隔离多线程的烦恼 程序耦合性低 程序代码属于被trigger的状况,不耦合于目标代码 我讨厌异步特有的callback编程,但是我喜欢消息模型 原生的AOP编程 58 195. 5/7/2011 为何JScript在服务端会死掉? var objConn = Server.CreateObject("ADODB.Connection"); // open our ADO connection and Execute the SQL command objConn.Open("dsn=helpdesk", "sa", ""); objConn.Execute(strCommandText); var returnErrCode = objConn.Execute("SELECT @@ERROR as errorCode").GetString(); objConn.Close(); objConn = null; 62 196. 5/7/2011 JScript Vs. NodeJS JScript之死 摒弃了JavaScript在浏览器中的异步机制 完全无视消息模型 无多线程支持 在Server端,表现与PHP和ASP无异 NodeJS之生 延续JavaScript在浏览器端赖以生存的特性 异步,消息模型,事件驱动 向程序员屏蔽多线程 63 197. 5/7/2011 结语 Block UI的JavaScript不是好JavaScript 无消息模型,不JavaScript 无事件驱动,不JavaScript 浏览器是多线程的,JavaScript是单线程 上一条适用于NodeJS 64