【发布时间】:2011-09-05 14:13:36
【问题描述】:
我有一个想要加快速度的网络应用程序。它看起来像这样:
+------+
| |
| |
+------+
+------+
| |
| |
+------+
+------+
| |
| |
+------+
每个框都是一个 iFrame,其中包含一个 Flash SWF 和一些 javascript。 SWF 下载用于显示信息的第三方 SWF。我发现 webapp 的加载时间是:
LoadTime = (4 seconds) * numberOfBoxes + (3 seconds)
当我直接嵌入第 3 方 swf(没有我们的 swf 或 javascript)时,加载时间是:
LoadTime = (1 second) * numberOfBoxes + (2.5 seconds)
我正在尝试找出额外 3 秒的使用时间,以便我可以加快我们的 web 应用程序的速度。我认为候选人是:
- 服务器端处理 (jsp)
- 下载
- Javascript
- 闪光
- 其他?
下载
下面是从 firebug 下载的图片。我已经用它们的类型替换了文件名。 在第一次之后,没有一个下载需要特别长的时间。
然而,一个感兴趣的地方被标记为红色。红色区域是加载 My SWF 与加载两个 gif 文件后跟 Third Party SWF 之间的 3 秒间隔。我认为这种暂停是由客户端处理引起的(这是真的吗?)。
注意:图表中的红色条不是图表的一部分。我添加它们是为了突出显示 .net 面板上没有发生任何事情的间隙。
我认为我可以由此得出结论,我有一个客户端处理问题,这意味着 Flash 或 Javascript。 问题 1:正确吗?
编辑:我将总非并发下载时间加起来:
- 当有 1 个 iframe 时,下载时间为 1.87 秒
- 当有 2 个 iframe 时,下载时间为 2.29 秒
- 当有 5 个 iframe 时,下载时间为 8.57 秒
- 当有 10 个 iframe 时,下载时间为 10.62 秒
- 当有 21 个 iframe 时,下载时间为 17.20 秒
Javascript
我在 firebug 中使用分析器来分析 javascript。以下是页面上有四个组件时的结果:
这意味着 javascript 正在运行大约 0.25 秒/图表。这在我看来是合理的。
问题 2:我是否正确阅读了这些结果?
这为其他事情留下了大约 3.5 秒/图表的处理时间。
闪光
我在 AS3 代码中插入了一些跟踪语句。我们正在收听一个名为“完成加载”之类的事件。我在第一个初始化方法和“完成加载”方法中添加了一个跟踪。在这两个跟踪语句之间,flash 只占用了 0.2 秒/图表。
问题 3:有没有更好的方法来配置 flash?会不会是 Flash 加载或类似的东西占用了额外的时间?
其他
我不知道除了:
- 服务器端处理 (jsp)
- 下载
- Javascript
- 闪光
问题 4:我错过了什么可能会占用时间?
后续步骤
我不确定我的下一步应该是什么。我知道某事大约需要 1.5 - 3 秒/图表,但我无法弄清楚它是什么。我怀疑这与我的 swf 有关。
问题 5:我应该如何找到丢失的时间?
更新:时间总结
我已经为每件可能需要时间的事情绘制了所有时间。
- X 轴是正在使用的图表数。
- Y 轴是加载所有图表所需的时间。
最后一张图可能是最重要的图。蓝点是总加载时间(使用秒表测量)。红点是我计算的时间量(Javascript、下载时间和闪存时间)。
更新:浏览器大战
我的目标是 IE 和 Firefox(尽管如果其他浏览器也能工作,这是一个很好的奖励)。到目前为止显示的所有结果都是使用运行 firebug 的 Firefox。只是为了好玩,我想我会在其他浏览器中尝试。我不认为这让我更接近解决方案,但有趣的是看看 IE 有多糟糕。
注意:在运行 Firefox 测试之前,我清除了 cookie 和缓存。我没有为 IE 或 Chrome 这样做
更新:Flash 加载
尽管我的代码试图将慢速代码夹在中间,但我一直在散布console.log 语句。 (结果被推送到 Firebug 控制台)。
我注意到我觉得可疑的一件事是,在我的最后一个 javascript 日志被打印和我的第一个 flash 日志被打印之间有 2.5 秒的间隔。
17:08:29.973 - Javascript code
Time difference: 2510 ms
17:08:32.483 - Flash- myComponent.init()
flash 是否需要为每个 swf 设置一个虚拟机?它是否在客户端编译动作脚本?
当我 <embed> 我的 swf 和我的主 .mxml 中的 creationComplete 事件之间会发生什么?
【问题讨论】:
-
这是我见过的最好的书面问题之一。很遗憾,我无法为您解答。
-
通过投票,他拿回了 50 分,哈哈。
-
将网页放在一起在计算上并不便宜,尤其是当您开始使用 Flash 和 Jscript 时。您的 HDD 和 CPU 可能会起作用。尝试在各种机器上进行测试。此外,GET第 3 方 SWF 涉及打开连接,这也需要时间。通常 I/O(HDD 和 NET)是分析世界中的常见问题。
-
@sixtyfootersdude - 在 NET 面板屏幕截图中加载 SWF(红色区域)时,Firebug 应该告诉您这 2 秒的详细信息(x 表示 DNS,y 表示下载等.. .),你能和我们分享一下吗?第二,你能建立一个这个网站的公共版本,所以我们可以测试它(给我们一个链接)?
标签: javascript flash optimization