@ZEAL Blog·厉
WWW Zeal Blog
We stand alone,
TOGETHER.

用YAML节约网络传输带宽

Posted by zeal on 2005-12-06 17:59 , 1171 characters |  + 1 - 0   English
转载请保留本行原始出处声明信息 : http://www.zeali.net/entry/262 MaDe1nZEAL
标签 ( WebDev ):  ,  , 

  XML无疑在如今的各种网络/传统应用中扮演着重要的角色,不同服务之间通过统一的结构化标记语言来交换数据、发送请求,同时能进行文档的结构合法性检查。尤其时下大热的Ajax框架中,XML更是不可或缺的角色。

  但同时,提供这些便利和健壮性的代价是数据传输量的倍增。有时候用以完整表述文档所使用的Tags和Attributes甚至比实际内容本身还要多。

  当这种冗余的数据传输变得相当频繁的时候(比如我之前所做的即时比分系统为了让浏览器第一时间得到最新的比分变化XML数据必须以2、3秒一次的频率不停的刷新这个XML地址,或者类似的一些即时证券股票交易系统),由此所造成的网络带宽的无畏消耗会变得相当惊人。当然,我们可以通过调整Web Server的HTTP Header做些有益的工作(gzip, Http 1.1 Etag 与 Last-Modified等),但何不同时也考虑一下在优雅的XML之外使用其他的数据组织方式来传输那些“带宽至上”的数据?

  YAML作为一种更为紧凑的数据序列化格式,在保证数据结构可读性的同时大大减少了结构化所需要的额外数据量。Laurence Moroney比较清晰的描述了XML和YAML之间的异同以及YAML的基本语法以及基本的YAML数据生成和解析的方法。

  对于YAML来说最大的问题是其流行程度。目前的.NET和Java平台对YAML语法的解析支持都比较欠缺(不像XML你可以轻而易举从各种途径找到最好的解析器)。但 RubyPython 等已经提供了对YAML的很好支持 -- 包括PHPPerl。流行度引发的另一个问题是YAML的数据结构目前无法通过DOM接口来解析,也就是说你如果在使用Ajax或者其他涉及到客户端DOM接口的应用,要么就放弃使用YAML的念头,要么就把YAML的内容包装在一个最简单的XML Tag之内,通过DOM来获取文档,然后再使用自己的YAML解析器来解析封装在里面的实际的YAML数据内容。

  如果你的系统符合这些条件,不妨试试YAML:

  • 用XML来交换数据使你的网络带宽支出费用剧增(随着用户数的增加)
  • 数据的生成和接收方都在你的可控范围
  • 你没有太多的时间去从头设计定义一个完全个性化的数据交换结构
  • (或者)你正在使用Ruby :)

see also:
XML 问题: YAML 对 XML 的改进
Slaven Rezic's Javascript binding
Using YAML to Decrease Data Transfer Bandwidth Requirements
YAML 和 Ruby

Last Modified on 2007-05-28 11:00
没有评论.
日志存档
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
本 Blog 原创内容
遵循以下授权:

Creative Commons
(创作共用) CC

署名-非商业性
-相同方式分享
ZEAL Blog 基于
Powered byPivot - 1.24.1: 'Arcee'
Pivot1.24.1
开发
系统部署于
Linode.com
Launched @
2005-04-27
Since 2005.04.27  梦想 就像鸡蛋 要么孵化 要么臭掉RSS Feed (Entries) | About me | Back To Home | @ZEAL | zbird.com | 沪ICP备05024379号