我有一个应用程序,由于带宽的原因,在互联网上执行有点慢。我启用了GZip,它极大地缩短了下载时间,但我也在考虑是否可以从XML切换到JSON,以便挤出最后一点性能。使用JSON会使消息大小明显变小,还是只是稍微变小一些?假设我们讨论的是250kB的XML数据(压缩到30kB)。
发布于 2010-04-21 02:03:38
不是一个答案,而是一个检查你的假设的建议。
JSON是怎么变小的?
JSON:
"person":{"firstname":"Fred",
"lastname":"Flintstone",
"age":38,
"spouse":"Wilma" }XML:
<person firstname='Fred'
lastname='Flintstone'
age='38'
spouse='Wilma'/>我只是不明白,一般来说,JSON表达式怎么会比“等价的”XML小30%。即使增加了这些东西的复杂性,使用嵌套结构和数组,也不会有30%的差异。它大致相当,json获得了优势,因为嵌套结构的结束标记是},而XML获得了优势,因为它不需要引用字段名。
如果您强迫我使用XML元素,如下所示:
<person>
<firstname>Fred<firstname>
<lastname>Flintstone<lastname>
<age>38</age>
<spouse>Wilma</spouse>
</person>...sure,则生成的XML比以前的JSON更大。但这看起来像是作弊。
现在可能的情况是,目前格式化XML的方式将元素用于所有内容,并且有机会相应地缩小有效负载。但这并不一定意味着JSON。如果您有处理XML的工具和库,则可以保留XML和收缩。
发布于 2016-06-08 01:42:24
在对象序列化方面,JSON通常更紧凑(即使经过压缩)。例如:
我将一个对象的相同实例序列化为XML和JSON,并得到以下结果:
JSON
{
"Account": "2222",
"Login": "124235",
"SalesId": null,
"CustomerReference": "9652358474",
"Status": null,
"DropShip": 0,
"PromoCode": null,
"Notes": "For the truck",
"Errors": null,
"ReferenceId": null,
"PaymentMethod": "CKPhone",
"CheckPayment": {
"Name": "Simon Riggs",
"CompanyName": "Darth Inc",
"AccountNumber": "565555555",
"RoutingNumber": "222224455116",
"CheckNumber": "32",
"Address": {
"Attention": null,
"Street1": "555 W Portebello Rd",
"Street2": null,
"City": "London",
"State": "Texas",
"Zipcode": "45217",
"Country": null,
"ReferenceId": null,
"GetAxType": 2
},
"ReferenceId": null,
"GetAxType": 2
},
"CreditCardPayment": {
"Name": "Simon Riggs",
"CardNumber": "1111222233334444",
"Cvv2": "546",
"Month": 10,
"Year": 2018,
"Address": {
"Attention": null,
"Street1": "555 W Portebello Rd",
"Street2": null,
"City": "London",
"State": "Texas",
"Zipcode": "45217",
"Country": null,
"ReferenceId": null,
"GetAxType": 2
},
"ReferenceId": "0",
"GetAxType": 2
},
"ShippingAddress": {
"Attention": "Simon Riggs",
"Street1": "555 W Portebello Rd",
"Street2": null,
"City": "London",
"State": "Texas",
"Zipcode": "45217",
"Country": null,
"ReferenceId": null,
"GetAxType": 2
},
"Totals": {
"SubTotal": 25.0,
"TotalTax": 5.0,
"ShippingTotal": 10.0,
"ShippingTax": 1.5,
"GrandTotal": 35.0
},
"Lines": [{
"SKU": "1442-4521",
"LineNum": 0.0,
"Qty": 2.0,
"Price": 72.95,
"ShippingClass": "Ground",
"ReferenceId": null,
"GetAxType": 2
},
{
"SKU": "1212-5549",
"LineNum": 0.0,
"Qty": 1.0,
"Price": 31.15,
"ShippingClass": "Ground",
"ReferenceId": null,
"GetAxType": 2
}],
"GetAxType": 2
}XML
<?xml version="1.0" encoding="utf-16"?>
<SalesOrder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Account>2222</Account>
<Login>124235</Login>
<CustomerReference>9652358474</CustomerReference>
<DropShip>0</DropShip>
<Notes>For the truck</Notes>
<PaymentMethod>CKPhone</PaymentMethod>
<CheckPayment>
<Name>Simon Riggs</Name>
<CompanyName>Darth Inc</CompanyName>
<AccountNumber>565555555</AccountNumber>
<RoutingNumber>222224455116</RoutingNumber>
<CheckNumber>32</CheckNumber>
<Address>
<Street1>555 W Portebello Rd</Street1>
<City>London</City>
<State>Texas</State>
<Zipcode>45217</Zipcode>
</Address>
</CheckPayment>
<CreditCardPayment>
<Name>Simon Riggs</Name>
<CardNumber>1111222233334444</CardNumber>
<Cvv2>546</Cvv2>
<Month>10</Month>
<Year>2018</Year>
<Address>
<Street1>555 W Portebello Rd</Street1>
<City>London</City>
<State>Texas</State>
<Zipcode>45217</Zipcode>
</Address>
<ReferenceId>0</ReferenceId>
</CreditCardPayment>
<ShippingAddress>
<Attention>Simon Riggs</Attention>
<Street1>555 W Portebello Rd</Street1>
<City>London</City>
<State>Texas</State>
<Zipcode>45217</Zipcode>
</ShippingAddress>
<Totals>
<SubTotal>25</SubTotal>
<TotalTax>5</TotalTax>
<ShippingTotal>10</ShippingTotal>
<ShippingTax>1.5</ShippingTax>
<GrandTotal>35</GrandTotal>
</Totals>
<Lines>
<SalesLine>
<SKU>1442-4521</SKU>
<LineNum>0</LineNum>
<Qty>2</Qty>
<Price>72.95</Price>
<ShippingClass>Ground</ShippingClass>
</SalesLine>
<SalesLine>
<SKU>1212-5549</SKU>
<LineNum>0</LineNum>
<Qty>1</Qty>
<Price>31.15</Price>
<ShippingClass>Ground</ShippingClass>
</SalesLine>
</Lines>
</SalesOrder>当以ASCII编码时,JSON是1422字节,而XML是1954字节。使用GZipStream对它们进行压缩后,差别较小,但仍然非常明显。JSON压缩为524字节,而XML压缩为695字节。
序列化/反序列化时间会因实现(当然还有硬件)而有所不同,但我在一个循环中对上述JSON和XML进行了100,000次序列化和反序列化,得到了总的累积时间:
JSON序列化:5258ms,XML序列化:3266ms
JSON反序列化:9582ms,XML反序列化:4604ms
因此,使用我正在使用的库(见下文),XML的序列化和反序列化速度更快,但由于平均值是以百分之一毫秒为单位测量的,我认为网络带宽和传输时间更重要。
(注意:我使用微软的System.Xml.Serialization.XmlSerializer和JSON.Net的Newtonsoft.Json.JsonConvert类在C#中做到了这一点)
发布于 2013-03-28 21:46:14
实际上,这似乎更难回答,
几年前,json是“更快的”,但两者之间的差异已经变得更加细微。
我观察到的是;
总体而言,加快现代浏览器速度的技术也适用于xml处理。
一般来说,每当我听到json被吹捧为XML的“低脂肪”替代品时,我就在想,这不是某种对体重问题的潜意识痴迷……这就是我悲观的日子;
基本上,我遵循的经验法则是
标记适用于文档json适用于数据
然后继续前进..。这里没什么可看的
https://stackoverflow.com/questions/2673367
复制相似问题