Тайм-аут загрузки для Javascript - PullRequest
4 голосов
/ 02 августа 2010

Рассмотрим следующий документ

<html>
    <body>
        This is some content
        <script type="text/javascript" src="verySlowToRespond.js"></script>
        This is some more content
    </body>
</html>

Я хотел бы сначала проверить мое предположение, что браузер небезопасен для анализа после тега script до тех пор, пока скрипт не загрузится и не выполнится.

Это означает, что (если мое предположение верно), скажем, verySlowToRespond.js требуется 20 секунд, чтобы ответить, DOM страницы не может быть полностью собран, пока эта зависимость не разрешена.

Предположим, verySlowToRespond.js бездельничал? В какой момент браузер сдастся и продолжит анализ?

Ответы [ 3 ]

3 голосов
/ 02 августа 2010

Правильно: браузер не продолжит работу после тега сценария, пока не прочитает и не оценит его.

Браузер сдается по тем же правилам тайм-аута, что и для страниц.Это зависит от браузера и точной природы тайм-аута.

Мне интересно, почему существует такая вещь, как сценарий с медленным ответом.Что-то не так с вашим хостингом?Сценарий медленный до отвечает , или он загружается, а затем запускается очень долго?

2 голосов
/ 02 августа 2010

Да, ваше первое предположение верно. Браузеры прекращают рендеринг до тех пор, пока теги <script> не завершат загрузку и не выполнятся.

Поведение очень длинных скриптов зависит от браузера. Новые браузеры часто дают вам возможность прервать сценарий. Старые браузеры могут быть принудительно закрыты.

1 голос
/ 02 августа 2010

Вы правы.Браузер не будет отображать остальную часть страницы до тех пор, пока этот сценарий не будет завершен.Время ожидания будет зависеть от базовых свойств сокета, я полагаю.

Если вас беспокоит время загрузки скрипта, важно, чтобы скрипт не вносил никаких изменений DOM, которые должны быть выполнены до остальныхстраницы рендеринга.Затем вы можете добавить обработчик onload для вызова setTimeout для выполнения кода для асинхронной загрузки сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...