首先祝论坛中的各位兄弟新年好。最近小弟所在的项目遇到了性能问题,在此向各位讨个思路。
首先我们的项目架构是这样的:
1. 采用C/S架构
2. 客户端通信部分采用C++实现,负责和服务器通信
3. 客户端没有任何界面,只有一个Web Browser控件,占满整个窗体
4. 客户端加载html并暴露一些API给脚本来调用,所有的界面逻辑由html来实现。
我是在中途加入这个项目的,整个项目的架构是由公司的上层订的因此,我们不能对其修改。
现在项目开发进度过半,经过艰难的摸索并排除了IE各种让人恶心的Bug之后,总算多少有点
样子了。但是遇到了一个让我在一开始就很担心的问题:性能。随便晃动下鼠标CPU占用率就很
高。我曾尝试优化下,但从几万行代码中一次排除好比大海捞针,而且也不能百分百确定是脚步
的问题,底层的C++代码也有可能。
搜索了很多profile相关的文章大部分是关于FireBug的,IE下的有用的工具非常少。而且还有一个
很要命的问题,我们的程序还不是运行在纯IE中,而是在IE外层包了一层的客户端中,使分析起来就更
麻烦了。
不知道大家有没有这方面的经验,如果有请不吝赐教,我现在有点不知道如何下手。在此奉劝大家
这种方式调试和分析代码真的很累,还要面临各种让人恶心的要死的IE Bug, 而且由底层调用的函数还有
可能会采用多线程执行,能够不用就不要用这种方式进行开发,乖乖的正规的客户端开发语言进行开发要
牢靠而且方便的多
首先我们的项目架构是这样的:
1. 采用C/S架构
2. 客户端通信部分采用C++实现,负责和服务器通信
3. 客户端没有任何界面,只有一个Web Browser控件,占满整个窗体
4. 客户端加载html并暴露一些API给脚本来调用,所有的界面逻辑由html来实现。
我是在中途加入这个项目的,整个项目的架构是由公司的上层订的因此,我们不能对其修改。
现在项目开发进度过半,经过艰难的摸索并排除了IE各种让人恶心的Bug之后,总算多少有点
样子了。但是遇到了一个让我在一开始就很担心的问题:性能。随便晃动下鼠标CPU占用率就很
高。我曾尝试优化下,但从几万行代码中一次排除好比大海捞针,而且也不能百分百确定是脚步
的问题,底层的C++代码也有可能。
搜索了很多profile相关的文章大部分是关于FireBug的,IE下的有用的工具非常少。而且还有一个
很要命的问题,我们的程序还不是运行在纯IE中,而是在IE外层包了一层的客户端中,使分析起来就更
麻烦了。
不知道大家有没有这方面的经验,如果有请不吝赐教,我现在有点不知道如何下手。在此奉劝大家
这种方式调试和分析代码真的很累,还要面临各种让人恶心的要死的IE Bug, 而且由底层调用的函数还有
可能会采用多线程执行,能够不用就不要用这种方式进行开发,乖乖的正规的客户端开发语言进行开发要
牢靠而且方便的多
如果通过Ajax可以实现的话,客户端直接用Ajax就好了,可以省下不少麻烦。
客户端也不需要暴露,API了,只需要一个纯的 WEB Browser控件就可以了。
而c++只需要写好服务端就可以了。
就像 http://web.qq.com 那样,处理信息的服务器还是QQ服务器,而客户端由原来的安装包,变成了浏览器。
3Q大战的时候,360就是用一个 WEB Browser链接到webqq的网址作为360版QQ的。
难道是2种结构混用,性能方面不好说,如果是后台程序就跟浏览器段没有太大关系了!
后来同事的一句话提醒了我:会不会和样式有关系?。一句话惊醒梦中人,
我们一直从Script中找原因,而漏掉了另一个会导致性能问题的元凶CSS文件。
一查找CSS文件,终于找到的元凶:CSS中的expression,我们脑残的美工因为
想去掉超链接的虚线框在CSS表达式中使用了expression。就一条样式:
A{
blr:expression(this.onFocus=this.blur());
}
去掉之后,性能开销明显没有那么大了。以前只知道expression会对性能有
影响,今天才知道影响是这样明显,血的教训啊。