Асинхронно зареждане на JS файл от друг сайт

scoobydoo

Know you can!
Здравейте.
Имам един (за сега) въпрос и се надявам някой да ми помогне.

Ако имаме зареждане на външен js файл, който се намира на друг домейн, то той зарежда ли се асинхронно?
Примерно това зарежда ли се асинхронно, ако приемем че example.com НЕ е нашия сайт:
Код:
<script type="text/javascript" src="http://example.com/bla.js"></script>
 
За: Асинхронно зареждане на JS файл от друг сайт

За: Асинхронно зареждане на JS файл от друг сайт

С този проблем и аз се блъскам от месеци. Мисля, че в повечето случаи не се зарежда асинхронно, защото тези, които предоставят файла, малко ги е грижа за твоя и моя сайт. В това число влиза и Гошо, на който почти всички кодове излизат като проблемни, ако си тестваш сайта със собственият им инструмент - Page Speed Online. Най-вече във връзка с техните кодове си чуках главата, но общо взето решение няма или поне ни съм намерил. Например файла за кода на Г+ бутона си изтеглих, качих при мен и почна да ми го компресира, а преди това редовно ми пишеше, че трябва да го компресирам, което няма как да стане на техния сървър. И все се питам, като не си правят те нещата като хората, какво искат от нас, та постоянно ни усложняват живота...
 
За: Асинхронно зареждане на JS файл от друг сайт

За: Асинхронно зареждане на JS файл от друг сайт

Ами аз имам чувството, че тези файлове се зареждат асинхронно, тоест докато се теглят, си се зареждат и нещата на моята страница, а не да се чака напразно. Ама не съм сигурен. И за това питам.
 
За: Асинхронно зареждане на JS файл от друг сайт

За: Асинхронно зареждане на JS файл от друг сайт

В твоя случай файлът се заражда синхронно. За асинхронно зареждане можеш да ползваш нещо такова:
Код:
(function(){
    var a = document.createElement('script');
    a.type = 'text/javascript';
    [B]a.async = true;[/B]
    a.src = 'http://example.com/bla.js';
    var b = document.getElementsByTagName('script')[0];
    b.parentNode.insertBefore(a, b);
})();
 
За: Асинхронно зареждане на JS файл от друг сайт

За: Асинхронно зареждане на JS файл от друг сайт

Ако сложиш async атрибут и кодът е пригоден за асинхронно зареждане (в общи линии да няма document.write), то няма причина да не се зарежда асинхронно. Това, че е на друг домейн не е никакъв проблем.

HTML:
<script type="text/javascript" src="http://example.com/bla.js" async></script>
 
За: Асинхронно зареждане на JS файл от друг сайт

За: Асинхронно зареждане на JS файл от друг сайт

Значи се зарежда синхронно.
А тогава да попитам, каква точно е разликата? Понеже гледам през онези сайтове, дето показват времевата линия на зареждане на елементите и като гледам докато си се зареждат други елементи от страницата, докато се зарежда този файл. В смисъл не се чака да е готов без да се прави нищо. Това не е ли асинхронно?
 
Re: За: Асинхронно зареждане на JS файл от друг сайт

Re: За: Асинхронно зареждане на JS файл от друг сайт

Значи се зарежда синхронно.
А тогава да попитам, каква точно е разликата? Понеже гледам през онези сайтове, дето показват времевата линия на зареждане на елементите и като гледам докато си се зареждат други елементи от страницата, докато се зарежда този файл. В смисъл не се чака да е готов без да се прави нищо. Това не е ли асинхронно?

Той файлът се сваля асинхронно, но не се изпълнява асинхронно. В смисъл, когато стигне до JS-а рендирането на HTML-а спира и чака той да приключи, за да продължи, което прави забавянето.

Иначе го сваля и изпълнява асинхронно, без JS файла по какъвто и да е начин да спъва зареждането на HTML-a. Сложно е за обяснение...
 
Последно редактирано:
За: Асинхронно зареждане на JS файл от друг сайт

За: Асинхронно зареждане на JS файл от друг сайт

Cloxy, а защо някои скриптове от типа <script type="text/javascript" src="http://example.com/bla.js"></script> спират да работят, ако поставиш атрибут async? Конкретен пример е плаващото меню в сайта ми - ако му поставя асинхронно зареждане (изпълнение), менюто изчезва.
 
Re: За: Асинхронно зареждане на JS файл от друг сайт

Re: За: Асинхронно зареждане на JS файл от друг сайт

Cloxy, а защо някои скриптове от типа <script type="text/javascript" src="http://example.com/bla.js"></script> спират да работят, ако поставиш атрибут async? Конкретен пример е плаващото меню в сайта ми - ако му поставя асинхронно зареждане (изпълнение), менюто изчезва.

Не всички скриптове могат да работят асинхронно. Най-вероятно имаш document.write() в кода, което не може да работи асинхронно.
 
За: Re: За: Асинхронно зареждане на JS файл от друг сайт

За: Re: За: Асинхронно зареждане на JS файл от друг сайт

Не всички скриптове могат да работят асинхронно. Най-вероятно имаш document.write() в кода, което не може да работи асинхронно.
Не съм разглеждал съдържанието на самите файлове, но имам два реда за извикване на файлове (единият за самото меню, а другият - какво да се съдържа в менюто) и на който от двата да сложа атрибут async, менюто веднага се скрива.
 

Back
Горе