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

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

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

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

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

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

Как избежать перестройки дерева страницы

Рискованное построение дерева терпит неудачу в случае, когда функция document.write() изменяет состояния построителя дерева так, что то рискованное состояние после тега </script> более не остаётся прежним после того, как весь контент, добавленный через document.write(), будет распарсен. Только несколько необычных применений document.write() вызывают эту проблему. Вот, чего необходимо избегать:

  • Не пишите незаконченные древа. Вместо <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>.
, пока скрипт не загрузится и не выполнится. HTML-парсер в Firefox 4 и новее поддерживает рискованный парсинг вне главной ветки. Он продолжает парсить, пока скрипты загружаются и выполняются. В Firefox 3.5 и 3.6 парсер начинает рискованную загрузку скриптов, стилей и изображений, когда он находит их. Однако, в Firefox 4 и новее HTML-парсер также рискованно загружает алгоритм постройки дерева HTML. С одной стороны, когда риск оправдался, нет необходимости в репарсинге части, которая уже была просканирована на скрипты, стили и изображения. С другой стороны, когда риск не оправдался, HTML-парсеру достаётся больше работы.","popularity":0,"modified":"2021-06-21T18:45:27.000Z","other_translations":[{"title":"Speculative parsing","locale":"en-US","native":"English (US)"},{"title":"Optimizar sus páginas para análisis especulativo","locale":"es","native":"Español"},{"title":"Optimisation des pages pour l'analyse spéculative","locale":"fr","native":"Français"},{"title":"Speculative parsing (投機的解析)","locale":"ja","native":"日本語"},{"title":"Optimizing your pages for speculative parsing","locale":"pt-BR","native":"Português (do Brasil)"},{"title":"对页面预解析进行优化","locale":"zh-CN","native":"中文 (简体)"}],"source":{"folder":"ru/glossary/speculative_parsing","github_url":"https://github.com/mdn/translated-content/blob/main/files/ru/glossary/speculative_parsing/index.html","last_commit_url":"https://github.com/mdn/translated-content/commit/252eb18fe000a84e356d73a7184a960b7ea80314","filename":"index.html"},"parents":[{"uri":"/ru/docs/Glossary","title":"Глоссарий"},{"uri":"/ru/docs/Glossary/speculative_parsing","title":"Оптимизация ваших страниц для рискованного парсинга"}],"pageTitle":"Оптимизация ваших страниц для рискованного парсинга - Глоссарий | MDN","noIndexing":false}}