• 也谈模块加载,吐槽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()

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

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

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

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

         

  • 相关阅读:
    windows照样命令行gcc/g++
    我的Linux(Ubuntu)首秀
    简单分频原理与实现——计数器
    时序分析之Arrival Time
    DDS正弦信号发生器
    C/C++ 预处理器
    时序分析之Slack
    iOS单例
    static
    深浅拷贝
  • 原文地址:https://www.cnblogs.com/jamesldj/p/3336214.html
Copyright © 2020-2023  润新知