Hangisinin daha hızlı olduğunu bilmek istiyorum: XML ve JSON? Hangisi ne zaman kullanılır?
Hangisinin daha hızlı olduğunu bilmek istiyorum: XML ve JSON? Hangisi ne zaman kullanılır?
Yanıtlar:
Hangisini ne zaman kullanacağınızı cevaplamadan önce, biraz arka plan:
edit: Bu karşılaştırma gerçekten onları JavaScript ile bir tarayıcıda kullanma açısından olduğunu belirtmek gerekir. Ya veri formatı yol değil sahiptir kullanılacak ve ben oldukça geçerli dediğimi yapmak ayrıntıları değişecek iyi ayrıştırıcıları bol vardır.
JSON hem daha kompakt hem de (benim görüşüme göre) daha okunabilir - iletimde daha az veri aktarıldığından "daha hızlı" olabilir.
Ayrıştırma işleminde ayrıştırıcıya bağlıdır. Kodu (JSON veya XML olsun) bir veri yapısına (harita gibi) dönüştüren bir ayrıştırıcı, XML'in katı niteliğinden yararlanabilir ( XML Şemaları veri yapısını güzel bir şekilde belirsizleştirir) - ancak JSON'da bir öğenin türü (Dize / Number / Nested JSON Object) sözdizimsel olarak çıkarılabilir, örn:
myJSON = {"age" : 12,
"name" : "Danielle"}
Ayrıştırıcının, 12
bir sayıyı temsil eden (ve Danielle
diğerleri gibi bir dize olduğunu) fark edecek kadar zeki olmasına gerek yoktur . Javascript'te şunları yapabiliriz:
anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False
XML'de aşağıdaki gibi bir şey yapmamız gerekir:
<person>
<age>12</age>
<name>Danielle</name>
</person>
(bir kenara, bu XML'in daha ayrıntılı olduğu noktasını göstermektedir; veri iletimi için bir endişe). Bu verileri kullanmak için, bir ayrıştırıcı aracılığıyla çalıştırırdık, ardından şöyle bir şey çağırmamız gerekir:
myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True
Aslında, iyi bir ayrıştırıcı age
sizin için iyi bir şekilde yazabilir (öte yandan, bunu yapmak istemeyebilirsiniz). Bu verilere eriştiğimizde, yukarıdaki JSON örneğinde olduğu gibi bir özellik araması yapmak yerine, anahtarda bir harita araması yapıyoruz name
. XML'i şu şekilde oluşturmak daha sezgisel olabilir:
<person name="Danielle" age="12" />
Ancak yine de verilerimize erişmek için harita aramaları yapmak zorundayız:
myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");
EDIT: Orijinal:
Çoğu programlama dilinde (hepsi değil, herhangi bir streç ile), bunun gibi bir harita araması bir özellik aramasından daha maliyetli olacaktır (JSON'i ayrıştırdığımızda yukarıda bulduğumuz gibi).
Bu yanıltıcıdır: JavaScript'te (ve diğer dinamik dillerde) harita araması ile alan araması arasında bir fark olmadığını unutmayın . Aslında, bir saha araması olan sadece bir harita arama.
Gerçekten değerli bir karşılaştırma yapmak istiyorsanız, en iyisi bunu karşılaştırmaktır - verileri kullanmayı planladığınız bağlamda karşılaştırmaları yapın.
Yazarken, Felix Kling bunları her birini ne zaman kullanacakları ile karşılaştırarak oldukça kısa ve öz bir cevap verdi, bu yüzden daha fazla devam etmeyeceğim.
Daha hızlı bir JSON veya XML özniteliği ya da bunlar arasında bir karşılaştırma yapılması sonucu değildir. Varsa, ayrıştırıcıların veya verileri ilettiğiniz bant genişliğinin bir özelliğidir.
JSON ve XML'in avantaj ve dezavantajlarının bir listesi (başlangıcı):
Pro:
con:
Basit sözdizimi, yalnızca birkaç farklı veri türü desteklenir.
Yorumlar için destek yok.
Pro:
con:
Sonuçta neye ihtiyacınız olduğuna karar vermelisiniz . Her iki formatın da meşru kullanım durumları olduğu açıktır. Çoğunlukla JavaScript kullanacaksanız JSON ile gitmelisiniz.
Artılarını ve eksilerini eklemekten çekinmeyin. Ben bir XML uzmanı değilim;)
id
özniteliği belge içinde benzersiz olmaya zorlayarak yapar .
İşlem hızı sadece ilgili mesele olmayabilir, ancak asıl soru şu: Bir kıyaslamadaki bazı sayılar: JSON vs. XML: Ayrıntılarla ilgili bazı zor sayılar . Hız için, bu basit karşılaştırmada XML, JSON'a göre% 21'lik bir ek yük sunar.
Makalenin dediği gibi ayrıntılarla ilgili önemli bir not, en yaygın şikayet: bu uygulamada çok ilgili değil (ne XML ne de JSON verileri genellikle insanlar tarafından değil, makineler tarafından işlenir), hız, sıkıştırmak için biraz daha fazla zaman gerektirir.
Ayrıca, bu karşılaştırmada büyük miktarda veri işlendi ve tipik bir web uygulaması 90 MB gibi büyüklükteki veri yığınlarını iletmeyecek ve sıkıştırma yararlı olmayabilir (yeterince küçük veri parçaları için sıkıştırılmış bir yığın) sıkıştırılmamış yığından daha büyük olacaktır), bu yüzden uygulanamaz.
Yine de, herhangi bir sıkıştırma söz konusu değilse, JSON, açıkça tersine olduğu gibi, özellikle klasik HTTP ek yükünün yokluğunun JSON'un avantajı üzerinde fark yaratabileceği bir WebSocket bağlantısı üzerinden iletilirse, iletim kanalı üzerinde daha az ağırlık alacaktır. önemli.
Aktarımdan sonra veriler tüketilir ve bu toplam işlem süresinde sayılır. Yeterince büyük veya karmaşık veri iletilecekse, doğrulayan bir XML ayrıştırıcısı tarafından otomatik olarak denetlenen bir şemanın olmaması, JSON verileri üzerinde daha fazla denetim gerektirebilir; bu denetimlerin özellikle hızlı olduğu bilinmeyen JavaScript'te yürütülmesi gerekir ve bu nedenle bu gibi durumlarda XML üzerinde ek bir ek yük oluşturabilir.
Her neyse, sadece test sizin özel kullanım durumunuzun cevabını sağlayacaktır (hız gerçekten standartsa, güvenlik veya bütünlük değilse…).
Güncelleme 1: bahsetmeye değer, Gzip kullanmaktan daha az maliyetle sıkıştırma sunan ve sıkıştırılmış XML'nin sıkıştırmasını açmak için gerekli olan işlemi kaydeten ikili XML formatı EXI'dir. EXI XML, BSON JSON için ne olduğunu. Burada hem uzay hem de zaman açısından verimliliğe atıfta bulunarak hızlı bir genel bakış var: EXI: Son ikili standart? .
Güncelleme 2: Verimlilik ve düşük bellek ve CPU ayak izi olarak W3C tarafından yürütülen bir ikili XML performans raporları da var, XML alanı için de bir sorun var: Verimli XML Değişim Değerlendirmesi .
HTTP yükü bir sorun olarak ortaya çıktığı için bu bağlamda fark edilmeye değer: IANA, EXI kodlamasını (yukarıda belirtilen verimli ikili XML) aa HTTP protokolü için bir İçerik Kodlaması olarak kaydetti ( sıkıştırma , söndürme ve gzip ile birlikte ) . Bu, EXI'nin tarayıcılar tarafından muhtemelen diğer HTTP istemcileri arasında anlaşılması beklenen bir seçenek olduğu anlamına gelir. Bkz. Köprü Metni Aktarım Protokolü Parametreleri (iana.org) .
Bu makaleyi dijital pazarda gerçekten ilginç buldum . Alıntılarını Norm'dan alıntılamak:
JSON pros hakkında:
Etmek istediğiniz tek şey atomik değerler veya atomik değerlerin listeleri veya karmalarıysa, JSON, XML'in birçok avantajına sahiptir: İnternet üzerinden doğrudan kullanılabilir, çok çeşitli uygulamaları destekler, JSON'u işlemek için programlar yazmak kolaydır, isteğe bağlı birkaç özelliği vardır, insan tarafından okunabilir ve makul derecede açıktır, tasarımı resmi ve özlüdür, JSON belgelerinin oluşturulması kolaydır ve Unicode kullanır. ...
XML artıları hakkında:
XML, yapılandırılmamış verilerin tam zenginliği ile oldukça iyi ilgilenir. Ölümü neşeyle web API tasarımcılarının bir kadrosu tarafından kutlansa bile XML'in geleceği hakkında endişelenmiyorum.
Ve "Sana söylemiştim!" masamda bir token. Ben daha zengin API geliştirmek istendiğinde JSON millet ne yaptığını görmek için sabırsızlanıyoruz. Daha az iyi yapılandırılmış veri alışverişi yapmak istediklerinde, JSON'a çekecekler mi? JSON için zaman zaman bir şema dilinden bahsediyorum, diğer diller takip edecek mi? ...
Şahsen Norm'a katılıyorum. XML'e yapılan saldırıların çoğunun, gerçekten entegrasyon geliştiricilerinden değil, tipik uygulamalar için Web Geliştiricileri'nden geldiğini düşünüyorum. Ama bu benim görüşüm! ;)
{ "foo": 42 }
Bu nesne ne tür? Ardından, tip eksikliği gidermek için, bu gösteri up gibi şeyler: { "__type": "Bar", "foo": 42 }
. Kontrast tip XML elemanı ismine connotated edilebilir: <Bar><foo>42</foo></Bar>
. Sadece lisp ve json gibi javascript çocuklar;)
XML (genişletilebilir İşaretleme Dili) genellikle XHR kullanılır, çünkü bu standart bir yayın dili, herhangi bir programlama dili tarafından kullanılabilen ve hem sunucu hem de istemci tarafını desteklediğinden, bu en esnek çözümdür. XML daha fazla bölüm için ayrılabilir, böylece belirli bir grup diğer bölümleri etkilemeden programın bir bölümünü geliştirebilir. XML formatı XML DTD veya XML Şeması (XSL) tarafından da belirlenebilir ve test edilebilir.
JSON, JavaScript uygulamalarının olası biçimi olarak daha popüler hale gelen bir veri alışverişi biçimidir. Temelde bu bir nesne gösterim dizisidir. JSON çok basit bir sözdizimine sahiptir, bu yüzden kolayca öğrenilebilir. Ayrıca JavaScript, JSON eval
işleviyle ayrıştırmayı destekler . Öte yandan, eval
işlevin olumsuzlukları vardır. Örneğin, program çok yavaş JSON ayrıştırma eval
olabilir ve güvenlik nedeniyle çok riskli olabilir. Bu JSON'un iyi olmadığı anlamına gelmez, sadece daha dikkatli olmalıyız.
Benim önerim, JSON'u oyunlar gibi hafif veri alışverişi olan uygulamalar için kullanmanızdır. Veri işlemeyi gerçekten önemsemeniz gerekmediğinden, bu çok basit ve hızlıdır.
XML, alışveriş siteleri veya bunun gibi daha büyük web siteleri için en iyisidir. XML daha güvenli ve açık olabilir. Düzeltmeyi kolayca test etmek ve kolayca parçalara ayırmak için temel veri yapısı ve şema oluşturabilirsiniz.
Hız ve güvenlik nedeniyle XML kullanmanızı öneririz, ancak hafif şeyler için JSON.
JSON ile ilgili önemli olan şey, güvenlik nedeniyle veri aktarımını şifreli tutmaktır. Şüphesiz JSON, XML'den çok daha hızlıdır. XML 100ms almak gördüm nerede JSON sadece 60ms aldı. JSON verilerinin kullanımı kolaydır.