Flash真的适合做网站应用吗?

原文链接:http://q.pnq.cc/archives/496

两年前,我们开发了一套基于Flash的文件(主要是图片)上传RIA应用,提供给阿里巴巴的用户使用。如果你使用过Wordpress或flickr上传图片,你应该已经用过类似的产品。这个程序基于YUI Uploader开发,增加了一个实用的功能——在客户端先将图片缩小,再上传到服务器。用户用数码相机拍摄的照片往往有600万以上的像素,但产品图片放到阿里巴巴网站上显示,并不需要这么大的像素,通常等比例缩小到1024×1024之内就可以了。借助于Flash对图片先缩小再上传的技术,我们在没有增加服务器投入的情况下,将原先上传图片的尺寸限制由250KB/张提升到了5MB/张。同时,Flash上传还比传统HTML表单方式上传有更好的体验,例如可以多选一批文件同时上传、可以实时展示上传进度、选择文件时可以过滤非图片文件。

这个组件获得了很大的成功。上线后不久,阿里巴巴网站上用户的图片上传数量由日均1万张左右上升至日均15万张左右。但在这个上传应用投入应用的两年中,我们遇到了各种问题。

1. BUG

基于IE多标签浏览器中的伪沙箱问题就不说了,最严重的是cookie的问题。使用FileReference.upload的方式上传文件,http请求中附带的cookie信息不一定是当前浏览器进程的cookie,在Firefox、chrome等非IE浏览器中非常严重,可能传输的是IE中的cookie。即便是IE,也可能传输的cookie内容和当前页面的cookie记录不符合。这直接导致服务器端在收到文件之后的安全验证中失败。而对于阿里巴巴这样的大型网站,有比较成熟的java web框架,要去掉对cookie的依赖非常麻烦。于是结果就是,首先我们只有在用户使用IE系浏览器的时候才使用Flash上传,其次我们隔三岔五的还会收到使用IE的某些客户的投诉,在花费了大量的时间排查之后,我发现是由于cookie的问题导致上传失败。这个bug已经存在很多年,但是随着Flash从9升级到10,许多版本过去了,问题依然没有被解决。对于闭源的Flash,我们也帮不上忙。

2.性能

相对于现今数码相机的像素量,5MB的大小限制非常保守。但大于5M的时候,在一些低配置的电脑上,读取文件内容的时候就会发生浏览器假死现象。假死很容易导致浏览器崩溃,所以我们采取了保守的限制——5MB。

另外一个性能消耗是将BitmapData编码成JPEG文件的时候。Adobe提供了JPEGEncoder,但由于是Array实现的,所以性能是个问题。编码一个2880×2880的图片在一台中等配置的电脑上大约需要15秒时间。

我用Vector改写了这个类,时间缩短为3.5秒左右。使用Alchemy,时间进一步缩短到1.5秒左右。但还是不够安全,所以最后采用了异步Vector的方式,延长编码的时间,以保证程序的稳定性。(评测在这里

3.图片质量

Flash内置的最好的图片缩小算法(用BitmapData.draw,并将smoothing参数设为true),在缩小图片的时候容易产生锯齿。因此我改写了Jacwright提供的缩小算法,图片质量的问题解决,但代价是性能又降低了一些。

4.安全限制

Flash10.0之后,增加了一个安全限制——当URLLoader以标准文件上传的方式发送POST请求的时候,需要由用户的UI操作(鼠标点击或按键事件)触发。因为我们对用户的图片做了处理,已经无法再通过FileReference上传,只能通过URLLoader。这个安全性限制规定每次发起一个上传文件的URLLoader请求,都必须让用户点击一下鼠标才可以。如果用户选择了20张图片,就要点击20次鼠标。这显然是无法接受的。因此我们放弃了用标准文件上传,采用普通post形式。代价是失去了对上传进度的跟踪,不知道文件上传的百分比;同时服务器端也需要改造。

改变

最近,我们做了一个决定:开发一个类似功能的ActiveX控件,替代Flash作为图片上传的主要解决方案。ActiveX的优势是性能,不足之处在于只能在Windows+IE浏览器中使用,但实际上我们的Flash上传目前也只能在IE中使用。Flash真的适合像阿里巴巴这样的网站使用吗?闭源和性能是Flash最大的问题。但在HTML5被广泛支持前,Flash和传统Ajax还是我们最主要的富客户端应用开发技术,相对于ActiveX、Silverlight、JavaFX、Gear等技术来说,Flash还是有安装率优势的。我们看到Adobe最近在新功能开发方面非常给力,值得称赞,但基础的功能的持续完善对开发者也同样重要。目前Flash依然是我们很重要的RIA技术,但是HTML5完全到来的那一天,现在很难说。

 

 

  • http://www.yixieshi.com 包子

    好文章,转载到互联网的一些事(yixieshi.com)

  • lingcarlos

    哇!牛,使用你的JPEGEncoder时很多诡异bug我都分析不出具体原因,如cookie问题导致的安全限制,不知道HTML 5支不支持客户端文件处理吗

  • Skillet

    学习了:P

  • Squall

    不错。学习了。

  • Meathill

    cookie的问题我们是用传参来解决的,确实直接上传携带的cookie会有bug,所以我们把需要验证的cookie读出来传给flash,flash在上传的时候把这些当作参数一起传上去。

  • http://t.qingchuan.org 星城之恋

    配图改换一环了!

  • http://www.54hn.com 电商圈

    HTML 5支不支持客户端文件处理吗

  • http://www.ves.cc 网站建设

    适当的使用未尝不可?

  • http://www.yigle.net/ 铁军

    哈,和之前项目遇到的问题差不多,cookie,安全,崩溃,乱码,缓存。。,使用flash虽然解决了兼容实现问题,但带来的问题也很多;下次再做类似需求决定转向 file api了,对于ie8-就给基本上传

  • http://www.wdkc.info/ 美的微波炉

    回贴是一种美德,一定要不断的支持楼主才能看到更有水平的文章!!!http://www.wdkc.info/

  • http://www.wujiangjun.com 网络营销

    开心农场就是FLASH应用吧。呵呵

  • http://www.zhouboone.com 玖八壹

    当然可以做了,这样效果才炫,用户体验才好啊!

  • tomorrow

    我记得最早163相册就是用的ActiveX来做上传的,后来也换到成FLASH了,它们是如何避免这个问题的呢?

  • http://youxiji.99284.com/ 游戏机

    我学习了,觉得很不错,很想试一试

  • http://www.ksacn.com 用户体验设计

    这个维护起来很麻烦

  • 地球太危险了

    不错。。看来楼主真的是花了大精力进行了深入的研究。。赞。。就需要这样的技术文章。。。

  • nece

    cookie…….
    为什么不一起提交个串过去?

  • http://www.chenguangblog.com 晨光

    真是各有长短呀

  • http://www.xjc100.com kle

    大的网站,确实要考虑太多的东西。长见识了!

  • http://http//duxing.g8up.cn 笃行

    开了眼界~

    ps:本文第二幅图背景色与页面颜色一样,有些内容不易区分是图片里的还是网页里的,UE有点不爽~

  • http://www.magentonotes.com Magento笔记

    flash在低配置上太慢,html5不知道解决了没有

  • http://www.5aiqu.com/ 5aiqu

    前段时间做站也使用了Flash上传,当时主要是因为图片大小无法在客户端判断大小,导至很多用户上传大文件而出现超时错误,使用Flash后也有很多的问题,有些安装了SwfPlayer后确无法显示出Flash的上传按钮。。

  • http://www.miguonet.com 我的移动互联

    对于中小网站来说个人觉得不大适合,html5的发展比起flash优势越来越明显了…

  • lacee

    楼主,碰到了和你一样的问题,“当URLLoader以标准文件上传的方式发送POST请求的时候,需要由用户的UI操作(鼠标点击或按键事件)触发”,你说你们放弃了用标准文件上传,采用普通post形式。这个是普通post形式是怎样的呢

  • 文龙

    学习了 看来时时间开展html5的学习了·
    ~

  • 挪墨

    @tomorrow 其实他们也没解决这个顽疾

  • http://www.pptok.com/ PPT教程网

    这个各花入各眼。

  • http://www.kuaibowang.net 快播网

    对于SEO来说,开始不要用flash

  • http://www.gdwc365.com 广空后勤肠胃医院

    flash,曾经的王者

  • http://www.gdwc365.com 广空后勤肠胃医院

    好家在…

  • http://www.56games.com 56games

    很适合

  • Tom Fan

    关键的问题就是你觉得html5什么时候算完全到来?到时候直接把图片往浏览器里面一拖就完了。通过我们的网站统计来看,用IE的用户,IE6的还占26%,从你们的角度来看,如果下降到多少你们觉得可以用HTML5来实现了?或者做能力检测呢,如果支持HTML5的拖拽就用HTML5来实现?

  • http://icodon.com/ 爱蝌蚪

    flash还真不适合做网站!

  • http://icodon.com/ GoDaddy优惠码

    让HTML5来革它的命吧,哈哈

  • Other3689

    应该把评价里的网址去掉。这样才能过滤做广告的。

  • Other3689

    测试。

  • http://yulu.so/ 经典语录网

    其实这个不好说,为了用户什么都值

  • 酱油路过

    flash技术 在电子上网领域 特别是对优化有要求的网站,已经跟受排斥

  • ismymy

    博主博客很不错,我的奢侈品网站http://lux.istata.com/,欢迎回访。

  • http://www.vanwu.com/ 软文推广

    很好

  • www.hrmtycc.com

    我想是可以的,以后都是做应用

  • Yusheng_xixi

    筷子和勺子都是吃饭用的,关键看吃的是什么决定用什么餐具最便捷。