dor*_*emi 3 javascript xml performance
假设我有大约1000多个bookinfo节点的XML.
<results>
<books>
<bookinfo>
<name>1</dbname>
</bookinfo>
<bookinfo>
<name>2</dbname>
</bookinfo>
<bookinfo>
<name>3</dbname>
</bookinfo>
</books>
</results>
Run Code Online (Sandbox Code Playgroud)
我正在使用它来获取每本书的名称:
var books = this.req.responseXML.getElementsByTagName("books")[0].getElementsByTagName("bookinfo")
Run Code Online (Sandbox Code Playgroud)
然后使用for循环对每个书名做一些事情:
var bookName = books[i].getElementsByTagName("name")[0].firstChild.nodeValue;
Run Code Online (Sandbox Code Playgroud)
当书本真的很大时,我发现这真的很慢.不幸的是,没有办法限制结果集,也没有指定不同的返回类型.
有更快的方法吗?
大概你正在使用XMLHttpRequest,在这种情况下,在调用responseXML的任何方法之前解析XML(即XML已经被解析并变成了DOM).如果你想要一个更快的解析器,你可能需要一个不同的用户代理或一个不同的javascript引擎用于你当前的UA.
如果您想以更快的方式访问XML文档中的内容,请考虑使用XPath:
我//parentNode/node/text()在一个134KB的本地文件中使用了一个XPath表达式(比如)来提取439个元素的文本节点,将它们放入一个数组中(因为那是我的标准evalXPath()函数所做的),然后迭代该数组以为每个文本节点放置nodeValue进入另一个数组,用正则表达式做两个替换调用来格式化文本,然后alert()用屏幕表示join('\n').耗时3ms.
具有529个节点的487KB文件花费了4ms(IE 6报告为15ms,但其时钟具有非常差的分辨率).当然,我的网络延迟几乎为零,但它表明XML解析器,XPath评估程序和脚本通常可以快速处理该大小文件.
您可以尝试使用快速 xml 解析器将 XML 数据转换为 JS 中实现的 JSON。这是针对其他解析器的基准测试。
var parser = require('fast-xml-parser');
var jsonObj = parser.parse(xmlData);
// when a tag has attributes
var options = {
attrPrefix : "@_" };
var jsonObj = parser.parse(xmlData,options);
Run Code Online (Sandbox Code Playgroud)
如果不想使用 npm 库,可以直接在 HTML 中包含parser.js。
免责声明:我是这个库的作者。
| 归档时间: |
|
| 查看次数: |
8455 次 |
| 最近记录: |