【问题标题】:Optimizing my web application using Flash, Javascript and JSP使用 Flash、Javascript 和 JSP 优化我的 Web 应用程序
【发布时间】: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 分,哈哈。
  • 你可能对这个presentation on Flash internals/performance感兴趣
  • 将网页放在一起在计算上并不便宜,尤其是当您开始使用 Flash 和 Jscript 时。您的 HDD 和 CPU 可能会起作用。尝试在各种机器上进行测试。此外,GET第 3 方 SWF 涉及打开连接,这也需要时间。通常 I/O(HDD 和 NET)是分析世界中的常见问题。
  • @sixtyfootersdude - 在 NET 面板屏幕截图中加载 SWF(红色区域)时,Firebug 应该告诉您这 2 秒的详细信息(x 表示 DNS,y 表示下载等.. .),你能和我们分享一下吗?第二,你能建立一个这个网站的公共版本,所以我们可以测试它(给我们一个链接)?

标签: javascript flash optimization


【解决方案1】:

只是一些想法:

你能消除中间人,在这种情况下,第三方swf?

第三方 swf 位于何处?如果它在远程服务器上,您只需下载一次,然后将其与其他文件一起放在本地服务器上。这可以减少下载时间。

你能用类似flash反编译器的东西来反编译第三方swf的代码,然后把代码直接放到你的swf中吗? (这可能是违反规则的)

如果您不将内容放在 iframe 中,而是将它们放在 div 中会怎样?

【讨论】:

    【解决方案2】:

    作为另一种选择——尝试禁用萤火虫。时间是否会发生某种变化?

    也可以在 chrome 中尝试相同的方法——使用和不使用开发工具。

    要了解这个 jsp 是从您的 swf 调用的还是只是从您的 swf 调用的,您可以这样做:

    • 而不是您的普通 swf,只提供它 mock 而不需要任何调用 -- 只是空
    • 也代替框架中的 js 提供空文件

    部分执行此操作并检查差异。

    还尝试分析所有发生的新网络事件。可能是您的 SWF 调用了第 3 方中的某个方法,然后调用了某个远程方法。在这里,我认为我们无法改进这一点。只有当第 3 方中的方法可以以某种方式被缓存时才可能。因此,在您的个人资料中,我们只看到加载文件——我们没有看到任何其他请求——ajax 或类似的东西。

    【讨论】:

    • 查看我更新的问题。在 Chrome 和 IE 中测试。我不认为这给了我任何新的见解,不是吗?
    【解决方案3】:

    据我了解,嫌疑人有三种可能。

    1. Firebug 分析器。在其他浏览器上试一下,看看需要多少时间。
    2. Red 组件在加载其他组件之后需要一些时间。
    3. SWF 文件通过您的服务器而不是直接连接来创建与其他应用程序的连接。

    【讨论】:

      【解决方案4】:

      iframe 是否来自服务器的 HTML 响应?或者,iframe 是通过 javascript 动态添加到 DOM 中的吗?

      等待 DOM 准备好并在页面加载后将 iframe 插入 DOM,您将获得更好的性能。

      我认为问题在于,当本地 SWF 下载第 3 方 SWF 时,Flash 会阻止脚本执行。您可能需要弄清楚如何使用 ActionScript 对 3rd 方 SWF 进行并发、非阻塞、异步下载。

      【讨论】:

        【解决方案5】:

        我创建了一个 helloWorld SWF 并将其嵌入到网页中。

        在我测试的浏览器上,加载 swf 需要很长时间。当页面上只有一个 swf 时,这并不明显(加载时间约为 3 秒),但是当页面上有 10 个 swf 时,会出现明显的暂停(~3 秒/图表 * 10 个图表 = 30 秒)。

        以下是我测试过的浏览器:

        • IE 7 - 非常慢。加载 16 个“Hello World”应用程序大约需要 37 秒
        • IE 8 - 看起来基本没问题。只测试了一小段时间
        • Firefox 3.6.17 - 非常慢。与 IE 7 一样慢
        • Chrome 12.0.742.91 - 快速

        我在另一个问题中发布了我的 hello world 应用程序。如果有人知道如何加快加载非常简单的 swf,您可以在这里回答:

        Flash: Many identical SWFs on same Page

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-30
          • 1970-01-01
          相关资源
          最近更新 更多