失败的定制浏览器案例

刚才过去公司的同事电话来问我以前写的一些代码的事情。我问了一下,原来老总终于又忍不住出来讨论产品速度的问题,而要求下面再做优化。老总不知道的是,做web方面的主力,在过去半年里面已经走了两个,过去web前端代码的90%都是这两个人写的。

这个公司的产品是一个特殊的桌面软件,对业界或者对我较熟悉的都知道,我这里就不说名字了。客户端本身并不是基于浏览器的,而是delphi开发的。但是考虑到第三方应用开发的便利性,因而决定使用定制的browser作为其他应用的开发平台。目前所包含的定制浏览器使用的是微软的webbrowser控件。

从整个产品说,它其实是一个特殊的平台(容器),理想上,可以集成许多第三方应用(也可包括自己开发的应用),所有应用从理念上说都应该是C/S结构的,在C端可以选择不同的UI实现方式,如用delphi,c++等开发的,用browser的,用flash的。实际上作为平台,它也需要提供给应用一些接口,例如用户身份验证。事关UI的例子有统一支付UI,因为无论如何与第三方合作,钱的流转总是握在公司手中,这也是作为服务商的应有之意。再如,特殊输入设备的支持,如遥控器API,也是由平台提供给各种C端UI。

显然,根据这个产品的目标,大部分的第三方应用其实采用某种RIA是最合适的。这方面最大的考量应该是开发的便利性。因此如果采用browser技术,其实应该使用一种最高效、方便的引擎。IE引擎显然不是合适的选择。

举个例子来说,要比较cool的界面,而且支持换肤,我们会考虑采用大量的透明png。但是在IE中支持alpha通道极其麻烦。我在公司的时候,写过两套方案,分别是使用filter和vml。但是两者都有缺陷。filter有很多问题例如点击失效,但这些都还能解决。最大的缺陷是不能和zoom共同使用,而我们的应用有自动缩放适应用户屏幕分辨率的需求。vml本身是很好的,但是vml有个非常要命的问题,就是vml组件不认缓存,所有图片就算已经在缓存里面也至少需要一个304响应。

过去我参与的会议上也曾经多次提出IE的渲染引擎、脚本引擎都存在许多问题。然后上面也说考虑采用其他引擎,但是讨论了若干次始终拖着没有进展。

后来我参与做的一个重要应用,原来都是用网页加脚本形式做的,但是由于种种原因导致loading速度过慢。在我离开公司之前,老总决定换成用flash做了一套(这也源于一开始设计的时候就是ajax方式的才有可能这样)。

现在,公司老总似乎觉得还是不行。因此又再次旧话重提。但是可以想像的是,还是一团浆糊收场。公司的那些中层决策的结果,又是要先把能改善的改善起来,如减少html,css,js源文件大小。

我就跟同事说,这样做事是不对的。

如果要决定采用一个引擎,那你首先选择引擎。确定了才考虑改善代码。因为代码是依赖于引擎的。比如现在大量的代码其实是为了解决IE的各种bug。如果换了引擎,自然就清爽了许多。而且引擎端的提高远远大于改进代码的效益,引擎端也可以做很多代码无法做的优化。你在html,css,js花费精力那是事倍功半,而改进引擎端,则是事半功倍。例如脚本引擎。IE的脚本引擎存在许多问题,如内存泄漏,如对象增多时创建新对象的性能显著下降。换一个js引擎,这些问题就统统不存在了。作为一个AJAX应用,这个提高可想而知。

又例如脚本代码大小的问题。当然我们应该去优化和重构代码,但是有个度的问题。比如你把用到的库像是prototype都优化掉,比如你把日志统统去掉?实际上,如果是自己可以改进源码,可以customize的C端,完全没有必要一味压缩脚本,而是可以总结出标准库,直接放入定制浏览器中,来避免下载的时间。如果深入下去,甚至可以改进js引擎代码,把一些标准类库做成built-in的,避免多次解析的时间!

实际上,这样的事情,即使针对IE引擎也是有可能的,例如vml不认cache的问题,可以默认走一个本地proxy。类库也可以置于本地或采用某种高性能缓存。但是这些可能的优化,由于种种原因,始终没有被排进日程。

那么现在这样改,拿一个很简单的项目改,即使html,css,js被压缩到只有50k以内,又有什么价值呢?是否付出了其他代价呢(例如不支持换肤)?其他应用呢?

所以整体架构上的问题要比细枝末节重要的多。公司的中高层们始终无法搞清楚如何抓住主要矛盾,合理调配资源,只会做人不会做事(虽然我相信他们也有难处)。也不仅仅是这一件事情了,我多次向上面提出某个产品非常重要,而且关键问题不仅在技术上,而在产品设计上,应该组建一个团队来推进,靠一个程序员是肯定不行的,但是始终没有动静,甚至公司老总用这个产品很不爽都直接提出了设计细节上的意见,汗颜啊,这是老总该管的事情吗?但是竟然也没有改善,估计到现在,还是只有一个已经对这个产品失去兴趣的程序员在做这个产品。

唉,到现在我还忍不住牢骚满腹,那也就是我当时离开公司的原因之一了。

相关推荐