|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
呵呵,那你就关注微软的招聘信息以及别人的招聘经验啊,还有也不一定去做技术的,你如果真的想去就多了解了解。(其实我的意思是说想到微软做技术是很不容易的。js为何必要include?让我们想一想如许1个场景,a.js必要用到1个公用的common.js,固然你能够在用到a.js的页面利用<scriptsrc="common.js">,但假定有5个页面用到了a.js,你是否是要写5遍<script。并且如果今后a.js又必要援用common2.js,你是否是又的修正5个页面了?
已有jsinclude的一些成绩
在写这个之前在网上搜刮了些材料,发明之前写的include都存在2个成绩,这也是include必要办理的对照主要的2个成绩。
1、绝对路径的成绩:在a.js中利用include("../js/common.js");include函数中一定是利用绝对路径,是绝对a.js的路径。而a.js在html中利用<script>嵌进有多是绝对路径,有多是相对路径。include函数怎样才干真准确定common.js的相对路径,大概是绝对html的绝对路径。网上一些为懂得决这个成绩,还必要加一些js变量,不便利。
2、援用的成绩。网上include函数的完成几近都是利用上面2种体例拔出common.js
document.write("<scriptsrc="+..+"></script>")
大概
vars=document.createElement("script");
s.src=...;
head.insertAfter(s,...);
document.write输入的剧本会在a.js前面加载,而createElement("script")创立的剧本长短堵塞加载。以是假如在common.js加载终了之前,a.js中挪用了common.js的函数就会报错。
完成
办理下面2个成绩,就能够完成jsinclude。
第1个成绩,我的办法是先猎取到a.js在html中的相对路径(假如是绝对路径,就转为相对路径),然后再把common.js的路径转为相对路径。
第2个成绩,接纳同步的ajax来哀求common.js,如许就不会呈现援用成绩。
完成代码以下:
复制代码代码以下:
//依据绝对路径猎取相对路径
functiongetPath(relativePath,absolutePath){
varreg=newRegExp("../","g");
varuplayCount=0;//绝对路径中前往下层的次数。
varm=relativePath.match(reg);
if(m)uplayCount=m.length;
varlastIndex=absolutePath.length-1;
for(vari=0;i<=uplayCount;i++){
lastIndex=absolutePath.lastIndexOf("/",lastIndex);
}
returnabsolutePath.substr(0,lastIndex+1)+relativePath.replace(reg,"");
}
functioninclude(jssrc){
//先猎取以后a.js的src。a.js中挪用include,间接猎取最初1个script标签就是a.js的援用。
varscripts=document.getElementsByTagName("script");
varlastScript=scripts[scripts.length-1];
varsrc=lastScript.src;
if(src.indexOf("http://")!=0&&src.indexOf("/")!=0){
//a.js利用绝对路径,先交换成相对路径
varurl=location.href;
varindex=url.indexOf("?");
if(index!=-1){
url=url.substring(0,index-1);
}
src=getPath(src,url);
}
varjssrcs=jssrc.split("");//能够include多个js,用离隔
for(vari=0;i<jssrcs.length;i++){
//利用juqery的同步ajax加载js.
//利用document.write静态增加的js会在以后js的前面,大概会有js援用成绩
//静态创立script剧本,长短堵塞下载,也会呈现援用成绩
$.ajax({type:GET,url:getPath(jssrc,src),async:false,dataType:script});
}
}
在a.js中间接利用include("../js/common.js");
多哀求的成绩
利用下面的include看上往挺爽的,不外却带来别的1个严峻的成绩,就是多发送了1个ajax的哀求。
我们经常为了WEB功能,而兼并js,削减哀求。但利用include后却恰恰多了哀求。假如这个成绩不办理,信任良多人都不会在正式产物中利用include的了,除非是局域网产物。
怎样办理这个多哀求的成绩,我也思索好久,最初觉的单单利用客户端js是没举措办理了。以是就想到了利用服务端代码来办理
还记的我之前有文章先容"js、CSS的兼并、紧缩、缓存办理"的时分,就经由过程服务器端代码在程序启动时分往兼并js。
以是我把include多哀求的办理计划也加到内里往。就是在程序启动的时分往查找一切的js,发明有利用include的就把include中common.js的源代码交换该include函数。如许a.js中在运转的时分就没有include函数,而是真真包括了common.js的内容的js文件
后语
丫的。说到最初,怎样又把一切的include都交换失落了,哪之前说的那末多不白说了。
团体以为,每一个产物都应当要辨别开辟情况和产物情况(一样平常经由过程设置文件举行辨别),在开辟情况应当以开辟效力为主要,而产物情况则以功能为首。以是这里的inlcude就应当要辨别看待,在开辟情况中利用jsinclude来进步开辟和保护效力,而在产物情况中则主动把一切include交换成真真的js文件的内容。
都说完了,接待人人拍砖会商。
[作者]:BearRui(AK-47)
[博客]:http://www.ckuyun.com/BearsTaR/java的设计机制:首先产生一个中间码,第二部编译为本地(机器)码。这个机制有很大的缺点。 |
|