отложить загрузку библиотек JS И несколько функций готовности документов

мне удалось отложить загрузку библиотек JS, а также одну функцию готовности документа после этого сообщения Возможно отложить загрузку 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 ???
 })();
';

Я думаю, что это действительно работает, но другие функции подготовки документов пытаются запуститься до загрузки библиотек. Есть ли простой тест, который я мог бы использовать для других функций, поскольку я не могу объединить их в одну функцию.

ваше здоровье


person rotezecke    schedule 25.11.2011    source источник


Ответы (2)


Взгляните на LABj Кайла Симпсона. Я думаю, это сделает то, что вы хотите...

person Andy Davies    schedule 26.11.2011

Вы можете выполнить базовую проверку, чтобы увидеть, является ли jQuery определенной функцией, например:

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

Однако вышеописанное будет выполняться один раз, и если jQuery не определен, оно не будет запускаться снова. Оберните свой код document.ready в функцию, которую вы выполняете при успешной загрузке библиотеки jQuery, точно так же, как вы делаете, когда создаете свои вкладки.

Вы также можете попробовать загрузить библиотеку jQuery из CDN. Вы получите преимущества быстрого сервера и кэширования, что позволит вам загружать библиотеку в заголовок без серьезного снижения производительности.

person Simon    schedule 25.11.2011
comment
Вы часто преувеличиваете преимущества CDN, так как существует потенциальная стоимость поиска DNS для CDN, а также медленный запуск и т. Д. Также некоторые недавние исследования подчеркнули низкую вероятность того, что на самом деле нужная вам версия jQuery в кеше. В конечном счете попробуйте это мера является единственным ответом. - person Andy Davies; 27.11.2011
comment
Согласен, поэтому я и сказал "может". Любые изменения должны быть сделаны по уважительной причине, а не по прихоти. Уважительной причиной является измерение. Я, вероятно, должен был объяснить немного больше, хотя :). - person Simon; 27.11.2011
comment
Боже, мой предыдущий комментарий выглядит так, как будто его написал кто-то полуграмотный! Я видел «может», но хотел расширить его для других, поскольку многие люди не учитывают последствия перехода на CDN Google и не понимают всех проблем TCP. Если вам интересно, это была статья об использовании jQuery из Google CDN — statichtml. .com/2011/google-ajax-libraries-caching.html - person Andy Davies; 28.11.2011