我们正在创建一个使用大量 XML 解析的应用程序,我想也许可以使用 JSON,因为我们可以使用 JSON 作为 XML 的替代品。
我需要测试 JSON 或 XML 哪个更快,但想先在这里征求意见。
JavaScript 中的 JSON 是原生的,而且速度很快。当然比解析 XML 更快。但在 Delphi 中没有本地类可以做到这一点。
所以我的问题是 - 在 Delphi 中使用 XML 或 JSON 解析器库哪个更快?或者它们的速度相等吗?
如果它更快,那么你更喜欢哪个 -Delphi 网络实用程序 http://sourceforge.net/projects/is-webstart/, JSON Delphi 库 http://sourceforge.net/projects/lkjson/ or JSON工具包 http://www.progdigy.com/?page_id=6
通过编写良好的解析器,XML 和 JSON 将具有或多或少相同的时序。您可以拥有一个较慢的 JSON 解析器和一个快速的 XML 解析器。
XML 可能会慢一些,因为语法比 JSON 更复杂。
但瓶颈主要是从硬盘读取,而不是解析内容。
我们使用 JSON 作为 ORM 的客户端/服务器,有几个原因(但你会发现其他原因,我不想在这里恶搞,只是从我们的小实验说起):
- 与 XML 一样,它是一种基于文本的、人类可读的格式,用于表示简单的数据结构和关联数组(称为对象);
- 它更易于阅读(对于人类和机器而言)、实现速度更快,并且通常比 XML 更小;
- 这是一种非常有效的数据缓存格式;
- 它的布局允许就地重写为单独的以零结尾的 UTF-8 字符串,几乎没有浪费空间:此功能用于将表结果快速从 JSON 转换为文本,无需内存分配或数据复制;
- 它由 JavaScript 语言原生支持,使其成为任何 AJAX(即 Web 2.0)应用程序中的完美序列化格式;
- JSON 格式在众所周知且简单的 RFC 中指定;
- JSON 和 ORM 的默认文本编码都是 UTF-8,它允许存储和通信完整的 Unicode 字符集;
- 它是自 .NET Framework 3.5 以来在 Windows Communication Foundation (WCF) 中创建的 ASP.NET AJAX 服务使用的默认数据格式;所以微软正式“准备好了”;
- 对于二进制 blob 传输,没有 XML 中的 CDATA。因此,我们只需将二进制数据编码为 JSON 字符串内的十六进制或 Base64(使用更少的空间)。
关于解析速度,你可以看看我们的来自 SQLite3 结果的就地解析器和 JSON 编写器 http://synopse.info/forum/viewforum.php?id=2。它对速度进行了非常优化,而且速度很快。我们写了一个简单但是高效的 JSON 序列化 http://blog.synopse.info/post/2011/02/23/Fast-JSON-%28un%29serialization对于任何 TPersistent,包括集合。我们只需添加动态数组 JSON 序列化器 http://blog.synopse.info/post/2011/03/12/TDynArray-and-Record-compare/load/save-using-fast-RTTI,这也非常快。
附加说明:
所有这些解析器都与您提到的解析器不同,因为它们解析 JSON 内容并将其格式化为输入缓冲区内的文本:解析期间没有进行内存分配,因此它应该比其他解决方案更快。文本内容未转义,字段以 #0 结束,并计算指向文本开头的指针。因此,要访问一个值,只需使用指针来获取数据即可。它通常会立即解析一些 MB 的 JSON 内容。
另请查看DWS中嵌入的JSON解析器 http://delphitools.info/?s=json。作者声称速度很快。但仍然为每个对象分配了一个内存块。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)