浏览器如何加载flash文件?它们是逐步加载,还是浏览器等到整个flash文件加载后才显示?
原因是我有一个非常高质量的小剪辑,只有几秒长,但它超过了4MB。
在查看之前,用户是否需要等待所有4 mb的加载?还是用户观看时加载?
我没有做任何花哨的事情,我只是把一个.flv导入Flash,然后作为一个.swf导出。
提前谢谢你
最佳答案
加载flash文件有很多部分,更一般地说,是一个HTML页面。
我将从HTML页面的顶部开始,并敦促其他人纠正我可能犯下的任何错误。
加载页面
当收到HTML页面时,浏览器将其解析为文档对象模型(Document Object Model,DOM),以便它对每个元素都有一个编程表示。浏览器遍历DOM树中的每个节点,并根据需要填充它。
对于大多数节点,这只是创建一个新的DOM元素,比如div
、p
或a
;但是有些内容需要加载或替换。
表单元素(input
、select
、button
、textarea
)将替换为这些表单字段的浏览器特定表示。link
用作样式表的元素是异步加载的。当加载外部资源时,DOM继续解析页面。script
另一方面,元素是同步加载的。在脚本完成加载和执行之前,DOM无法继续分析树,但加载失败或执行出错时除外。img
元素是异步加载的,但允许onload
回调确定它们何时完成加载。在所有onload
元素完成加载(或失败)之前,DOM无法触发窗口的img
事件。
理解基本元素有助于理解更多涉及的元素,如object
、embed
和iframe
,它们也被替换为内容。
Flash通常使用object
、embed
和iframe
嵌入到网页中。
据我所知,object
和embed
元素的反应类似,所以我会从这里开始抄近路说object
。
在iframe
和object
元素中加载flash有显著差异。object
元素与script
元素非常相似,其中必须成功加载和执行内容,然后才能继续分析DOM。iframe
元素与异步加载内容的img
元素非常相似,但可以使用回调来确定加载何时完成(尽管我不确定回调是否可用于跨域请求)。
加载闪存
上一节仅讨论内容加载的HTML方面。然而,flash中存在许多细微差别,这些细微差别会严重影响flash电影的加载时间。
如前所述,script
元素必须完全加载并执行,然后才能继续分析DOM。Flash文件中也有类似的效果(即使通过iframe
包含)。必须先加载swf
中嵌入的所有资源,然后swf
才能释放其对页面加载进度的保留。
如果您已经将视频直接嵌入到时间轴中,则必须加载整个视频,然后才能将flash视为完成其初始执行。
相反,如果您选择使用异步回调开始加载碰巧是视频的外部资源,并使用异步加载程序加载视频,则无需等待视频加载完成,页面的其余部分才能加载;在flash中,在开始播放视频之前,您仍然需要等待视频完成加载。
或者,在flash中有许多装置用于流式传输视频,或者从服务器逐步加载视频,这将使视频能够在未完成加载的情况下播放。我对flash这方面的经验很少,所以我不会解释它是如何做到的。
使用类似于swfobject
的库允许异步加载所需的swf
,这样flash加载就不会阻塞。
tl;博士:
Flash文件可能会逐步加载,这取决于您如何构建HTML,以及swf
中运行的代码。
您可能需要查看swfobject
关于html - 浏览器如何加载Flash文件? (瑞士法郎),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7096824/