写点什么

XML 能够拥有与 JSON 相当的性能

  • 2013-08-14
  • 本文字数:1004 字

    阅读完需:约 3 分钟

对于与 JSON 的轻量级负荷相比,“胖” XML 是如何缓慢、如何消耗资源的众多推测,都在 David Lee 的一项测试面前败下阵来。David 是 Marklogic 的首席工程师,他的实验使用 33 份不同文档,对最常用的浏览器和操作系统做了接近 1200 项测试。而后他表示,实验发现, 对于总体用户体验方面的性能来说(传输、解析和查询某文档),XML 和JSON 格式几乎难分轩轾。

在实验中,David 创建了一个公开测试环境,模拟了这样的用例:使用Web 服务器传输XML 和JSON 文档,并在Web 浏览器中解析和查询。服务器为客户端提供源数据并收集客户端提交的结果。客户端是一个基于浏览器的JavaScript 应用,其中除了测试jQuery 性能的部分外,还包含了使用JavaScript 人工编写的性能测试部分。

David 使用了 7 份不同文档,它们的大小分布在从 100KB 到 1MB 的区间里,并且每份文档采用两种 JSON 和三种 XML 变体。此外,他还尝试让测试覆盖大量的设备、浏览器、操作系统和网络。为了实现这一目的,他采用了“众包”的方式,也即将测试环境 URL 公布出来,并发布到一系列邮件列表和社交媒体网站上。迄今为止,已经成功收集了接近 1200 份独立、有效的测试结果,覆盖了最常用的浏览器和操作系统。在文章中,David 记录了全部测试数据,以及来自不同测试的结果。

通过该实验,David 得出的部分结论如下:

  • 解析速度与使用的技术有关。一般来说,纯 JavaScript 解析 XML 比解析 JSON 表现要好,而对 JSON 的查询速度一般则更快一些。不过对两种格式也都存在一些测试结果相反的例外。
  • 使用 JavaScript 库 jQuery ,会对 JSON 造成严重的影响,而对 XML 来说则更糟。
  • 用各种格式压缩后的文档——即使对非常大的 JSON 或 XML 文档——两种格式都会压缩到近乎同样的大小,这意味着他们实际上包含几乎一样的信息内容。
  • 当将文档传输到广泛的设备上时,对每个终端来说传输所花费的时间几乎都是相同的,而与标记格式无关

基于他的实验,David 为架构师和开发者提出了若干建议,包括:

  • 使用 HTTP 压缩,在大多数情况下它是对整体性能影响最大的单一因素。
  • 优化传输和查询的标记。
  • 除非与其他问题相比,数据传输、解析和查询是显著问题,否则不要进行优化。

最后,David 给出了一条忠告:

不要轻信任何人。

不要盲目地相信别人告诉你的东西。自己动手实验,基于自己的用户和设备来测试自己的数据和代码。那些“看起来显而易见”的事情并不总是对的。

查看英文原文: XML Can Give the Same Performance as JSON

2013-08-14 02:426074
用户头像

发布了 256 篇内容, 共 78.2 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

Mybatis-plus在项目中的应用

Rubble

4月日更 4月月更

GAIA-IR: GraphScope 上的并行化图查询引擎

6979阿强

大数据 并行计算 图计算 GraphScope 图分析

预备,请关注!DingOS先导小视频发布!

鼎道智联

华为云GaussDB(for Influx)揭密:数据分级存储

华为云开发者联盟

华为云 GaussDB(for Influx) 时序数据 数据分级存储 Influx

报告解读下载 | 首份《中国数据库行业分析报告》重磅发布!

墨天轮

数据库 国产数据库 达梦 polarDB gbase8a

面试突击41:notify是随机唤醒吗?

王磊

Java java面试

Git技巧小能手

西门阿杰

git 版本控制

什么是域名(Domain Name ) ?

源字节1号

区块链+数字资产,未来财富的新起点

易观分析

区块链 数字经济

湖仓一体,Hologres加速云数据湖DLF技术原理解析

阿里云大数据AI技术

sql 大数据 分布式计算 Cloud Native MaxCompute

组件容器化Statefulset与Deployment的选型与实践

移动云大数据

Deployment statefulset

HDFS小文件分析实践

移动云大数据

hdfs 小文件

Linux驱动框架与杂项字符设备框架介绍

DS小龙哥

4月月更

阿里云发布中国云原生数据湖应用洞察白皮书

阿里云大数据AI技术

大数据 数据湖

为什么需要可编程代理

Flomesh

负载均衡 代理 Pipy 可编程代理

Envoy熔断限流实践(二)Rainbond基于RLS服务全局限流

北京好雨科技有限公司

Cilium 原理解析:网络数据包在内核中的流转过程

火山引擎边缘云

Linux 云原生 网络

深入解析require源码,知其根,洞其源

战场小包

前端 Node 4月月更

spring-cloud-kubernetes与SpringCloud Gateway

程序员欣宸

Java spring-cloud 4月月更

制约国内企业知识管理发展的因素

小炮

知识管理 企业知识管理 企业知识管理工具

Apache ShardingSphere 如何实现分布式事务

SphereEx

Apache 数据库 ShardingSphere SphereEx

Build On 活动预告 | 构建你的第一个基于知识图谱的推荐模型

亚马逊云科技 (Amazon Web Services)

云计算

玩转LiteOS组件:玩转Librws

华为云开发者联盟

TCP websocket LiteOS LiteOS组件 Librws

Go 入门很简单:如何在 Go 中使用日志包

宇宙之一粟

日志 log Go 语言 4月月更

【高并发】如何解决可见性和有序性问题?这次彻底懂了!

冰河

并发编程 多线程 协程 异步编程 精通高并发系列

显卡是什么?显卡和Graphics的区别在哪里?

Finovy Cloud

人工智能 算法 云服务器 GPU服务器 显卡、gpu

TASKCTL 消息订阅参数设置说明

敏捷调度TASKCTL

DevOps 分布式 敏捷开发 ETL任务 自动化运维

TASKCTL 资源树刷新、重载和重置的不同区别

敏捷调度TASKCTL

DevOps 分布式 敏捷开发 自动化运维 大数据运维

行业大咖齐聚 多元主题碰撞 OpenHarmony技术日等你来

Geek_283163

OpenAtom OpenHarmony

百度小程序包流式下载安装优化

百度Geek说

小程序

OceanBase 参编金科联盟标准发布,推动数据库产业规范化发展

OceanBase 数据库

oceanbase

XML能够拥有与JSON相当的性能_SOA_Jan Stenberg_InfoQ精选文章