加载 Flash 文件有很多部分,更一般地说,加载一个 HTML 页面。
我将从 HTML 页面的顶部开始,并敦促其他人纠正我可能犯的任何错误。
加载页面
当收到一个 HTML 页面时,浏览器会将其解析为文档对象模型 (DOM),以便它具有每个元素的编程表示。浏览器遍历 DOM 树中的每个节点并根据需要填充它。
对于大多数节点来说,这只是创建一个新的 DOM 元素,例如 div、p 或 a;但是有些内容需要加载或替换。
表单元素(input、select、button、textarea)被替换为这些表单字段的特定于浏览器的表示形式。
link 用作样式表的元素是异步加载的。在加载外部资源时,DOM 会继续解析页面。
另一方面,script 元素是同步加载的。在脚本完成加载和执行之前,DOM 无法继续解析树,但加载失败或执行出错时除外。
img 元素是异步加载的,但允许onload 回调来确定它们何时完成加载。在所有 img 元素都完成加载(或失败)之前,DOM 无法触发窗口的 onload 事件。
了解基本元素有助于理解更多涉及的元素,例如 object、embed 和 iframe,它们也被替换为内容。
Flash 通常使用object、embed 和iframe 嵌入到网页中。
据我所知,object 和 embed 元素的反应相似,所以我将直接说 object 从这里开始。
在 iframe 和 object 元素中加载 flash 之间存在明显差异。
object 元素与script 元素非常相似,其中的内容必须成功加载并执行,然后才能继续解析 DOM。
iframe 元素与 img 元素非常相似,其中内容是异步加载的,但可以使用回调来确定加载何时完成 (虽然我不确定是否回调可用于跨域请求).
加载 Flash
上一节讨论只是内容加载的 HTML 方面。但是,Flash 中有许多细微差别会严重影响 Flash 电影的加载时间。
正如我之前所说,script 元素必须完全加载并在 DOM 可以继续被解析之前执行。在 Flash 文件中发现了类似的效果(即使通过 iframe 包含在内)。 swf 中嵌入的所有资源必须先加载,swf 才能释放对页面加载进度的保留。
如果您已将视频直接嵌入到时间线中,则必须先加载整个视频,然后才能将 Flash 视为完成初始执行。
如果您选择使用异步回调开始加载恰好是视频的外部资源,并使用异步加载器加载视频,则无需等待视频完成在加载页面的其余部分之前加载;在 Flash 中,您仍然需要等待视频完成加载,然后才能开始播放视频。
或者,Flash 中有多种方法可以流式传输视频,或者从服务器逐步加载视频,这样可以在未完成加载的情况下播放视频。 我在 Flash 的特定方面的经验很少,所以我不会解释它是如何完成的。
使用swfobject 之类的库可以异步加载所需的swf,以便闪存加载是非阻塞的。
tl;博士:
Flash 文件可能会根据您的 HTML 结构以及swf 中运行的代码逐步加载。
您可能想查看swfobject