0

YSlowを使用してWebの読み込み速度を確認しました。ルールによれば、多くの外部JavaScriptを使用するよりも、1つの大きな外部JavaScriptを使用する方が適切です。多くの外部JavaScriptを使用すると、多くのhttpリクエストが発生するというルールが記述されていますが、これは適切ではありません。

私はCKEditorを使用していますが、それを他のJavaScriptと組み合わせて大きな外部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 Editorは、相対的な場所を持つ他の外部JavaScriptをロードしているようです。スクリプトを他のファイルに移動すると、間違いなくエラーが発生します。

だから、私の質問は:これに対する一般的な回避策はありますか?つまり、そのような動作をする他のスクリプト(CK-Editorだけでなく)である可能性があります。

編集: head.js(http://headjs.com/)を使用するのがここでの最良のオプションだと思います

4

2 に答える 2

1

すべてのJavaScriptを一度に動的にロードしようとすると、通常、依存関係の問題またはライブラリの競合の問題が発生します。

例:依存関係の問題-jQueryが読み込まれる前にjQueryを必要とするファイルが必要です。競合の問題-大規模な製品で作業している場合、競合するライブラリに遭遇する可能性があります。たとえば、ライブラリ名は同じで機能が異なる2つのファイルをロードします。

本当に多くの速度低下が見られ、すべてのJSファイルを結合したい場合は、ファイル結合コードに依存関係を設定します。この簡単な例は、主要なJSピースの前にロードされるライブラリの配列を作成することです。

これが問題の解決に役立つことを願っています!

于 2012-08-31T01:33:16.610 に答える
0

使用しているサーバー言語はわかりませんが、PHPの場合は、連結/縮小の問題についてSmartoptimizerを試してみることをお勧めします。

それを使用すると、必要に応じてjsを追加するだけで、それらの処理が処理されます。現在、YepNopeで使用しており、HeadJSでも機能すると思います。

于 2012-08-31T03:20:01.053 に答える