@Emike
Бизнес, СДЛы, писанина, йога, счастье )

Как загрузить JS файл через какой-то интервал времени?

Приветствую!

Столкнулся с такой проблемой.
Одностраничный онлайн сервис на AngularJS.
В первые 10-15 секунд после загрузки идёт очень активное взаимодействие с сервером -
работает JS, загружает необходимые для отображения данные.
Поставил Живосайт. Он начинает загрузку одновременно с моими запросами.
Крайне важно, чтобы JS максимально быстро получил всё что нужно от сервера. А ему под ногами путается Живосайт со своей загрузкой.

Нужно чтобы Живосайт начинал загружаться через 15-20 секунд после загрузки всех компонентов.
Такое возможно?
Спрашиваю не как специалист. Дабы программисту ткнуть в ссылку или ваш ответ и сказать "сделай так".
  • Вопрос задан
  • 1271 просмотр
Решения вопроса 2
mlnkv
@mlnkv
JavaScript Developer
function loadScript(src) {
  var s = document.createElement('script')
  s.src = src
  document.body.appendChild(s)
}

// и дальше в нужном месте вызываем
loadScript('path/to/my/script.js');

// или по таймауту
setTimeout(function() { loadScript('path/to/my/script.js') }, 15000);
Ответ написан
@Kano
Вариант с использованием функции setTimeout как костыль вполне подходит для решения вашей задачи, но унего есть недостаток он срабатывает всегда через определенный интервал времени вне зависимости от скорости загрузки всех компонентов у пользователя (повторная загрузка страницы будет быстрее т.к все компоненты будут загружены из кеша.
Есть второй вариант (более продвинутый) - загрузка после решения всех зависимостей открываемой страницы.
Для этого надо в старте приложения (в теле функции run в файле app.js где связываются контроллеры с адресами страниц) подписаться на событие у
var off=$rootScope.on("$stateChangeSuccess",function(){})
или на событие
var off=$rootScope.on("$routeChangeSuccess",function(){})
в зависимости от того используете ли в вашем приложении ui.route или ngRoute для связывания путей с контроллерами.
В теле функции-обработчике сначало отписывайтесь от события (чтобы дважды не грузить живосайт) off()и грузите живосайт
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
drugoi
@drugoi
Front-end Developer
Через $timeout делать инициализацию можно, но она также может начаться в момент лоадинга других запросов. Можно по колбэку, когда все запросы отработаны подгружать jivosite.
Ответ написан
Комментировать
ruddy22
@ruddy22
Спасение утопающих — дело рук самих утопающих
$scope.$watch(function() {
    return $http.pendingRequests.length;
}, function(newVal) {
    if (newVal === 0) {
      (function loadScript(src) {
         var scriptElement = document.createElement('script');
         scriptElement.src = src;
         window.document.head.appendChild(scriptElement);
      })("/path/to/script/");
    }
});


ну и несколько картинок
ef970cf6e4af48be8e232f6b8b8866b2.png
код
b76008cd648f472aa7512ab5ef7a5f88.png
создан элемент и попытка загрузить скрипт
081498e3537b4e97a19d57953d4e6e65.png
элемент в дереве
Ответ написан
Комментировать
Staltec
@Staltec
Node.js разработчик
Ссылку не дам, но можно покопать в сторону использования комбинации setTimeout() и JQuery метода .getScript()
Ответ написан
Комментировать
@Emike Автор вопроса
Бизнес, СДЛы, писанина, йога, счастье )
Вот что ответила поддержка Живосайта:
1) Вам нужно обернуть наш скрипт в setTimeout
2) admin.jivosite.com - настройки - опции - перезагружать (включить),
3) В октябре будет обновление, которое не будет блокировать загрузку window
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы