ITPUB??ì3
ITPUB论坛 » 开发工具和语言 » .NET软件架构与模式 » 如何提高你的XML应用性能


标题: 如何提高你的XML应用性能
离线 Arrayfirefly
初级会员



精华贴数 0
个人空间 0
技术积分 62 (23194)
社区积分 0 (122536)
注册日期 2004-7-9
论坛徽章:0
      
      

发表于 2004-8-1 23:50 
如何提高你的XML应用性能

如何提高你的XML应用性能

一、设计好你的XML文档
如果你的XML文档只使用ASCII字符集,那么请声明该XML使用US ASCII (“US-ASCII”),解析ASCII要比UTF-8 和UTF-16快。

如果你不是纯粹为了让你的XML文档“好看些”,那么请减少你XML文档中不必要的空行和空格,这些增强文档层次感,让它“好看”的东西会让解释器花更多的时间去“看懂”你的文档。

如非必要,不要使用命名空间。命名空间会减慢解析速度,并且解析器必须花多额外的工夫去验证它是否well-formed。

不需要验证的XML文档中不要加入<!DOCTYPE...>, 根据XML规范,即使你关闭了验证功能,解析器仍然会处理DTD。另外,虽然XML SCHEMA 要比DTD容易编写和管理,但在校验时DTD却比SCHEMA要耗费更少的资源。如果使用外部实体(external entity),例如外部DTD 或引入XML Schemas 会增加系统负担;同样,XML Schema的重定义功能也会延长验证时间。

二、使用SAX时的技巧
将SAX属性中“http://xml.org/sax/features/stri ... (reader.setFeature("http://xml.org/sax/features/string-interning", true)),这样解析器懂得利用java.lang.String.intern()方法去处理XML命名,如元素,属性命名及命名空间URI等。值得注意的是并非所有解析器都支持这一特性。


处理大容量多元素的XML文档时,可以通过声明多个content handler去处理不同的查询需求,从而减少代码的冗余(具体例子请参考原版文档)。

如果你的XML使用了外部实体或外部DTD,正如前面所述,系统必须付出相当的资源去处理它们,并且由于这些读入的外部实体并非驻存在memery中,所以每引用一次系统都要重新定位它们。使用Entity Resolver 可以将外部实体载入内存,实现一次读入,多次使用。如果你不关心也不需要这些外部实体,那么你可以通过关闭SAX定义的两个属性:“http://xml.org/sax/features/external-general-entities” 和 “http://xml.org/sax/features/exte ... 体的名字交给content handler去处理。

三,使用DOM时的技巧
在编写节点操作时,不要使用instanceof去判断节点类型,使用getNodeType。如果要获取属性列表,使用hasAttributes;如果所造访的节点存在属性,先将该节点造型为元素节点(Element node),然后用getAttributes取得属性值。
如果需要查询或修改属性,避免使用hasAttribute(String)或hasAttributeNS(String, String) 方法,而应该使用getAttribute(String) method 或 the getAttributeNS(String, String)。

在DOM Level 2操作中,一些方法会相当耗时,例如renaming & moving 节点, 解决办法可以是使用renameNode & adoptNode 方法。

在DOM Level 3中,normalizeDocument 方法改善了校验功能,并且可以在内存中进行验证,不过这也会耗费更多的系统资源。




------- 以上节译自IBM by firefly
由于本虫子水平有限, 对该译文观点有不同看法者请参阅原文:
http://www-106.ibm.com/developer ... rfap1.html#IDA2JCPF


只看该作者    顶部
离线 itsuperman
版主



精华贴数 1
个人空间 0
技术积分 961 (1899)
社区积分 12 (9357)
注册日期 2001-11-9
论坛徽章:3
ITPUB元老管理团队2006纪念徽章授权会员   
      

发表于 2004-8-6 00:12 
好文!


__________________
我喜欢X元素, 因为它代表一种未知.所以我衷情于XML.itsuperman22@hotmail.com
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问