【经验总结】XML解析到底能多快?
----by abllen
近来,因为工作的关系,需要对大XML文件进行解析使用,就专门对解析效率问题作了下研究。
场景:
在我们的场景中,会将大量的业务配置信息存放在DB, 便于前端修改, 后端使用时,会先将DB导出到本地XML格式文件,再各自加载。 这里之所以不直连数据库一是考虑后端高并发时的性能问题,二是数据一般变动不频繁,存放XML也合适。
起初也曾参考一些现有的xml解析库,但由于我们的XML文件都是从DB导出的,对有些情况不很合适,因而考虑手写。
为什么会手写:
1) 允许xml的key为纯数字,因为要从数据库导出到XML,而数据库的内容往往难以避免有纯数字的出现
2) 允许空key,数据库里往往使用空字段表示默认,也比较方便
3) 兼容xml格式,更好的出错说明
我们希望使用完全的自左向右扫描分析,如对
<a><as od=sdsd</as></a>
能提示a/as key缺少>更好些, 而不是某一行缺少闭合的>不完整
Tips:曾经对一个800K的上万行xml文件进行排错,包括notepad++/chrome/IE 等浏览器的出错信息让人崩溃,往往只有 某一行缺少;等
4) 更好的把握
5) 学习,只有亲手写并和其他解析器对比,才能知道真正的瓶颈和问题在哪,希望能挖掘性能极限,看解析究竟能有多快
经过一段时间的调教,得到如下结果:
1) 俺的满足系统要求的XML解析器核心代码只有50行,纯模板,外围功能还支持增量解析合并,易用
2) 解析性能可以对比 strlen