易截截图软件、单文件、免安装、纯绿色、仅160KB

关于javascript模块加载的思索

最近一直为此头痛,姑且把我能想到的东西都写出来吧。由于不是简单把页面上手写的script转为javascript添加,我们需要考虑的东西主要有两个:加载的顺序,加载前后脚本的运作。
先说第一个,假如我们已有一加载机制了,要加载一个新模块,当然新模块是在另一个JS文件中。这时,我们可以描述为:
loader ---> a.js
这个加载过程可能会出些意外,如服务器忙碌等问题,暂时无法为我们生成JS文件,我们就需要再次请求,但也可能永远请求不上,因为那是死链,后台的人傻了脑袋,改了地址也不通知声,我们需要一个截止期限。这时,我们可以描述为:
loader ---> a.js ---> a.js ---> .....----> timeout
如果那个模块要依赖于其他模块呢,那么我就必须在加载它之前加载其他模块了。这时,我们可以描述为:
loader ---> b.js ---> a.js ---> .....----> timeout
但记录这些依赖关系的信息肯定在a.js上,而不在loader上,通过a.js我们才能得知b.js,换言之要遵循最少知识原则(Law of Demeter)。
这个问题的解决,MochiKit兴许能给我们一些灵感吧。
另一个问题是javascript是单线程的,而加载需要一个时间,并且通常是异步的。当我们执行加载函数后,可能JS引擎会继续执行下面需要新模块支援的代码片断,由于这时新模块还没有加载完毕,当要用到新模块的属性方法就会报错。解决方法有二,强制上面的loader活动的时间与加载时间一样长,换言之,创造一个阻塞的环境。这容易实现,可参照dojo。不过如果加载的模块过多,难免会造成body标签内一片空白。另一个方法是使用回调函数,那么就要求我们把接着下来的代码八卸大块,每个代码片断都是相对独立,所有逻辑都是写在一个函数体中。看上去非常不优雅,但也别无他法,这是YUI的做法。
嘛,基本上就是这样,是一个世界难题……不要问我要代码,认为没有必要搞这么复杂的同志们现在都被迫干这事呢,世事难料啊!


相关文档:

TEXTAREA 字节限制(javascript,struts 的页面标签)

//Textarea maxlength
//flag:text框名字,num:限制的字节数
  function maxLen(flag,num){
  if(document.getElementById('lastMessage').value=="0" || document.getElementById('lastMessage').value==flag){
    var i=document.getElementById(flag).value.replace(/[\u0 ......

Client Side JavaScript Validation

Struts Validator Framework provides an easy-to-use mechanism for performing client-side validation. It's very useful to validate some fields on the client-side before sending the data to the server for processing. By this way we can ensure that the data send to the server is valid. Performing valida ......

JavaScript 判断上传文件类型

function
 Check_FileType(str)
{
 
var
 pos 
=
 str.lastIndexOf(
"
.
"
);
 
var
 lastname 
=
 str.substring(pos,str.length)  //此处文件后缀名也可用数组方式获得str.split(".")
 
if
 (lastname.toLowe ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号