缓存javascript失败,因为使用了外部JavaScript

时间:2012-08-31 00:49:12

标签: javascript caching minify

我使用YSlow来检查网络的加载速度。 根据规则,最好有一个大的外部JavaScript而不是许多外部javascripts。在规则中写道,使用大量外部javascript会导致很多http请求不好。

我正在使用CKEditor,我希望将它与其他javascripts结合成一个大的外部JavaScript。但是,每次加载它时,总会出现错误。阅读完代码后,我想我知道为什么会这样。

if ( CKEDITOR.loader )
CKEDITOR.loader.load( 'core/ckeditor' );
else
{
    // Set the script name to be loaded by the loader.
    CKEDITOR._autoLoad = 'core/ckeditor';

    // Include the loader script.
    if ( document.body && (!document.readyState || document.readyState == 'complete') )
    {
        var script = document.createElement( 'script' );
        script.type = 'text/javascript';
        script.src = CKEDITOR.getUrl( '_source/core/loader.js' );
        document.body.appendChild( script );
    }
    else
    {
        document.write(
        '<script type="text/javascript" src="' + CKEDITOR.getUrl( '_source/core/loader.js' ) + '"></script>' );
    }
 }

CK编辑器似乎加载了其他具有相对位置的外部JavaScript。将脚本移动到其他文件肯定会导致错误。

所以,我的问题是: 这有什么一般的解决方法吗?我的意思是,它可能是其他具有这种行为的脚本(不仅仅是CK-Editor)。

编辑:我认为使用head.js(http://headjs.com/)是这里最好的选择

2 个答案:

答案 0 :(得分:1)

当尝试动态加载所有JavaScripts时,通常会遇到依赖性问题或库冲突问题。

实施例: 依赖性问题 - 在加载jQuery之前需要一个需要jQuery的文件。 冲突问题 - 在处理大型产品时,您最终可能会遇到冲突的库。例如,加载具有相同库名但功能不同的两个文件。

如果你真的看到很多速度变慢,并希望将所有JS文件集合依赖项组合在文件组合代码中。一个简化的例子是创建一个在任何主要JS片段之前加载的库数组。

希望这有助于解决您的问题!

答案 1 :(得分:0)

好吧,我不知道您使用的是哪种服务器语言,但如果是PHP,我建议您尝试使用Smartoptimizer来处理串联/缩小问题。

使用它,你只需添加你的js,它就会处理它们。如今,我正在和YepNope一起使用它,我相信它也适用于HeadJS。