2010-08-02 2 views
3

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

<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 висели на неопределенное время? В какой момент браузер бросил бы и продолжил бы разбор?

+2

У меня нет жестких номеров, но время ожидания Firefox составляет от 20 до 30 секунд от моего опыта. Это значение, установленное индивидуально в каждом браузере. –

+2

Это одна из причин, почему я не ставил JS в и предпочитаю запускать сценарии при загрузке. – Robusto

ответ

3

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

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

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

+0

Это гипотетический вопрос, который я должен задать, потому что мы доставляем виджет на основе Javascript на сторонние страницы, и в случае, если наши серверы не в верхней форме, они могут столкнуться с проблемами, вызванными нами. Нам не хотелось бы, чтобы мгновенный сайт CDN замедлился, ожидая нас. У меня уже есть намного лучший механизм доставки, но я пытаюсь написать документацию для поддержки проблем, которые я нашел с предыдущим методом доставки. – spender

+0

Ну, один из способов обойти проблему состоит в том, чтобы ваш контент содержался внутри '