日期:2014-05-18  浏览次数:20823 次

我给产品研发部的内部邮件,关于用户体验和性能,希望大家给点意见
大家好:
 
  前面有和Bobo单独邮件沟通过关于程序的些稳定性和性能方面的一部分问题。
  我再结合人性化的一点建议大致再总结下。

  1、从使用者的角度,程序运行时,就两种状态。
  一:正在执行操作。(比如:点击按钮、输入聊天信息)
  二:不执行操作,要等程序执行完。(比如:必须等界面初始化结束,才能看到画面,然后才能执行操作)
  按照这个思路,转化为程序的状态,就两种状态:一是程序正在执行的状态,二是程序等待用户操作的状态。
  我们先不要争执OS的几个态。

  我们用鼠标的忙和闲两种状态来表现给使用者,当程序在做处理时(做运算时),鼠标的状态应该是等待状态。
  打个最简单的比喻,客户点击一个按钮,这时候,首先要置鼠标为【忙】,等这个按钮的操作执行完以后,再把鼠标的状态设置会【闲】。

  webIM的客服端,要做到这点。应该是所有的程序都能做到这点。

  2、异常处理,程序的稳定性。
  不管是我们程序本身出现异常,还是其他外界软件或硬件出现异常或罢工。我们的程序,都要能够做出合理的引导。
  我们不能假设网络等东东一直OK,但我们要保证,一切不正常的情况下,合理引导用户(提示、退出应用程序及时释放我们应用程序占用的资源、或者说让其再等待30s等等)。不能让程序一直死在那里,不管是什么原因。不能因为出现异常(意想不到的),而导致使用者误解(比如down机或断网了,webIM一直显示在线)。
  简单说,我们的程序可以经得住任何考验。
  我们拿出来的东西,不是alpha版,也不是beta版,至少应该是All of us和绝大多数人认可的stable版本的。

  3、性能问题,最影响的因素之一,就是用户要等待,其次是服务器的负载问题。
  任何使用者,都不希望在操作过程中等待程序执行完。
  我们可以做到不让用户等待:
  1)技术解决:我们可以采用多线程(比如UI,采用独立线程仅供快速表现)、异步控制等让程序在后台执行,使用者同时可以执行其他操作。
  2)逻辑处理:我们可以根据用户操作流程来优化程序,在空闲时间做处理。
  比如:打开一个新的窗体frmNew,在窗体初始化时候需要加载链接DB,加载数据。在使用者看到这个新frmNew画面后,到,再点击这个frmNew 上的按钮。有个时间差,这个时间差,对用户来说可能是1S或10ms,但是这个时间对程序来说,可以用来执行很多操作了。可以利用这个时间来链接DB,加载窗体数据。
  当然,如果能够分线程在打开窗体的同时,进行链接DB,再加载数据是最好的做法。这时候,要注意,一定要控制窗体加载完的状态,否则,要加载的窗体数据,就无法加载到对应控件里。因为,线程,是异步的,有可能是DB结果先到达,而此时frmNew做在的UI主线程有可能滞后,而没有加载完,这时候,就会出现程序异常了。

  其实,我们这个系统里都用到了这样的机制。这种情况控制好了,性能,友好度,都会大大提高,控制不好,程序会爆掉。
  3)还是程序控制,逻辑处理:
  一般需要用户等待的往往不是UI线程,而是链接远程,获取Server信息,或者链接DB,取数据。我们可以分步骤地把程序拎出来,先显示一部分给用户看到,然后,边加载另外的部分。
  比如:分析界面的数据,打开分析界面,会有个默认的项目(最佳关键词)需要加载数据。那么我们就先加载这一个项目的数据,而不是所有(8个)项目都初始化后再加载。当然,目前的做法,我不知道如何处理的。在界面展示在使用者面前后,再加载其他项目的数据。这样给用户的感觉是几乎没有delay的。而实际上,程序做所得工作一点都没有少。用户感受会明显提升。对于服务器来说,不是在1s钟峰值占用cpu 90%,而是在3S钟时间内cpu平均占用30%。

  我们都是优秀的程序员,我们出的东西,也会是优秀的。

  请大家踊跃发表下意见,为我们的产品多做贡献。


  softdn 2008-06-23


 

------解决方案--------------------
帮你顶!!!
关注!!
------解决方案--------------------
简单说,我们的程序可以经得住任何考验。