Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

Оптимизация Ваших страниц для рискованного парсинга

Эта статья нуждается в редакционном обзоре. Как вы можете помочь.

В процессе перевода.

Традиционно, HTML-парсер в браузерах работает на главной ветке и блокируется после тега </script>, пока скрипт не загрузится и не выполнится. HTML-парсер в Firefox 4 и новее поддерживает рискованный парсинг вне главной ветки. Он продолжает парсить, пока скрипты загружаются и выполняются. В Firefox 3.5 и 3.6 парсер начинает рискованную загрузку скриптов, стилей и изображений, когда он находит их. Однако, в Firefox 4 и новее HTML-парсер также рискованно загружает алгоритм постройки древа HTML. С одной стороны, когда риск оправдался, нет необходимости в репарсинге части, которая уже была просканирована на скрипты, стили и изображения. С другой стороны, когда риск не оправдался, HTML-парсеру достаётся больше работы.

Эта статья поможет Вам избежать некоторые проблемы, которые замедляют загрузку страницы.

Делаем рискованную загрузку успешной

Есть только одно правило, чтобы сделать рискованную загрузку скриптов, стилей и изображений успешной:

  • Если Вы используете элемент <base>, чтобы заменить основной URI страницы, поместите этот элемент в часть страницы без скриптов. Не добавляйте его с помощью document.write() или document.createElement().

Избегаем перестройки древа страницы

Speculative tree building fails when document.write() changes the tree builder state such that the speculative state after the </script> tag no longer holds when all the content inserted bydocument.write() has been parsed. However, only unusual uses of document.write() cause trouble. Here are the things to avoid:

  • Не пишите незаконченные древа. Вместо <script>document.write("<div>");</script> лучше написать <script>document.write("<div></div>");</script>.
  • Не пишите незаконченные теги. Не стоит писать <script>document.write("<div></div");</script>.
  • Не заканчивайте строку возратной кареткой (\r). Вместо <script>document.write("Hello World!\r");</script> лучше написать <script>document.write("Hello World!\n");</script>.
  • Заметьте, что написание законченных тегов может повлиять на другие теги так, что они станут незаконченными. В том числе, <script>document.write("<div></div>");</script> внутри <head> будет интерпретировано как <script>document.write("</head><body><div></div>");</script>, что повлияет на <head> так, что он станет незаконченным.
  • Не форматируйте часть таблицы. Вместо <table><script>document.write("<tr><td>Hello World!</td></tr>");</script></table> лучше написать <script>document.write("<table><tr><td>Hello World!</td></tr></table>");</script>.

Метки документа и участники

 Внесли вклад в эту страницу: SnejUgal, teoli, Gucci_08_rus
 Обновлялась последний раз: SnejUgal,