【问题标题】:How does a browser load a flash file? (swf)浏览器如何加载 Flash 文件? (瑞士法郎)
【发布时间】:2011-08-17 17:15:54
【问题描述】:

浏览器如何加载 Flash 文件?它们是逐步加载的,还是浏览器等到整个 Flash 文件加载完毕后再显示?

原因是我有一个质量极高的小剪辑,只有几秒钟长,但超过 4 mb。

用户是否必须等到所有 4 mb 都加载完毕才能查看?还是在用户观看时加载?

我没有做任何花哨的事情,我只是将 .flv 导入 Flash,然后导出为 .swf。

在此感谢您

【问题讨论】:

  • 作为新用户很好地解决了这个问题。

标签: html performance browser flash


【解决方案1】:

加载 Flash 文件有很多部分,更一般地说,加载一个 HTML 页面。

我将从 HTML 页面的顶部开始,并敦促其他人纠正我可能犯的任何错误。

加载页面

当收到一个 HTML 页面时,浏览器会将其解析为文档对象模型 (DOM),以便它具有每个元素的编程表示。浏览器遍历 DOM 树中的每个节点并根据需要填充它。

对于大多数节点来说,这只是创建一个新的 DOM 元素,例如 divpa;但是有些内容需要加载或替换。

表单元素(inputselectbuttontextarea)被替换为这些表单字段的特定于浏览器的表示形式。

link 用作样式表的元素是异步加载的。在加载外部资源时,DOM 会继续解析页面。

另一方面,script 元素是同步加载的。在脚本完成加载和执行之前,DOM 无法继续解析树,但加载失败或执行出错时除外。

img 元素是异步加载的,但允许onload 回调来确定它们何时完成加载。在所有 img 元素都完成加载(或失败)之前,DOM 无法触发窗口的 onload 事件。

了解基本元素有助于理解更多涉及的元素,例如 objectembediframe,它们也被替换为内容。

Flash 通常使用objectembediframe 嵌入到网页中。

据我所知,objectembed 元素的反应相似,所以我将直接说 object 从这里开始。

iframeobject 元素中加载 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

【讨论】:

  • 感谢您提供如此详尽的回答。只是为了确认一下:我正在使用 swfobject,这是否意味着即使我的视频只是在一帧上,视频仍然会逐步加载?
  • 如果您在谈论 播放,这取决于您如何设置对 mp4(或任何格式)的引用闪存文件。如果您只在一帧上播放视频,则必须等待 flash 文件加载后才能播放视频,但 flash 将通过 swfobject 逐步加载。我建议在某种远程主机上测试视频,看看到底发生了什么,而不是猜测可能会发生什么。
【解决方案2】:

swf 文件是逐步加载的(因此加载器条、“50% 加载”消息等)。

从历史上看,Flash 文件是基于帧的,如果主时间轴有多个帧,它们会在加载后按顺序加载并显示,然后再加载整个文件。然而,现在大多数 Flash 内容都不是这样构建的,而且比按顺序显示的一系列帧更复杂。视频播放还增加了基本帧模型之外的复杂性,包括视频编解码器、音频同步等。

所以对于“它们是渐进式加载,还是浏览器等到整个 Flash 文件加载后才显示它?”问题的答案是它们渐进式加载并在整个 Flash 文件之前显示swf 文件已加载。但这将如何影响用户体验您的视频,如果没有看到它或它是如何构建的,就很难说清楚。

【讨论】:

    【解决方案3】:

    它将首先加载整个电影。因此,请将您的视频设为电影运行时加载的外部文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      相关资源
      最近更新 更多