Есть много частей для загрузки флэш-файла и, в более общем смысле, HTML-страницы.
Я собираюсь начать сверху с HTML-страницы, и я призываю других исправить любые ошибки, которые явозможно, сделал.
Загрузка страницы
При получении HTML-страницы браузер анализирует ее в объектную модель документа (DOM), чтобы она имела программное представление каждого элемента.Браузеры выполняют итерацию по каждому узлу в дереве DOM и заполняют его по мере необходимости.
Для большинства узлов это просто создание нового элемента DOM, например div
, p
или a
;однако некоторое содержимое требует загрузки или замены.
элементы формы (input
, select
, button
, textarea
) заменяются представлением этих полей формы в зависимости от браузера.
link
элементы, используемые в качестве таблиц стилей, загружаются асинхронно.DOM продолжает анализировать страницу во время загрузки внешнего ресурса.
script
элементы, с другой стороны, загружаются синхронно.DOM не может продолжить синтаксический анализ дерева, пока скрипт не завершит загрузку и выполнение, за исключением случаев, когда загрузка не удалась или при выполнении произошла ошибка.
img
элементы загружаются асинхронно, но учитываютonload
обратный вызов, чтобы определить, когда они закончили загрузку.DOM не может вызвать событие onload
окна, пока все элементы img
не загрузятся (или не завершатся).
Понимание основных элементов помогает понять более сложные элементы, такие как object
, embed
и iframe
, которые также заменяются контентом.
Flash обычно встроен в веб-страницу с использованием object
, embed
и iframe
.
.Я знаю, что элементы object
и embed
реагируют аналогичным образом, поэтому я буду сокращенно и скажу object
с этого момента.
Есть четкие различия между загрузкой флэш-памяти в iframe
иobject
elements.
Элемент object
очень похож на элемент script
, где содержимое должно быть успешно загружено и выполнено, прежде чем DOM сможет продолжить анализ.
Элемент iframe
очень похож на элемент img
, где содержимое загружается асинхронно, но обратный вызов может быть использован для определения, когда загрузка завершится (хотя я не уверен, что обратный вызовдоступно для междоменных запросов) .
Загрузка Flash
В предыдущем разделе обсуждается просто сторона HTML загрузки контента.Однако во флэш-памяти есть ряд нюансов, которые могут серьезно повлиять на время загрузки флэш-фильма.
Как я уже говорил ранее, элементы script
должны быть полностью загружены и , выполняемые доDOM может продолжать анализ.Аналогичный эффект обнаруживается в файлах Flash (даже если они включены через iframe
).Все ресурсы, встроенные в swf
, должны быть загружены до того, как swf
сможет освободить удержание в процессе загрузки страницы.
Если вы встроили видео непосредственно во временную шкалу, whole видео должно быть загружено, прежде чем флэш-память может считаться выполненной с ее первоначальным выполнением.
Если вместо этого вы решили использовать асинхронный обратный вызов, чтобы начать загрузку внешнего ресурса, который оказалсявидео, и для загрузки видео использовался асинхронный загрузчик, вам не пришлось бы ждать окончания загрузки видео, прежде чем можно будет загрузить остальную часть страницы;во флэш-памяти вам все еще нужно дождаться окончания загрузки видео, прежде чем начать воспроизведение видео.
В качестве альтернативы, во флэш-памяти есть несколько способов для потоковой передачи видео или постепенной загрузки видео изсервер, который позволил бы воспроизводить видео без завершения загрузки. Мой опыт работы с этим конкретным аспектом флэш-памяти минимален, поэтому я не буду объяснять , как это делается .
Использование библиотеки, подобной swfobject
, позволяет получить желаемое swf
для асинхронной загрузки, чтобы флэш-загрузка не блокировалась.
ТЛ;dr:
Flash-файлы могут загружаться постепенно, в зависимости от того, как вы структурировали свой HTML, и какой код выполняется в swf
.
. Вы можете захотетьзаглянуть в swfobject