【问题标题】:requirejs Load timeout for config.js (optimized)requirejs config.js 的加载超时(优化)
【发布时间】:2013-11-17 22:06:02
【问题描述】:

我有一个优化的 config.js(大约 420kB),它由 requirejs 加载,每次新用户注册并登录此文件时都会获取并放入缓存中,但用户第一次获取此文件时总是有一个 @ 987654321@,然后用户必须刷新然后加载。

我以为是超时问题,所以改了waitSeconds : 200。这发生在 requireJs 2.1.6 中,所以我升级到最新的 2.1.9 仍然是同样的问题。

但是,如果我不使用优化器并使用未优化的配置文件 (3KB),它会加载大约 35-40 个小 js 文件(已缩小),一切都会好起来的!但我希望所有文件都在优化的 config.js 中,因为 http 请求较少(对移动设备有利)。

添加代码:

require.config({

    paths : {
        jquery        : './vendor/libs/jquery-1.10.1.min',
        underscore    : './vendor/libs/underscore-min',
        backbone      : './vendor/libs/backbone-min',
        marionette    : './vendor/libs/backbone.marionette',
        wreqr         : './vendor/plugins/backbone.wreqr.min',
        text          : './vendor/plugins/text',
        tpl           : './vendor/plugins/tpl',
        socketio      : '../socket.io/socket.io.min',
        spin          : './vendor/plugins/spin.min',
        shuffle       : './vendor/plugins/jquery.shuffleLetters',
        magicSuggest  : './vendor/plugins/magicsuggest-1.3.0-min',
        mCustomScroll : './vendor/plugins/jquery.mCustomScrollbar.concat.min',
        imagesloaded  : './vendor/plugins/imagesloaded',
        qTip          : './vendor/plugins/jquery.qtip.min',
        visibility    : './vendor/plugins/visibility',
        tab           : './vendor/plugins/tab',
        dropdown      : './vendor/plugins/dropdown',
        interestsMap  : './interestsMap',
        moment        : './vendor/plugins/moment.min',
        favicon       : './vendor/plugins/tinycon'

    },

    waitSeconds       : 180,

    shim : {

        socketio : {
            exports : 'io'
        },

        underscore : {
            exports : '_'
        },

        backbone : {
            deps : ['underscore','jquery'],
            exports : 'Backbone'
        },

        marionette : {
            deps : ['backbone'],
            exports : 'Backbone.Marionette'
        },

        wreqr      : {
            deps : ['backbone'],
            exports : 'Backbone.Wreqr'
        },

        shuffle : {
            deps : ['jquery'],
            exports : 'jQuery.fn.shuffleLetters'
        },

        magicSuggest : {
            deps : ['jquery'],
            exports : 'jQuery.fn.magicSuggest'
        },

        mCustomScroll : {
            deps : ['jquery'],
            exports : 'jQuery.fn.mCustomScrollbar'
        },

        visibility : {
            exports : 'Visibility'
        },

        tab        : {
            deps : ['jquery'],
            exports : 'jQuery.fn.tab'
        },

        dropdown   : {
            deps : ['jquery'],
            exports : 'jQuery.fn.dropdown'
        },

        moment     : {
            exports : 'moment'
        },

        favicon    : {
            exports : 'Tinycon'
        }

    },

    tpl     : {
        extension : '.tpl'
    }
});

//Initialise 
require([
        'backbone',
        'routers/index',
        'app',
        ],function  (Backbone ,Router ,app){
            //var presence  = io.connect(w.protocol+'//'+w.host+'/presence');

            app.start();

            Backbone.history.start();


});

**任何模块都没有错误,因为未优化的 config.js 文件加载正常。

构建配置

({
    appDir : '../',
    baseUrl: './scripts',
    dir    : '../../dist',
    mainConfigFile : '../scripts/config.js',
    name: "config",
    optimizeCss : 'standard'
})

【问题讨论】:

  • 你能添加一些代码吗?
  • 已更新代码:)。现在我正在这样做:requirejs.onError = function(检查错误类型是否为超时,如果是,则重新加载()页面)。这可行,但用户体验不佳
  • 你的构建配置呢?
  • 您找到解决方案了吗?我遇到了同样的问题。
  • hm,所以你的主脚本命名为 config,配置也命名为 config 加上你没有提到输出文件。尝试重命名构建文件中的模块怎么样:({ appDir : '../', baseUrl: './scripts', dir : '../../dist', mainConfigFile : '../scripts/config.js', name: "main", out: 'main-build.js' optimizeCss : 'standard' })

标签: javascript backbone.js requirejs marionette amd


【解决方案1】:

为防止出现问题,您可以使用 require js 配置属性 waitSeconds(设置为 0)禁用 require js 超时。默认超时为 7 秒(查看更多 http://requirejs.org/docs/api.html#config-waitSeconds)。

但是您应该看看 r.js (http://requirejs.org/docs/optimization.html#wholeproject),因为这样您可以将所有 js 源文件合并到一个更大的 app.js 文件中,并包含所有依赖项。要使用它,您应该删除 dir 属性并在配置文件中添加 out 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多