由于带宽原因,我的应用程序在互联网上执行速度有点慢.我已经启用了GZip,它提高了下载时间,但我还在考虑是否可以从XML切换到JSON以便挤出最后一点性能.使用JSON会使邮件大小显着缩小,还是会略小一些?假设我们说的是250kB的XML数据(压缩到30kB).
Mil*_* B. 18
在对象序列化方面,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
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
以ASCII编码时,JSON为1422字节,而XML为1954字节.在使用GZipStream压缩它们之后,差异较小但仍然很清楚.JSON压缩到524字节,而XML压缩到695字节.
序列化/反序列化时间将因实现(当然还有硬件)而有所不同,但我在循环中对上述JSON和XML进行了10万次序列化和反序列化,并获得了总累计时间:
JSON序列化:5258毫秒,XML序列化:3266毫秒
JSON反序列化:9582毫秒,XML反序列化:4604毫秒
所以XML使用我正在使用的库(参见下文)更快地序列化和反序列化,但平均值以百分之一毫秒为单位,我认为网络带宽和传输时间更重要.
(注意:我使用Microsoft的System.Xml.Serialization.XmlSerializer和JSON.Net的Newtonsoft.Json.JsonConvert类在C#中完成此操作)
Che*_*eso 14
不是答案,而是建议检查你的假设.
JSON如何变小?
JSON:
"person":{"firstname":"Fred",
"lastname":"Flintstone",
"age":38,
"spouse":"Wilma" }
Run Code Online (Sandbox Code Playgroud)
XML:
<person firstname='Fred'
lastname='Flintstone'
age='38'
spouse='Wilma'/>
Run Code Online (Sandbox Code Playgroud)
我只是看不出JSON表达式通常比"等效"XML小30%.即使你使用嵌套结构和数组提高这些东西的复杂性,它也不会有30%的差异.它大致相当,json获得了优势,因为嵌套结构的结束标记是一个},而XML获得了优势,因为它不需要引用字段名称.
如果你强迫我使用XML元素,如下所示:
<person>
<firstname>Fred<firstname>
<lastname>Flintstone<lastname>
<age>38</age>
<spouse>Wilma</spouse>
</person>
Run Code Online (Sandbox Code Playgroud)
...确定,生成的XML比以前的JSON大.但这似乎是在作弊.
现在可能是您格式化XML的方式当前使用了所有内容的元素,并且有机会相应地缩小有效负载.但这并不一定意味着JSON.如果您有可以处理XML的工具和库,那么您可以保留XML并缩小.
Jim*_*ler 10
实际上,这似乎很难回答,
几年前,json"更快",但两者之间的差异变得更加微妙.
我观察到的是;
总体而言,加速现代浏览器的技术也适用于xml处理.
一般来说,每当我听到json被吹捧为XML的"低脂"替代品时,我想知道它是不是对于体重问题的某些潜意识的痴迷......那是在我悲观的日子里;
基本上我遵循的经验法则是
标记适用于文件json有利于数据
继续前进......没有什么可看的
| 归档时间: |
|
| 查看次数: |
22648 次 |
| 最近记录: |