SWFUpload 2.5 bug 修改 (2)

在 github 上我放了一个 修改版 ,有兴趣的同学可以测试下性能。
需要注意的是,要在支持 PHP 的 Webserver 下运行。

再遇问题

经过上一轮的 SWFUpload 修改两周后有人反馈:

  • 上传速度非常慢,上传 8 张图片,有时甚至 8 分钟都没上传完;
  • 其次是上传图片数量到某个阈值就无法上传;

Debug 了一个下午,发现:

  • 问题 1 上传速度慢的问题,只存在 IE 里。
    • 我也觉得很奇怪,为什么 Flash 的性能还和浏览器有差别
  • 问题 2 不是 Flash 的问题,与脚本使用有关
    • 经查问题发现 Flash 用 css 隐藏之后,在 IE 下压缩和上传都无法 work (这比较好查);

改造以及测试

随之,经过一系列的调试和全系列机器环境测试:

  • 测试环境在 Flash Player 版本都是 11+;
  • 在 Mac 下的最新版 Safari, Chrome, Firefox 和 win xp , Win 7 下的 IE 6, 7, 8 ;
  • 测试图片由 5616  ×  3744 5M 及 3888  ×  2592px 的图组成;
  • 由原图压缩成 1000*1000 的图;质量 90 。

我用了多种异步 JPEGencode 的库,发现还是 alchemy 的效率比较好,所以只列它的数据:

  • 异步 library 在非 IE 下表现良好,但是在 IE 下性能极差。
  • IE 时间值大致分布在 4s~30s 之间
    • 均值 8s ~ 10s 左右,时间上随机性很大
  • 非 IE 下值相对很稳定,时间都在 3~5s 这个区间。
  • IE 与其他浏览器相比,性能有的时候甚至有差 10 倍!这不能忍啊。
    • 我猜测是 Flash Player 在 IE 下,不能获得较长的 CPU 时间片。(注:目测了 CPU 监控得出的结论)

既然异步压缩没有办法允分利用 CPU ,那我试着改用同步压缩,而不用异步。
惊喜的发现效果比预期要好得多(如果用 swc 会更佳)。

测试结果

  • IE 时间值大致分布在 1~8s 之间
    • 均值 4s 左右,时间上随机性很大, 1 次上传的图片越多,越趋向于均值)
  • 非 IE 下 值相对很稳定,时间都在 1s 左右,绝在多数用时不超过 1s 。
  • 没有出现假死现象。用 i4 CPU 测试, cpu 使用最高才 13%。

比预期还好,完爆异步压缩。

从 CPU 监控可以看到控制都较为良好(都没到 50%);
IE 下的 Flash Player 的性能短期压缩时间很随机,长期看性能平均下来比非 IE 要慢不少。
曲线是由快而慢,然后慢慢是趋向均值(就象是电脑越用越慢一样)。

教训

这给我的教训是为什么不及早使用同步压缩?
是一直以来的观念束缚了我,认为「同步」一定会假死。

从我们这次的使用结果来看则不然。所以还是那句话:

实践是检验真理的唯一标准。

-- EOF --

Comments