5

すぐに使えるMagentoには、すでに面倒な読み込み時間に役立た​​ない5ダース以上のJavaScriptライブラリが付属しています。非同期でロードできるように、head.jsやlabjsなどのスクリプトローダーをMagentoで正常に使用できる人はいますか?私は試してきましたが、動作させることができません。

ライブラリがロードされる前に、ページ上のインラインスクリプトが起動しているように見えます。head.jsには、実行するスクリプトを指示するhead.readyのような関数があることは知っていますが、インラインスクリプトが非常に多いため、サイト全体のすべてのオカレンスにこれを追加するのは実用的ではありません。

4

3 に答える 3

4

インラインスクリプトに関しては、プログラムによる解決策があります。

レンダリングされたHTMLを出力する直前に発生するcore_block_abstract_to_html_afterまたはイベントにバインドするオブザーバーを作成できます。controller_action_layout_render_beforeオブザーバーでは、を使用して各タグの直後にステートメントpreg_replaceを挿入できます。head.ready<script>

レンダリング時間は少し長くなりますが、ライブラリをダウンロードするまでの待ち時間よりも短いと思います。また、フルページキャッシュを使用している場合、関数は1回だけ呼び出されます。

組み込みのMagentoProfilerを使用して、影響をテストできます。少なくとも試してみる価値はあります。

HTH、
JD

于 2011-04-04T00:21:23.060 に答える
2

まあ、私はこれにjqueryを使用します。そしてそれは素晴らしい働きをします。
あなたがしなければならないのは、スクリプトを返すajaxリクエストを作成し、を使用してスクリプトを評価することevalです。このために独自の関数を作成することもできますが、jqueryにはすでにいくつかの優れたアプローチがあります。
単一のスクリプトの場合、この関数は適切に$.getScript機能します。$.ajaxこれは基本的に、スクリプトを要求していることを指定する関数の拡張です。構文は次のようになります:

$.getScript('my_script_url',function(){
    // do whatever needs to be done after the script loads
    alert('my script was asynchroniously loaded');
});

ajaxを介して追加したいスクリプトが他にもある場合、jqueryにはこれを行うための適切な方法があります。

$.when(
    $.getScript("/script_1.js"), 
    $.getScript("/script_2.js"), 
    $.getScript("/script_3.js")
    // ...
    //$.getScript("/script_n.js")
).then(
    // on succes
    function(){
        alert('good to go!');
    },
    // on failure
    function(){
        alert('loading failed. one or more scripts encountered a problem :(');
    }
);
于 2011-04-03T17:24:31.660 に答える
0

この種のすべてのローダーでは、サイト上のすべてのスクリプトに変更を加える必要があります。私は知っています-私はちょうど私がgrepしたときに、ある種のスクリプトタグで400以上のファイルを表示したシステムにLABjsを実装しました!!

于 2011-04-02T19:31:12.153 に答える