举个例子,某页面浏览到一个地方卡住了,至少要等十几秒才出来内容。排查原因,浏览其他网站页面很快,说明客户端网络带宽没问题;浏览同个服务器上其他网站页面都很快,说明服务器的处理速度和网络带宽也没问题。分析代码可能有好几种情况,在YUI官方加速网站的最佳办法提到了13条方法,对于普通产品来说,个人认为有几条应该强化注意,其他(灰色)从性价比上来说则成本有点高。
Make Fewer HTTP Requests 更少的HTTP请求 Use a Content Delivery Network 使用CDN Add an Expires Header 指定过期时间 Gzip Components 压缩结构 Put Stylesheets at the Top 样式表文件在顶部 Put Scripts at the Bottom 脚本在底部 Avoid CSS Expressions 不在css中使用表达式 Make JavaScript and CSS External 将Javascript和CSS文件分离到单独的文件 Reduce DNS Lookups 减少DNS查询 Minify JavaScript and CSS 精简Javascript和CSS Avoid Redirects 避免重定向 Remove Duplicate Scripts 去掉多余的脚本 Configure ETags 配置实体标签 Make Ajax Cacheable 可缓存的AJAX当所有假设都理想化之后,是否所有问题都解决了?答案是不一定。因为并不是加载越快就越好,快慢先后都应该有讲究,分别从加载速度、加载优先级两个角度举例探讨。
加载速度
我曾经碰到种情况,因为页面呈现过快反而影响用户体验。页面跳转交互一闪就过去了,但首屏内容没怎么变化,结果我不知道页面是否真进行了跳转。过快的交互感觉不是流畅,而是迷茫。此问题常见于博客系统,各位同行可以仔细观察。比如淘宝UED博客,下图左为首页首屏,右为网志页首屏。
http://ued.taobao.com/blog 截图于2009年10月28日
UCDChina官方博客也有类似问题,其症结在于前后页面布局不当。按理说,不同层级页面所突出的核心内容应该不同,所以首屏也应该有明显差异才对。我设计自己博客首页、列表页、网志页布局时,就特别注意了它们之间的传达关键点差异,如此在较快的交互时会有“动画”效果。下图上为首页首屏,左为列表页首屏,右为网志页首屏。
http://blog.rexsong.com 截图于2009年10月28日
从以上例子可以得出结论,加载速度并不是孤立存在可能影响用户体验的因素,而在整个设计方案体系中起推动作用。事实上,用户对加载速度的要求也不是特别高,最关键是稳定,不低于用户期望。慢一点没关系,只要能给用户“说法”,比如动态加载提示,用户反而会觉得“过程”很受用。
另外从技术原理上来看,60%到80%的优化很容易,但再往后的每一点进步,都得付出相应的成本和资源。因此,不纵观全局、不考虑客观条件追求极致优化的做法不可龋
加载优先级
在打开到浏览页面的过程中,除加载速度,我留意并发现呈现顺序之差也能造成细微的体验影响。从web原理来讲,整个页面正常应该是从上倒下,逐步呈现。但现实中web往往是竖状布局居多,因为更符合用户浏览习惯,更易于页面技术实现。
竖状布局就会牵涉到个优先级问题,应该先显示哪列模块?答案肯定是最重要的内容。在2004年网站重构技术得到重视之后,此问题已经不算什么新情况了,技术解决方案很成熟。之前最常见的是用table标签进行布局,造成需要table内的内容全部加载完成之后才显示的后果。具体表现为可能卡在页面某处长时间停留,并整个模块突然出现在页面上。下图为三星中文官网错误的先显示广告,而在重要模块长时间等待。
http://www.samsung.com/cn 截图于2008年7月23日
除重要性,我认为模块还有时间先后关系在影响呈现。比如在网站首页顶部加长幅消息模块,通知服务器维护、改版新体验等用以提升用户体验的手段很常见。但是否有设计师考虑过这些内容“性质”模块应该在什么时间出现比较合适?
我曾经做过个方案规定“改版体验的提示必须在整个页面加载完成2秒之后,从上往下滑出推动整个页面,以求更明显让用户注意的效果。”因为在页面加载过程中,所有对象都在从无到有的移动显示,如果在整个页面相对静止之后,突出更重要的“改版提示”,效果会顺畅很多。同样的结论还可以用在帮助提示,或某些新功能贴“标签”上。下图为雅虎官方新改版的测试邀请。
http://www.yahoo.com 截图于2009年3月21日
前几年弹窗广告流行时还有个类似案例,因为用户都特烦弹窗,打开页面的弹窗往往用户下意识就去关掉了。后来我设计了个延时10秒的弹窗,一月数据显示点击效果平均提升了30%。