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()

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

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

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

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

         

  • 相关阅读:
    web服务器有哪些_nodejs的工作原理是什么
    WebRTC的运行流程和运行机制到底是怎么进行的
    认识WebRTC的整体架构以及它重要的目录结构是什么
    api接口风格restful风格的十大规范
    Mysql中高级操作中的视图_事务_索引_账户权限管理
    C#常见几种集合比较
    堆(Heap)和栈(Stack)
    线程同步的几种方式
    使用临时表大批量插入数据
    select出来的表增加递增列
  • 原文地址:https://www.cnblogs.com/jamesldj/p/3336214.html
Copyright © 2011-2022 走看看