Chcę wiedzieć, co jest szybsze: XML i JSON? Kiedy stosować który?
Chcę wiedzieć, co jest szybsze: XML i JSON? Kiedy stosować który?
Odpowiedzi:
Przed odpowiedzią na pytanie, kiedy użyć którego, małe tło:
edycja: Powinienem wspomnieć, że to porównanie jest naprawdę z perspektywy użycia ich w przeglądarce z JavaScript. To nie jest droga albo Format danych ma być używany, i istnieje wiele dobrych parserami który zmieni dane, aby co nie mówię dość ważny.
JSON jest bardziej kompaktowy i (moim zdaniem) bardziej czytelny - w transmisji może być „szybszy” po prostu dlatego, że przesyłanych jest mniej danych.
Podczas analizowania zależy to od analizatora składni. Parser zmieniający kod (czy to JSON, czy XML) w strukturę danych (jak mapa) może skorzystać ze ścisłej natury XML ( schematy XML ładnie ujednolicają strukturę danych) - jednak w JSON typ elementu (String / Number / Nested JSON Object) można wywnioskować składniowo, np .:
myJSON = {"age" : 12,
"name" : "Danielle"}
Analizator składni nie musi być wystarczająco inteligentny, aby uświadomić sobie, że 12
reprezentuje liczbę (i Danielle
jest ciągiem jak każdy inny). W javascript możemy wykonać:
anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False
W XML musielibyśmy zrobić coś takiego:
<person>
<age>12</age>
<name>Danielle</name>
</person>
(na marginesie, ilustruje to fakt, że XML jest bardziej szczegółowy; dotyczy transmisji danych). Aby użyć tych danych, uruchomilibyśmy je przez analizator składni, a następnie musieliśmy wywołać coś takiego:
myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True
Właściwie dobry parser może napisać age
dla ciebie (z drugiej strony, możesz tego nie chcieć). Gdy uzyskujemy dostęp do tych danych, zamiast wyszukiwania atrybutów, jak w powyższym przykładzie JSON, sprawdzamy mapę klucza name
. Formowanie kodu XML może być bardziej intuicyjne:
<person name="Danielle" age="12" />
Ale nadal będziemy musieli wyszukiwać mapy, aby uzyskać dostęp do naszych danych:
myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");
EDYCJA: Oryginał:
W większości języków programowania (nie we wszystkich zakresach) wyszukiwanie mapy, takie jak to, będzie bardziej kosztowne niż wyszukiwanie atrybutów (jak wyżej, kiedy analizowaliśmy JSON).
Jest to mylące: pamiętaj, że w JavaScript (i innych dynamicznych językach) nie ma różnicy między wyszukiwaniem mapy a wyszukiwaniem pola. W rzeczywistości wyszukiwanie w polu jest tylko wyszukiwaniem mapy.
Jeśli chcesz naprawdę wartościowego porównania, najlepiej jest go przetestować - wykonaj testy porównawcze w kontekście, w którym planujesz wykorzystać dane.
Kiedy pisałem, Felix Kling udzielił już dość zwięzłej odpowiedzi, porównując je pod względem czasu użycia każdego z nich, więc nie będę iść dalej.
Szybszy nie jest atrybutem JSON lub XML, ani wynikiem, który dałoby porównanie między nimi. Jeśli tak, to jest to atrybut parserów lub przepustowości, z jaką przesyłane są dane.
Oto (początek) lista zalet i wad JSON i XML:
Zawodowiec:
Kon:
Prosta składnia, obsługiwana jest tylko garść różnych typów danych.
Brak wsparcia dla komentarzy.
Zawodowiec:
Kon:
Tak więc ostatecznie musisz zdecydować, czego potrzebujesz . Oczywiście oba formaty mają uzasadnione przypadki użycia. Jeśli najczęściej używasz JavaScript, powinieneś wybrać JSON.
Dodaj swoje zalety i wady. Nie jestem ekspertem od XML;)
id
unikalności atrybutu w dokumencie.
Szybkość przetwarzania może nie być jedyną istotną kwestią, ponieważ to jest pytanie, oto kilka liczb w teście porównawczym: JSON vs. XML: Niektóre twarde liczby o gadatliwości . Jeśli chodzi o szybkość, w tym prostym teście XML prezentuje narzut 21% w stosunku do JSON.
Ważna uwaga na temat gadatliwości, która jest, jak mówi artykuł, najczęstszym narzekaniem: nie jest to tak bardzo istotne w praktyce (ani dane XML, ani JSON nie są zazwyczaj obsługiwane przez ludzi, ale przez maszyny), nawet jeśli chodzi o Szybkość kompresji wymaga dłuższego czasu.
Ponadto w tym teście przetworzono dużą ilość danych, a typowa aplikacja internetowa nie przesyła fragmentów danych o takich rozmiarach, tak dużych jak 90 MB, a kompresja może nie być korzystna (w przypadku wystarczająco małych fragmentów danych fragment skompresowany będzie większy niż nieskompresowany fragment), więc nie dotyczy.
Mimo to, jeśli nie jest stosowana żadna kompresja, JSON, jako oczywiście szybszy, będzie ważył mniej w kanale transmisji, szczególnie jeśli jest przesyłany przez połączenie WebSocket, gdzie brak klasycznego narzutu HTTP może mieć znaczenie na korzyść JSON, a nawet więcej znaczący.
Po transmisji dane mają zostać zużyte, a to wlicza się do całkowitego czasu przetwarzania. Jeśli mają być przesłane wystarczająco duże lub wystarczająco złożone dane, brak schematu automatycznie sprawdzany przez sprawdzający parser XML, może wymagać większej kontroli danych JSON; kontrole te musiałyby zostać wykonane w JavaScript, który nie jest znany jako szczególnie szybki, dlatego w takich przypadkach może stanowić dodatkowe obciążenie XML.
W każdym razie tylko testy dostarczą odpowiedzi na konkretny przypadek użycia (jeśli prędkość jest tak naprawdę jedyną sprawą, a nie standard, ani bezpieczeństwo, ani integralność…).
Aktualizacja 1: warto wspomnieć, to EXI, binarny format XML, który oferuje kompresję przy niższych kosztach niż przy użyciu Gzip, i oszczędza przetwarzanie potrzebne w inny sposób do dekompresji skompresowanego XML. EXI to XML, a BSON to JSON. Krótki przegląd, z odniesieniem do wydajności zarówno w przestrzeni, jak i czasie: EXI: Ostatni standard binarny? .
Aktualizacja 2: istnieją również binarne raporty wydajności XML, przeprowadzane przez W3C, ponieważ wydajność i niskie zużycie pamięci i procesora są również kwestią obszaru XML: Wydajna ocena wymiany XML .
Warto zwrócić uwagę w tym kontekście, ponieważ problem HTTP został podniesiony jako problem: IANA zarejestrowała kodowanie EXI (wydajne binarne XML wspomniane powyżej), jako kodowanie treści dla protokołu HTTP (wraz z kompresją , deflacją i gzip ) . Oznacza to, że EXI jest opcją, którą można spodziewać się w przeglądarkach wśród innych klientów HTTP. Zobacz parametry protokołu przesyłania hipertekstu (iana.org) .
Uważam, że ten artykuł na cyfrowym bazarze jest naprawdę interesujący. Cytując swoje cytaty z Norm:
O profesjonalistach JSON:
Jeśli wszystko, co chcesz przekazać, to wartości atomowe, listy lub skróty wartości atomowych, JSON ma wiele zalet XML: jest łatwy w użyciu przez Internet, obsługuje wiele różnych aplikacji, łatwo pisać programy do przetwarzania JSON, ma kilka opcjonalnych funkcji, jest czytelny dla człowieka i dość przejrzysty, ma formalny i zwięzły wygląd, dokumenty JSON można łatwo tworzyć i używa Unicode. ...
Informacje o profesjonalistach XML:
XML radzi sobie wyjątkowo dobrze z pełnym bogactwem nieustrukturyzowanych danych. W ogóle nie martwię się o przyszłość XML, nawet jeśli jego śmierć radośnie obchodzi kadra projektantów internetowych interfejsów API.
I nie mogę się powstrzymać przed schowaniem „Mówiłem ci tak!” żeton na biurku. Nie mogę się doczekać, aby zobaczyć, co zrobią ludzie JSON, gdy zostaną poproszeni o opracowanie bogatszych interfejsów API. Czy chcąc wymieniać dane o mniejszej strukturze, czy zamieniają je w JSON? Od czasu do czasu widzę wzmianki o języku schematu dla JSON, czy pojawią się inne języki? ...
Osobiście zgadzam się z Normem. Myślę, że większość ataków na XML pochodzi od programistów sieci Web dla typowych aplikacji, a nie od programistów integracji. Ale to moja opinia! ;)
{ "foo": 42 }
Jakiego typu jest ten obiekt? Następnie, aby naprawić brak typu, takie rzeczy pojawiają się: { "__type": "Bar", "foo": 42 }
. W XML w rodzaju kontrastu można connotated nazwy elementu: <Bar><foo>42</foo></Bar>
. Tylko faceci seplenieni i javascript tacy jak json;)
XML (Extensible Markup Language) jest często używany XHR, ponieważ jest to standardowy język rozgłaszania, który może być używany przez dowolny język programowania i obsługiwany zarówno po stronie serwera, jak i klienta, więc jest to najbardziej elastyczne rozwiązanie. XML można oddzielić dla większej liczby części, aby określona grupa mogła opracować część programu bez wpływu na inne części. Format XML można również określić za pomocą XML DTD lub schematu XML (XSL) i można go przetestować.
JSON to format wymiany danych, który staje się coraz bardziej popularny jako możliwy format aplikacji JavaScript. Zasadniczo jest to tablica notacji obiektowych. JSON ma bardzo prostą składnię, dzięki czemu można go łatwo nauczyć. A także JavaScript obsługuje parsowanie JSON z eval
funkcją. Z drugiej strony eval
funkcja ma negatywy. Na przykład program może bardzo wolno analizować JSON, a ze względu na bezpieczeństwo eval
może być bardzo ryzykowny. To nie znaczy, że JSON nie jest dobry, po prostu musimy być bardziej ostrożni.
Sugeruję, aby używać JSON do aplikacji z lekką wymianą danych, takich jak gry. Ponieważ nie musisz tak naprawdę dbać o przetwarzanie danych, jest to bardzo proste i szybkie.
XML jest najlepszy dla większych witryn, na przykład witryn handlowych lub czegoś takiego. XML może być bardziej bezpieczny i przejrzysty. Możesz utworzyć podstawową strukturę danych i schemat, aby łatwo przetestować poprawkę i łatwo podzielić ją na części.
Sugeruję używanie XML ze względu na szybkość i bezpieczeństwo, ale JSON do lekkich rzeczy.
Ważną rzeczą w JSON jest szyfrowanie transferu danych ze względów bezpieczeństwa. Bez wątpienia JSON jest znacznie szybszy niż XML. Widziałem, jak XML zajmuje 100 ms, podczas gdy JSON zajmuje tylko 60 ms. Dane JSON są łatwe do manipulowania.