links for 2007-10-30

两家饭店的服务态度对比

  我最近被外派到四惠附近办公。由于没有免费的早餐了,所以每天需要多考虑一顿饭的事情。今天早上,我去住邦2000旁边的老家肉饼吃早饭,离预定的开会时间还有15分钟,我觉得时间还够,就点了肉饼和一碗馄饨。虽然被告知需要现做,但我对那家店的上菜速度比较自信,就没在意。过一会儿发现还剩六七分钟了,饭还没有上,就只好去收款台把点的餐退掉,本来以为会费一番口舌,也做好了应付的准备,没想到服务员很痛快的退了,而且还问我:“非常抱歉,是不是时间来不及了?”搞的我很不好意思。于是打算这两天再去吃一顿,算是一点回报。
  而今天的晚饭就没那么幸运了,虽然也是很小的事情。我和另外一名同事去远洋国际中心楼下的美食广场吃饭,找到一家店,每人各点了一份12元的套餐,拿出储值卡和一张15元的代金券结账,结果发生了很啼笑皆非的场面:店员坚持认为我们应该分开付钱,也就是说,15元的代金券只能买其中一份套餐,另外一份必须付12元。我本来还想理论一下,不过觉得跟他交流算术题实在没什么意义,就换了一家吃。后来想想,这个美食广场如果只印一元面值的代金券,就可以解决这种纷争了。

把delicious的书签导入google bookmarks

http://persistent.info/delicious2google/
  试了一下,比较方便。
  接下来在Firefox里面装一个叫做Firefox Google Bookmarks的插件,就可以在浏览器里方便的添加和管理书签了。
  挥泪告别del.icio.us。虽然它的“tag”的创意震撼了整个世界,我在过去的两年时间内,也一直试图用标签来梳理书签,但一直很别扭。事实上,我需要的只是分类、搜索,以及根据已有的书签数据推荐相关书签,这些事情还是让传统的搜索引擎来做最合适了。

谈ajax返回字符串的两种形式

  当javascript语句向服务器端发起ajax请求后,如果一切顺利,会从服务器端收到响应数据,浏览器会把这个响应字符串转交给回调函数处理。按我的经验,响应字符串有两种比较好的形式,一种是json,一种是html。下面以php5+smarty服务端开发模式为例作简要介绍:

  1. json方式:
    服务端对请求数据作如下处理:

    $param1 = $_POST["param1"];
    $result_array = foo($param1);
    $json_array = json_encode($result_array);
    echo($json_array);
    

    那么函数foo的返回值就以json数组的形式返回给客户端,这时直接用eval的方法将返回值赋给某个javascript变量就可以使用了。

  2. html方式:
    服务端对请求数据作如下处理:

    $param1 = $_POST["param1"];
    $result_array = foo($param1);
    $tpl = new Smarty();
    $tpl->assign("result", $result_array);
    $html = $tpl->fetch("foo1.html");
    echo($html);
    

    那么函数foo的返回值会被assign到一个smarty模板里,通过smarty的fetch方法,获得一段html代码,这时直接把html代码赋给某个div的innerHTML属性就可以了。

  第一种方式遵循了清晰的MVC结构。由于javascript还需处理返回的数组,所以适合响应数组比较简单的情况,不适合大段html代码的渲染。第二种方式将模板和JS、PHP进行了良好的分离,便于维护。由于html变化后,页面的dom结构也发生变化,所以适合大段html代码的渲染,不适合交互复杂的类C/S页面。

对extjs进行了裁剪和压缩

  最近打算在产品中使用extjs。考虑到这是一个线上环境,对javascript的要求比较高,因而计划对它进行裁剪和压缩,分以下几步进行:

  1. 使用extjs提供的在线裁剪工具(Build your own Ext)对庞大的extjs库进行定制。我定制了三种不同量级的版本,基本可以满足日常各种需要了。
  2. 使用JSA对裁剪后的代码进行语法压缩和文本压缩,其语法压缩具有极高的可靠性,文本压缩的比率也较高。
  3. 激活apache 2的mod_deflate模块,并启用对javascript的压缩。

  经过以上三步优化后,extjs的尺寸被缩减到了一个可以接受的数值了。具体效果参见下表:

支持的模块 原始版本尺寸 被JSA处理后版本尺寸 原始版本经deflate压缩后尺寸 JSA版本经deflate压缩后尺寸
jQuery
Ext Core
Core-Utilities
Data
Views
140369 77957 (55.5%) 41233 (29.4%) 36225 (25.8%)
在前一个基础上增加:
Core-Layers
Dialog
Form
QuickTips-Tooltip Widget
Loading Mask Widget
303172 164433 (54.2%) 85097 (28.1%) 73920 (24.4%)
在前一个基础上增加:
Core-Drag and Drop
DateMenu
ColorMenu
Resizable
Button Widget
Tabs Widget
SplitBar Widget
Menu Widget
Border Layout Widget
Toolbar Widget
Grid
Tree
Form-HtmlEditor
499490 261616 (52.4%) 133973 (26.8%) 114157 (22.9%)

可以看出:JSA的压缩比率接近一半;不过,无论代码是否被JSA压缩过,经mod_deflate模块处理后的大小都是比较接近的,也就是说,在服务器端开启gzip/deflate特性是非常必要的。