Как универсально ускорить "Ждать полной загрузки страницы"



  • У меня по всему проекту распиханы эти ждуны в таком виде:

    alt text

    И всегда отработка этой функции занимает минимум 4-5 секунд, я так понимаю на протяжении этого времени Бас проверяет меняется ли что-то в dom, если нет - принимает решение что страница загружена полностью.

    Кто знает как ускорить работу этого, или как придумать универсальное красивое решение которое будет работать по тому же принципу но быстрее.

    Почему я не использую "Ждать появления элемента" на всех блоках, вместо "Ждать полной загрузки" - если у нас есть форма заказа которая состоит из 3 шагов, и на каждом шаге нужно нажимать "Далее"... то если использовать ожидание появления, скрипт быстро прокликает трижды кнопку на первом шаге. Это абстрактный пример, но в моём скрипте эта ситуация происходит повсеместно )



  • @centerdevs это стремный ждун, там ток статус комплит. Тебе нужно документ статус значение интерактив



  • Дай сниппет плиз если есть уже такое протесченное?)

    Я так понимаю ты про это

    switch (document.readyState) {
      case "loading":
        // The document is still loading.
        break;
      case "interactive":
        // The document has finished loading. We can now access the DOM elements.
        // But sub-resources such as scripts, images, stylesheets and frames are still loading.
        const span = document.createElement("span");
        span.textContent = "A <span> element.";
        document.body.appendChild(span);
        break;
      case "complete":
        // The page is fully loaded.
        console.log("The first CSS rule is: " + document.styleSheets[0].cssRules[0].cssText);
        break;
    }
    

    если правильно понял, в случае если сайт это сплошной SPA - то интерактив может не отработать та как надо, потому что какой-то недогруженный JS мог в себе иметь какой-то нужный html который не успеет впилиться в dom, а событие уже сработает и скрипт продолжит работу )



  • @centerdevs said in Как универсально ускорить "Ждать полной загрузки страницы":

    если правильно понял, в случае если сайт это сплошной SPA - то интерактив может не отработать та как надо, потому что какой-то недогруженный JS мог в себе иметь какой-то нужный html который не успеет впилиться в dom, а событие уже сработает и скрипт продолжит работу )

    Все это костылями можно проверить после интерактива. Кол-во элементов на странице и т.д. При скорости интернета 20 мб+ вообще не возникает проблем, но это явно лучше чем комплит, один маленький запрос не ушёл и просто зря провисишь. Да и человек не ждет пока все запросы не уйдут.



  • @FastSpace Ну шо ты дразнишь?)) Дай в паблик это :)



  • Можете немного объяснить, как это юзать? У меня ещё периодически при ожидании элемента не срабатывает, когда элемент уже есть.



  • @Antonio Пока что "это" нам не дали... Но я уже начал выпрашивать )



  • @centerdevs Это уже паблик :) вон там написано же все. Ява скрипт вызови прост document.readyState получишь статус.



  • @FastSpace согласен) уже делаю, спасибо за наводку :)



  • @FastSpace реализовал, пока что работает кривовато...

    Бывает после клика по элементу с dom еще ничего не началось и readyState отвечает complete. Ты юзаешь обязательную задержку перед началом проверок?

    alt text

    Вот дефолтные настройки. По ним я думаю ты понял алгоритм работы ) + если interactive то есть условие на количество елементов между двумя последними итерациями проверки, если количество сошлось - значит делаем вывод что страница прогружена даже при статусе interactive.



  • @centerdevs said in Как универсально ускорить "Ждать полной загрузки страницы":

    @FastSpace реализовал, пока что работает кривовато...

    Бывает после клика по элементу с dom еще ничего не началось и readyState отвечает complete. Ты юзаешь обязательную задержку перед началом проверок?

    Я знаю, там еще много приколов будет.

    Оно и не должно выполнятся, т.к клик возможно был на элемент который не предполагает загрузок (выпадающие списки и т.д)
    Задержек никаких нет, они и не нужны.



  • @FastSpace Дай совет ) Что еще важно реализовать? Пока она не особо юзабельно получается, я заменил везде свои "ждуны" и естесвенно получилась анархия в работе скрипта) вернул обратно, а скрипт большой я даже хз с чего начинать, надо каждый случай отдельно рассматривать + каждый фикс делать чтобы не поломать что-то другое )



  • @centerdevs said in Как универсально ускорить "Ждать полной загрузки страницы":

    @FastSpace Дай совет ) Что еще важно реализовать? Пока она не особо юзабельно получается, я заменил везде свои "ждуны" и естесвенно получилась анархия в работе скрипта) вернул обратно, а скрипт большой я даже хз с чего начинать, надо каждый случай отдельно рассматривать + каждый фикс делать чтобы не поломать что-то другое )

    Там много всего, готовое решение не даю и 20+ случаев не распишу, но куда копать рассказал.



  • @FastSpace вроде допилил и стало лучше, но еще не идеал... ты ловишь глобально все ajax запросы и их состояние, помимо простого readyState на документ?



  • Протестил, реально при отправке ajax запроса, статус идёт как complete и dom не меняется. То есть надо еще ловить эти события и ждать пока они получат ответ, и тогда можно делать вывод о том страница догружена. В соседней ветке пытаюсь понять как передать из яваскрипта значение в бас переменные и буду двигаться дальше )


  • Banned

    @centerdevs как допилите поделитесь?



  • @lotra в личку скину, потому что @FastSpace мне даст по хребту )



  • @centerdevs Это ваши личные наработки, и никакой другой человек вам тут не указ. Хотите - выкладывайте в паблик, не хотите - оставляйте себе. То, что вы немного улучшили стандартные механизмы БАСа, не добавит вам +100500% конкуренции, а лишь немного улучшит другим людям жизнь в случае публикации наработок



  • @DoctorKrolic Полностью согласен, но мне никто и не указывал ничего, FastSpace дал сразу все наводки что и как делать, сам прямо заявил что своё решение в паблик не хочет давать, чисто из солидарности я решил что выкладывать в таком случае тоже не буду. По сути я делаю чисто механическую работу по его косвенным и прямым указаниям )


  • Banned

    @centerdevs буду благодарен если сделаете.


Log in to reply