Подгрузка содержимого Ajax

Главные вкладки

Аватар пользователя Pan4eZzz Pan4eZzz 26 октября 2011 в 14:10

Добрый день!

Появилась необходимость подгружать js-код одной партнерки в асинхронном режиме. Сайт открывается очень-очень быстро, в то время как сервер партнерки часто находится под ддосом, по их словам, и блок иногда долго пустует. И конечно-же очень напрягает курсор в фоновом режиме.

Не хотелось использовать какие-то сторонние библиотеки, ведь друпал снабжен jquery, да и ctools стоит.

Как с помощью этих инструментов сделать подгрузку js.

В ctools есть ctools_add_js(), но как им пользоваться не разобрался, мне нужно подгружать не результаты работы скрипта, а сам скрипт.

Комментарии

Аватар пользователя Cyber Cyber 26 октября 2011 в 22:17

"xxandeadxx" wrote:
(function(){
var s = document.createElement('script');
s.src = 'url';
s.setAttribute('async', 'true');
document.documentElement.firstChild.appendChild(s);
})();

С большой верноятностью банерорезалка накернит этот код и будет облом.

(function(){
$.get.Script();
})($);

Альтернатива: переписать код на срабатывание по другому условию

1. аналог быстрого defer на jquery

$.ajax({
 ...
  success: function(){
    $.get.Script('http://source.path');
  }
});

2. воткнуть напрямую:
<script src="" async="async"></script>

Аватар пользователя xxandeadxx xxandeadxx 26 октября 2011 в 22:30

"Cyber" wrote:
С большой верноятностью банерорезалка накернит этот код и будет облом.

назови хоть одну, которая накернит

Аватар пользователя Cyber Cyber 26 октября 2011 в 22:39

"xxandeadxx" wrote:
назови хоть одну, которая накернит

любая их тех, что настраиваются руками и позволяют импортировать уже подготовленный набор паттернов Wink Просто в этом коде нет смысла. Ты на IIFE вешаешь ижектор скрипта в дом(тот же эффект если пропишень тупо напрямую).

Аватар пользователя xxandeadxx xxandeadxx 26 октября 2011 в 23:13

"Cyber" wrote:
любая их тех, что настраиваются руками и позволяют импортировать уже подготовленный набор паттернов ;)

например

"Cyber" wrote:
тот же эффект если пропишень тупо напрямую

тупо напрямую эффект не будет асинхронным

Аватар пользователя Cyber Cyber 26 октября 2011 в 23:22

"xxandeadxx" wrote:
тупо напрямую эффект не будет асинхронным

атрибут async для кого придумали? отличие лишь в том, что загрузка начнется в тот момент, когда документ распарсится до твоей IIFE. Реализация может быть какой угодно. Если ты пишешь какую-то логику, то никто не ограничивает в реализации, но вот такой подход -- это как бы отстой(только не надо щас GA в пример приводить, там расчет на то чтобы проще воткнуть).

http://www.w3schools.com/Ajax/ajax_intro.asp
http://www.w3schools.com/ajax/default.asp

http://www.w3schools.com/html5/att_script_async.asp
http://www.w3schools.com/html5/att_script_defer.asp

Если ты волнуешься за ишака, то через $.get.Script проблема точно решится. Как плюс: не грузим если не надо, грузим в том момент когда надо. Предусматривает другие обработчики, если надо.

Аватар пользователя Cyber Cyber 26 октября 2011 в 23:26

Quote:
(function(){
var s = document.createElement('script');
s.src = 'url';
s.setAttribute('async', 'true');
document.documentElement.firstChild.appendChild(s);
})();

Если ты не понял, то это полностью эквивалентно этому:

<head>
<script src="" async="async"></script>
</head>

за исключение этого:

"Cyber" wrote:
загрузка начнется в тот момент, когда документ распарсится до твоей IIFE

сделано это для осла, потому что плохо написана логика

Аватар пользователя Cyber Cyber 26 октября 2011 в 23:30

p.s.: если тебе интересно капельку больше, просто промониторь страницу с метрикой и сравни с GA(defer срабатывает через 15 секунд после распарса, async якобы фоном грузтся но это тупо просто потому что у тебя инжектор в теле а не в башке). Все станет понятно

Аватар пользователя Cyber Cyber 26 октября 2011 в 23:46

p.s.: а ещ] могу тебе сказать, что получать скрипты через http: несколько быстрее чем через https, который временно блокирует загрузку. Ну и я не говорю про редиректы Wink

Аватар пользователя xxandeadxx xxandeadxx 26 октября 2011 в 23:49

"Cyber" wrote:
атрибут async для кого придумали?

для наших детей и правнуков

"Cyber" wrote:
но вот такой подход -- это как бы отстой

аргументы? по пунктам пожалуйста

"Cyber" wrote:
только не надо щас GA в пример приводить, там расчет на то чтобы проще воткнуть

проще воткнуть 6 строчек вместо одной? кому проще?

"Cyber" wrote:
то через $.get.Script проблема точно решится

какбэ у get.Script защита от кеширования

"Cyber" wrote:
Как плюс: не грузим если не надо, грузим в том момент когда надо

что мешает сделать это в случае document.createElement('script');?

и да:

"Cyber" wrote:
любая их тех, что настраиваются руками и позволяют импортировать уже подготовленный набор паттернов ;)

пример то будет нет?