人生何处不相逢

| 2 条评论 2008-08-14 19:08:58

早上在地铁站,居然遇到了杭州天籁琴行的李乐老师。李老师琴艺精湛,在杭州乃至全国都小有名气。不过人很随和、朴实。

我也算是他徒弟的徒弟了-在杭州时和他爱人学过不到一年的琴,可惜我比较笨,水平还是停留在初学中的初学,呵呵。

小议网页性能和前端编码质量

| 4 条评论 2008-08-14 02:17:44

我一直比较在意页面的性能和编码质量,有时候会通过HTML代码的质量来判断一个网站的技术水平。

易趣、eBay和淘宝在网页性能和前端编码质量上的简单对比

昨天下午闲来无事,去久违的易趣转了转,发现他们的浏览器兼容性还是一如既往地好。可看看“我的易趣”页面的源代码,就觉得有点头大-不仅HTML/CSS/JS全部都混杂在一起,而且代码显得非常凌乱,还大量使用了表格来定位。当我把CSS禁用掉,再把浏览器窗口调到320像素这么宽后,网页已经基本无法阅读了。

下图是其YSlow得分,老实说,37分并不是个理想的成绩。对于这样大规模的网站来说,如何通过规范来保证多人协作编码时的质量,以提升工作效率、减少沟通成本,并且给网站提速减负,是个重要且紧急的问题。

易趣的表现让我对eBay很好奇-看看高手云集的eBay情况如何。

结果令人惊讶(如下图),“My eBay”的YSlow得分居然高达97!只有一项因为没有加Expires header而得了B,此外全部是A。这恐怕是我见过的最高的YSlow得分了。

但是这个页面的编码质量并不如想象中的好,问题和“我的易趣”页面如出一辙。强调可访问性(accessibility)508法案似乎被eBay完全忽视掉了。

不过值得一提的是,eBay的js写得非常强悍,单从函数的命名就可见一斑了。

接下来我又测试了一下“我的淘宝”,淘宝的代码明显漂亮了很多。它的YSlow得分为39(如下图),

从上图来看,淘宝丢分主要在1)过多的引入外部资源,比如18个js和16次DNS查询;2)Apache和CDN的设置(其实根源在各种广告提供商,10个没有经gzip压缩的js里面有9个都是广告相关的)。

替前端鸣冤

有很多人不理解为什么在拥有众多高手的大型互联网站,页面的代码还能如此之乱。难道这些前端开发不知道W3C,不知道js要做到无侵入(unintrusive)么?

当然不是,其实这里面的原因挺多的,也不是一两句话能讲的清楚。在所有的原因中,以下两条可能是最关键的:

  1. 缺乏规范,或者具备规范,但缺少强有力的执行机制。在前端打交道最多的三种语言中,只有Javascript算是程序语言,HTML和CSS根本就是描述性的语言。最让人头疼的是,它们远不象具有很多相同特点的XML那么严谨,自身的描述能力又不强,所以几乎不可能写出类似Java那样规范的代码来。程序语言中常用的框架,到了HTML和CSS这里也起不到作用,甚至它们两个根本就产生不了框架(那些所谓的CSS框架,在能力上和真正的程序框架差的太远了,我觉得顶多算是CSS模式[Pattern])。要部分解决这个问题,我提倡用真正的程序语言,比如Velocity/PHP/Ruby等对HTML进行二次封装,实际上本站上面的很多东西就是靠helper(助手,MVC中View的一个组成部分,可以理解成帮助页面显示的一些程序)渲染出来的;
  2. 系统逻辑太复杂,以至于顺利完成工作都变成了一个不小的挑战,更别说还管什么性能和质量了。写到这里想起曾经写过的一个control(控件,MVC中View的一个组成部分,可以理解成页面上的一个复用的元素),在当时紧张的时间里,control里面的代码质量已经算是不错的了(跟我搭档的几个Java程序员这么认为,其实我觉得一般,不过确实没时间写得更好了),可仍没办法做到把HTML、Javascript和Velocity代码完全分开,因为判断的逻辑太多太复杂。以至于在浏览器中看到的东西,比如一个小小的下拉菜单,它背后所隐藏的东西可能超乎想象。

那些与奥运有关的个人梦想

| 2 条评论 2008-08-06 22:37:38

老实说,已经记不得七年前7月13日那晚的情景了,但听到萨马兰奇先生说出“北京”时,那份无以名状的兴奋与喜悦,现在却还能深切的感受到。

那年夏天,我最大的愿望就是毕业后立即把女友-一位美丽灵秀的姑娘-娶回家,一起奋斗五年后,在北京看现场的奥运会。那个下午我向她如此提议时,她脸上的一颦一笑仍是历历在目。

一眨眼七年就过去了,我们早已不在一起,我也始终没买成奥运会的门票。

绝望主持人-第二季

| 0 条评论 2008-08-05 19:13:26

第一季讲了如何消除用户的紧张感,这次说说如何挖掘用户的想法。

1. 划清楚你和产品的界线

首先告诉你的用户:你不是这个产品的设计者,甚至不是设计这个产品的公司,因此你不知道也不介意产品所存在的任何问题,你的工作就是收集上述问题。请他不要担心他的意见会有损任何人的面子,任何问题和意见都可以直言不讳。

要非常清楚地表明你自己和产品设计者的关系,尽可能地消除用户的戒备心。我有时会说:“你瞧,这里就我们两个人,没有某某公司的人在场(指产品设计者,殊不知他们正在观察室中紧张不安呢),所以不要紧张,也不用顾及面子。”

其次,在产品的试用过程中,当你提及产品时,切忌用“我们”,比如“我们还提供了这样一个功能”、“我们的设计初衷是……”等等,因为这会让用户觉得你和产品设计者是一伙儿的,抵消了刚才那番话的意义。我注意到,有相当一部分人在访谈时会不自觉的使用“我们”这一代词,这实际上不是个好做法。

最后,除了和产品划清界线以外,主持人和用户之间是否应有界线,我目前尚无定论。这个问题我和同事讨论过,如果主持人站在用户这边,好处可能是给用户的安全和认同感,坏处则是一不留神就会过度引导用户;如果主持人、用户和产品各自独立,好处可能是让用户更为客观,坏处则是可能会使其变得更为谨慎。对于这个问题,不知各位有何经验?

2. 搞明白测试的对象是产品而非用户,后者永远是对的

我会非常直接且明确地告诉对方,他永远是对的。请他来的目的,是想找出产品的问题并尝试改进,而绝对不是测试他的智商、或挑战他的使用习惯。

尽量不要用“测试”这个词,因为它有两个很明显的缺点:一是让用户觉得这是在测试他本人的智商;二是测试一般指产品研发尾声的步骤,更改的幅度不可能很大,既然如此,用户自然觉得自己的观点说了也是白说。

在访谈过程中,尽量给用户传达“这是早期的产品原型,可以很容易地做出修改”的概念,激发他去大胆想象,并把这些想象和平时的使用习惯理直气壮地说出来。

3. 做到无我:不可有观点,更不能表现出情绪

你是主持人,绝对不能有观点,更不能有任何情绪!这是访谈正式开始后,最为重要、且需要贯穿始终的原则。

那么如何做到这点呢?有以下方法可以遵循:

  1. 用中性词替代褒贬义词,或者让褒贬义词成对出现
  2. 慎用带有强烈感情色彩的词
  3. 启发用户、并等待他的答案时,不要用列举去提示,否则会限制对方的思维,或者过度引导
  4. 对任何用户的观点或产品的功能,不要做个人判断或表现出倾向性

4. 由简单问题开始,把需要仔细思考的留在后面

这是受了前同事的启发而来。以前在支付宝时参加过一个关于演讲/讲课的培训,培训的主持人红桃K告诉我们,在讲课时先讲特别简单的内容,听众一看你讲的都如此容易理解,就会立即放松下来。

我觉得这是个特别好的办法。如果用户觉得你的问题都比较容易回答、不那么可怕的话,他的精神才能放松,放松才能把掏心窝子的话说给你听。

当然如果你复杂的问题很多,你就要考虑把简单和复杂的问题错落安排了,否则连续回答复杂的问题会使用户疲惫,降低答案质量。

5. 保证和用户对各种概念具有同样的理解

同样一个词每个人的理解都不一样,尤其是那些解释很宽泛的词,比如“好”、“方便”和“舒服”等等,你的想法和用户的可能完全就是两回事儿。所以面对这些概念,必须要求用户去解释。比如对于一个“好”字来说,你可以问“‘好’是什么意思”、“为什么好”、“‘好’体现在哪里”、“哪些东西让你觉得好”等等一系列问题。

6. 变着法的问“为什么”

用户说的不一定是他想要的,这道理谁都懂,所以你要不停地问其原因,从答案中才能获得用户真正的想法。

有时候直接问“为什么”效果不一定好,那就换一种问法。比如“有哪些因素让你有某某感受(观点、想法)”等。一种问法不奏效,就再换一种,总之,想办法知其所以然。

还有一种方法就是让用户去比较。比如他觉得某个产品好可又说不出原因,你不妨各他另外一款同类型不同型号的产品,让他通过比较得出答案。

7. 面对谨慎中庸的人,就给他选项让他选

前文提到,我曾经遇到过一个极其谨慎小心的中年男子(40岁出头),其处事相当保守中庸,在整个访谈过程中自始至终没有说产品的一句坏话,每当使用起来出现问题时,便推说自己“不习惯、不适应、过一段时间就会好”一类的话。此外,他的逻辑思维能力比较弱,反应也非常慢,常常闷头操作不理会我的问题,搞得我很是郁闷。为了能挖出他的想法,我当时真是绞尽脑汁,疲惫至极,常常就忘了上一分钟准备好的问题。

这样年龄的用户一般不是互联网公司的典型用户,我没什么经验,处理起来感觉很是棘手。所以这条里面总结出来的东西不一定对,放出来权当抛砖引玉。

简言之,我对付他的办法就是:替他把话说出来,或者提供选项给他,然后请他确认或选择。

这样做好像有很大的干扰和引导,可是对于不喜欢张嘴的用户,还能怎么办呢?

8. 善用陷阱,让用户自相矛盾时暴露真正的想法

有的时候会遇到这样一种情况:用户认为的设计和现有的产品设计不同,可他又说不出自己为何会有如此设计(即使是变着法的探究原因也不行)。我就索性给用户设置一些小陷阱:引导用户按照他的逻辑合理地推论,直到他发现他的想法和产品的设计出现了矛盾(或者说,他同样的逻辑和想法,和产品的某些设计相符,某些相悖),此时他势必会想办法维护自己的观点,往往开始口若悬河地列举出你刚才没能挖掘出来的信息。另外,所谓言多必失,主持人此时仔细聆听用户的意见,一定会发现一些问题,顺着这些问题挖掘下去,便很有可能有意想不到的收获。

在为时一周的访谈中,我多次运用了这一技巧,感觉效果不错。

不过,这种方法可能存在一个很大的问题:用户很可能为了保护自己的面子,硬性地编造出理由来,这些理由显然并非是其原始的、真正的想法。这样一来就适得其反、事与愿违了。

那么,究竟该不该采用这种方法,采用的话如何避免上述问题发生,我和同事讨论了半天都没有一个答案,还是留给诸位吧。

9. 合理的启发用户,但不要教他

前面已经说过了,你不是也不应该是全知全能者,所以教用户如何使用产品绝对不是个好主意。

但当用户的想法明显不符合逻辑、并且你也知道了用户原始的想法后(比如我上次提到的那个不会用拖拽操作的用户),不妨进行合理的启发,并观察用户对你启发的反应。

10. 必要的时候,可以施加一些压力

此招慎用!偶尔有效,更多的时候,只会让用户在你的压力下说出编造的答案。

 

--------------迎偶晕,分割线这厢有礼了----------------

 

第二季到此结束,下一季中我想说说主持人常犯的错误,敬请期待。

重新开张

| 0 条评论 2008-08-04 20:59:49

如你所见,本站重新开张了!

域名的事情,还在和万网搏斗。网站暂时放在了前同事在Dreamhost上的空间中,DH的功能很不错,速度也还可以。

花了几天时间作了套新模板,名字暂时叫做“Another part of me”,这名字来自于Michael Jackson“Bad”专辑中的一首歌。小学的时候很喜欢这首歌,长大了则更喜欢同专辑中的“Man in the mirror”和“Liberian girl”。

模板还有一些CSS上的问题,我会慢慢调整。

除此以外,我把blog升级到了0.3.10.20080805,增加了一些小功能:比如评论时可上传头像,评论后个人资料会被记录在cookie里等等。

我在可访问性上还下了功夫-无论你关掉CSS还是JS,甚至两者都关掉,你仍然可以顺畅地访问站点并使用全部功能。这项工作并没有结束,还有1-2个小bug。

汇报完毕 ,开吃Burger King :)

关于

丁宇(Felix Ding),电脑Geek,狂热的爱书和爱乐分子。现就职于上海的一家设计工作室。

我的Email:

订阅到RSS

朋友

常看

行踪

最近收到的评论

    
  • Felix 2008-08-19 02:07:54

    0.4版做完以后就开始整理代码,现在的代码一片混乱。

    你有问题就拿出来讨论一下吧,我也学习一下 :)

  • whison 2008-08-19 00:52:35

    咨询一下大大,LT现在进展如何了?我目前也在用cake,但是有很多不懂的地方,所以希望能看到你的来学习学习。

  • shanghaikid 2008-08-16 03:46:06

    大型网站 unintrusive 的js其实并不推荐,要知道一张页面的代码很可能几千行,即使是ondomready来执行行为层的js,也是很慢的一件事情。

    至于规范么,基本一个项目一个前端,没必要把个人写代码的风格框死,大原则对,就可以了。

  • Felix 2008-08-15 01:14:19

    @lifesinger:

    不管组件化与否,我觉得以eBay的技术水平,它的代码应该写得比现在好得多才对。

    @taine:

    改版前的淘宝首页有时候会让我的FF假死(也和OS X下FF的执行效率有关),现在比以前要好多了。

    另外,我说的第二点原因就是业务/系统复杂,因为业务复杂,所以系统复杂,所以(渲染出来的)代码凌乱。

    其实我觉得渲染出来的代码乱点就罢了,毕竟那么复杂的系统。但是模板里面的代码一乱,那才让人头两个大呢。

  • taine 2008-08-14 19:29:04

    淘宝的页面让人烦死了,载入实在是太慢了,机子差点都不能看。

    代码复杂的另一个根本原因可能是业务复杂,要满足各个部门的需要。

  • lifesinger 2008-08-14 18:18:37

    可看看“我的易趣”页面的源代码,就觉得有点头大-不仅HTML/CSS/JS全部都混杂在一起,而且代码显得非常凌乱

    文中提到 我的ebay 也是这样。这个很可能是因为ebay是组件化的,每个组件有自己的css和js,很多组件拼装成一个页面时,自然就显得很乱了,但从开发上讲,这样可能是趋势

    对于YSlow的评分,有些项没必要看得那么重

  • iworm 2008-08-07 20:56:29

    我老婆画的, 呵呵

  • Felix 2008-08-07 19:09:26

    iworm的头像不错,自己画的?

  • iworm 2008-08-07 18:56:05

    青春

  • Felix 2008-08-07 06:50:54

    你这个空中飞人打算去看现场比赛不?我是只能老老实实在家里看电视了。

    另外,好像除了我以外,我身边对这事儿的态度都是贬大于褒,就我一人在这儿激动了……

我的豆瓣