zoukankan      html  css  js  c++  java
  • 也谈模块加载,吐槽CMD

    先吐槽CMD,不要没头没脑的搞出个CMD,没意思。

    大家都看AMD好了,异步模块加载机制,CMD并没有改变这个模式。

    模块加载的关口就是getCurrentScript,每次define被调用的时候,识别出是哪个脚本在调用它,把javascript内容解析出来,

    识别出依赖的模块,(就是里面有require的资源部分),在执行前先准备好这些资源。

    当然这里面有若干相对路径的转换。

    AMD很好,人人都喜欢异步工作方式,所以QQ、email比电话更受欢迎,有什么事情我准备好了再回复你。

    但是人也是有控制欲的,人喜欢别人以同步方式工作,恨不得别人停下手里所有事立刻为自己服务。

    所以我对AMD不满足,使用过Node.js后,非常喜欢require的同步加载方式,请注意是同步模块加载,SMD就不叫了,就是require。

    require(src)   三个参数,

       src 是资源相对路径,

    内部步骤

        1.var str=ajax(src); 获取脚本内容

        2.var fn=new Function("module","require");

        3.var module={},newReq=hitch(require,base);/*构造一个新的require,绑定上下文参数  base指新的目录*/

        4.fn(module,newReq);

        5.return module.exports;

    模块脚本编写样例:

        module.exports={a:10,b:10,sum:function(x,y){return x+y;}};/*返回一个对象*/

     或者

        module.exports=function(a,b){return a+b}/*返回一个函数,函数是一等公民*/

    所有人都能看得到的就是阻塞问题,浏览器的UI进程被阻塞,如果模块加载花费太多时间,会出现浏览器不响应,甚至假死

    这时候是多么希望有中断和唤醒机制啊, thread.sleep()

    再换个思路,如果合理控制模块的大小,缓存,确保浏览器本地有所需的所有模块,那这个阻塞问题就不会成为大问题,

    从缓存中读文件时毫秒级别。

    这就需要用到离线应用程序功能了。

    下一篇文章  离线应用程序尝试

         

  • 相关阅读:
    关于游戏的配乐说法
    初识构建之法
    战略-战术-攻略
    《SRE google 运维解密》读书笔记1---第一部分
    什么,又是流程有问题?
    Scaling Memcache At Facebook
    技术博客开篇之言
    redis的一次迁移
    原生js--什么是闭包?
    原生js--事件绑定、事件监听器及事件解绑
  • 原文地址:https://www.cnblogs.com/jamesldj/p/3336214.html
Copyright © 2011-2022 走看看