使用 Dojo 的 require.trace 跟踪整体加载进度

Posted

技术标签:

【中文标题】使用 Dojo 的 require.trace 跟踪整体加载进度【英文标题】:Using Dojo's require.trace to Track Overall Loading Progress 【发布时间】:2013-03-26 08:01:20 【问题描述】:

docs for Dojo's AMD loader 提到了一个跟踪 API。有没有例子说明这是如何实现的?

我想利用它在加载我的应用程序的各种依赖项时显示“已加载 X of X”样式消息,但我不确定如何执行此操作或在我的代码流中包含跟踪的位置。

编辑: 跟踪 API 似乎只在 Dojo 的源版本上可用。有没有不同的方式来实现我想要的?

【问题讨论】:

【参考方案1】:

这段代码似乎可以工作,但它太脆弱了。它依赖于 1) require 在 Dojo 的源版本中公开其内部工作,以及 2) require 的属性,这些属性可能会在未来发生变化。肯定有更好的方法!

require( [], function()

    // output amd progress
    var loadWatchHandle = setInterval( function()
    
        var all = Object.keys( require.modules ).length,
            waiting = 0;

        for( dep in require.waiting )
        
            if( require.waiting[ dep ] !== 1 )
            
                waiting++;
               
        

        // write progress
        console.log( ( all - waiting ) + '/' + all + ' files (' + parseInt( ( all - waiting ) / all * 100 ) + '%)' );
    , 50 );

    require( [ 'dojo/parser',
        'dojo/ready',
        'dijit/layout/BorderContainer',
        'squad_builder/TabContainer',
        'dijit/layout/ContentPane',
        'dojo/domReady!' ], 
    function( parser, ready )
    
        parser.parse();

        ready( function() // uses ready not domReady because we want initial djits to be parsed
        
            // stop tracing
            clearInterval( loadWatchHandle );

            // bootstrap here...

         );
     );
 );

【讨论】:

以上是关于使用 Dojo 的 require.trace 跟踪整体加载进度的主要内容,如果未能解决你的问题,请参考以下文章

Dojo dojo.rawXhrPost 和 dojo.xhrPost

Dojo 1.7 如何在 require() 之外使用 dojo 组件

如何使用 Dojo 读取 JSON 文件

Dojo:dojo onblur 事件

dojo教程:未定义dojo

您可以同时使用 Dojo.Build 和 CDN 吗?