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

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

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

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

Нужно чтобы Живосайт начинал загружаться через 15-20 секунд после загрузки всех компонентов.
Такое возможно?
Спрашиваю не как специалист. Дабы программисту ткнуть в ссылку или ваш ответ и сказать "сделай так".
  • Вопрос задан
  • 1227 просмотров
Решения вопроса 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект