JSライブラリの読み込みを遅らせ、いくつかの文書準備関数

i managed to defer loading of JS libraries and also one document ready function, following this post Possible to defer loading of jQuery?

しかし、私は、ページ内に異なるモジュールによって配置された複数の文書準備機能を持っています(すべてのページではありません)。私がこれまで持っているコード:

echo'
//      deferred loading of jQuery library and
(function() {
 function getScript(url,success){
   var script=document.createElement("script");
   script.src=url;
   var head=document.getElementsByTagName("head")[0],
       done=false;
   script.onload=script.onreadystatechange = function(){
     if ( !done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete") ) 
     {
       done=true;
       success();
       script.onload = script.onreadystatechange = null;
       head.removeChild(script);
     }
   };
   head.appendChild(script);
 }
 getScript("lib/jquery/js/jquery-1.4.4.min.js",function(){
   getScript("lib/jquery/js/jquery.tools.min.js",function(){
     $("ul.tabs").tabs("div.panes > .pane",  {
 ';
 if(!isset($params['onclickfunction']) == 'no') {
 echo '
              onClick: function() {

                   var myTab = this.getCurrentTab().text();
                   document.getElementById("titleReplacement").innerHTML = " - " + myTab;
              },
  '; } //end conditional click function

echo '
              effect:"fade",
              fadeInSpeed:800,
              initialIndex:';

if(isset($_GET['tabs'])) { $this_url = $_GET['tabs']; }
else { $this_url = 'some text'; }

if($this_url == $params['tab1']) { echo '0'; }
elseif ($this_url == $params['tab2']) { echo '1'; }
elseif ($this_url == $params['tab3']) { echo '2'; }
//nothing matches? show first tab
else { echo '0'; }

echo  ' })  ;

   });
  })  //possibly another ; here ???
 })();
';

私はこれが実際に動作すると思うが、他のドキュメント準備関数はライブラリがロードされる前に実行しようとしている。私は他の関数を一つの関数にマージすることができないので、他の関数に使うことができる簡単なテストはありますか?

乾杯

0

2 答え

Kyle SimpsonのLABjを見てください。私はこれがあなたが望むことをすると思う...

0
追加された

jQueryが次のように定義された関数であるかどうかを確認するための基本的なチェックができます:

if( jQuery !== undefined ){
    //Execute your jQuery code here
}

しかし、上記は一度実行され、jQueryが定義されていない場合は、再び実行されません。タブを作成するときと同じように、jQueryライブラリのロードが成功したときに実行する関数に document.ready コードをラップします。

CDNからjQueryライブラリをロードすることもできます。高速なサーバーとキャッシングのメリットを得ることができます。これにより、主要なパフォーマンスヒットなしにヘッダーにlibをロードすることができます。

0
追加された
スロースタートなどとともに、CDNのDNSルックアップの潜在的なコストがあるため、CDNのメリットを誇張している人もいます。最近の調査では、実際にjQueryのバージョンをキャッシュに入れているという低い奇妙さが強調されています。最終的にそれを試してください、唯一の対策です。
追加された 著者 Andy Davies,
神様、私の前のコメントは、それが半読み人によって書かれたようです!私は「ありそうだ」と思っていましたが、多くの人がGoogleのCDNへの切り替えの意味を考慮せず、すべてのTCPの問題を理解していないため、興味がある場合は、GoogleのCDNからjQueryを使用する方法に関する記事( statichtml .com/2011/google-ajax-libraries-caching.html
追加された 著者 Andy Davies,
同意する、なぜ私は "かもしれない"と言った。どんな変更も、妥当な理由で行われなければならない。正当な理由は測定です。私はおそらくもう少し説明している必要があります:)。
追加された 著者 Simon,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript