1

Наконец-то появился отзывчивый сайт (мода). Теперь я хочу уменьшить, какие скрипты загружаются на мобильные устройства, чтобы они загружались быстрее. Сценарии избыточны на мобильных телефонах, поэтому кажется, что это хорошее место для начала.Отзывчивый дизайн - Как не загружать определенные скрипты?

Есть ли способ загрузки определенных скриптов в зависимости от устройства?

Сайт является сторонним сайтом электронной коммерции, который не позволяет использовать разные версии страницы для разных устройств. Язык на стороне сервера - это продвинутый «электронный сценарий» (о котором я ничего не знаю).

Любая помощь будет очень признательна !!

+0

Помимо условной загрузки, вы можете минимизировать лет ur файлы JavaScript. Я слышал, что [Chirpy] (http://chirpy.codeplex.com/) хорош. – jhsowter

+1

Или компилятор закрытия Google: http://closure-compiler.appspot.com/home –

+0

@jhowowter - Файлы javascript уже обновлены, но спасибо, что указали мне на Chirpy - определенно посмотрим на это для интрасети asp.net сайт, который у нас есть. – CYMR0

ответ

1

Modernizr делает функцию обнаружения и условно может загружать ресурсы. Это более или менее стандартно для такого рода вещей, если вы не развернете свои собственные.

+0

Спасибо! Похоже, Modernizr идеален. – CYMR0

1

Вы всегда можете попробовать подключиться к другим JavaScripts с помощью JavaScript и включить проверки того, какой браузер использует пользователь.

Эта страница содержит информацию о динамических сценариев Загрузка, которая является то, что я верю, что вы ищете: http://unixpapa.com/js/dyna.html

+0

Спасибо за предложение. Modernizr выглядит так, как будто он выполнит эту работу, а также позволит мне реализовать еще несколько HTML5, так что это кажется логичным выбором. – CYMR0

1

Насколько велики эти файлы сценариев? Вам не нужно беспокоиться о чем-то меньшем, чем пол-мегабайта на мобильных устройствах (пока они загружаются в нижней части страницы).

В противном случае, сервер-сторонний решение вероятно, будет работать лучше всего:

How do I determine whether it's a mobile device with PHP?

+0

Я не думаю, что они такие большие, но они достаточно большие, чтобы замедлить работу с мобильным телефоном, если не на Wi-Fi/3g. У нас есть сторонние скрипты для чата и некоторые другие вещи. Серверная сторона была бы идеальной, но не могла бы использовать PHP - работать с ней. – CYMR0

0

Предположим, у вас есть три столбца рабочего стола макет так:

<body> 
    <div id="ad-1"> 
    //javascript1 goes here 
    </div> 
    <div id="content"> 
    //content goes here 
    </div> 
    <div id="ad-2"> 
    //javscript2 goes here 
    </div> 
</body> 

И предположим, что вы создали отзывчивый сайт таким образом, что:

@media screen and (max-width: 1024px) { 
    #ad-1{ display: none; } 
} 
@media screen and (max-width: 768px) { 
    #ad-2{ display: none; } 
} 

Вы не хотите, чтобы загрузить скрипты, если они не видны, поэтому вот способ решить это:

var ResponsiveScriptsLoader = { 

onAdsReady: function() { 
    console.log('success'); 
}, 

addScripts: function(scripts, callback) { 
    for (var i = 0; i < scripts.ads.length; i++) { 
    this.include(scripts.ads[i].src, scripts.ads[i].selectorID); 
    if(i==scripts.ads.length-1) callback(); 
    } 
}, 

include: function(what, where) { 
    var deferred = new $.Deferred(), place; 
    var e = document.createElement('script'); 
    e.onload = function() { deferred.resolve(); }; 
    e.src = what; 
    place = document.getElementById(where); 
    if(place) { 
     place.appendChild(e); 
    } 
    return deferred.promise(); 
}, 

init: function(){ 
if(screen.width > 768){ 
    if(screen.width > 1024){ 
     this.addScripts({ 
     ads: [ 
     { 
      src: "http://ads.script1.js", 
      selectorID: "ad-1" 
     }, 
     { 
      src: "http://ads.script2.js", 
      selectorID: "ad-2" 
     } 
     ]}, this.onAdsReady); 
    } else{ // Screen size is between 769 and 1023 
     this.addScripts({ 
     ads: [ 
     { 
      src: "http://ads.script2.js", 
      selectorID: "ad-2" 
     } 
     ]}, this.onAdsReady); 
     } 
    } 
} 
} 

ResponsiveScriptsLoader.init();