ฉันต้องการทราบว่าเร็วกว่าไหน: XML และ JSON ควรใช้อันไหนดี?
ฉันต้องการทราบว่าเร็วกว่าไหน: XML และ JSON ควรใช้อันไหนดี?
คำตอบ:
ก่อนที่จะตอบเมื่อจะใช้อันใดพื้นหลังเล็กน้อย:
แก้ไข: ฉันควรพูดถึงว่าการเปรียบเทียบนี้มาจากมุมมองของการใช้งานจริงในเบราว์เซอร์ที่มี JavaScript มันไม่ได้เป็นวิธีการที่ทั้งสองรูปแบบข้อมูลที่มีที่จะใช้และมีความอุดมสมบูรณ์ของ parsers ดีซึ่งจะเปลี่ยนแปลงรายละเอียดที่จะทำให้สิ่งที่ฉันพูดไม่ถูกต้องค่อนข้าง
JSON มีทั้งขนาดกะทัดรัดและ (ในมุมมองของฉัน) อ่านได้ง่ายขึ้น - ในการส่งข้อมูลอาจ "เร็วขึ้น" เพียงเพราะถ่ายโอนข้อมูลน้อยลง
ในการแยกวิเคราะห์มันขึ้นอยู่กับโปรแกรมแยกวิเคราะห์ของคุณ โปรแกรมแยกวิเคราะห์เปลี่ยนรหัส (ไม่ว่าจะเป็น JSON หรือ XML) เป็นโครงสร้างข้อมูล (เช่นแผนที่) อาจได้รับประโยชน์จากลักษณะที่เข้มงวดของ XML ( XML Schemasทำให้โครงสร้างข้อมูลเป็นไปอย่างชัดเจน) - ใน JSON ประเภทของรายการ (String / หมายเลข / วัตถุ JSON ที่ซ้อนกัน) สามารถอนุมานได้ทางไวยากรณ์เช่น:
myJSON = {"age" : 12,
"name" : "Danielle"}
โปรแกรมแยกวิเคราะห์ไม่จำเป็นต้องฉลาดพอที่จะรู้ว่า12
ตัวเลขนั้นเป็นตัวเลข (และDanielle
เป็นสตริงเหมือนกัน) ดังนั้นในจาวาสคริปต์เราสามารถทำ:
anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False
ใน XML เราต้องทำสิ่งต่อไปนี้:
<person>
<age>12</age>
<name>Danielle</name>
</person>
(นอกเหนือจากนี้สิ่งนี้แสดงให้เห็นว่า XML ค่อนข้างละเอียดมากขึ้นเป็นข้อกังวลสำหรับการส่งข้อมูล) หากต้องการใช้ข้อมูลนี้เราจะเรียกใช้ผ่านตัวแยกวิเคราะห์จากนั้นเราจะต้องเรียกสิ่งต่อไปนี้:
myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True
อันที่จริงโปรแกรมแยกวิเคราะห์ที่ดีอาจพิมพ์ข้อความage
ให้คุณ (ในทางกลับกันคุณอาจไม่ต้องการ) สิ่งที่เกิดขึ้นเมื่อเราเข้าถึงข้อมูลนี้เป็น - แทนทำค้นหาแอตทริบิวต์เช่นในตัวอย่างข้างต้น JSON - name
เรากำลังทำค้นหาแผนที่ในกุญแจสำคัญ มันอาจง่ายกว่าที่จะสร้าง XML แบบนี้:
<person name="Danielle" age="12" />
แต่เรายังคงต้องทำการค้นหาแผนที่เพื่อเข้าถึงข้อมูลของเรา:
myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");
แก้ไข: ต้นฉบับ:
ในภาษาการเขียนโปรแกรมส่วนใหญ่ (ไม่ จำกัด ทุกอย่าง) การค้นหาแผนที่เช่นนี้จะมีค่าใช้จ่ายสูงกว่าการค้นหาแอททริบิวต์
สิ่งนี้ทำให้เข้าใจผิด: โปรดจำไว้ว่าใน JavaScript (และภาษาไดนามิกอื่น ๆ ) ไม่มีความแตกต่างระหว่างการค้นหาแผนที่และการค้นหาฟิลด์ อันที่จริงแล้วการค้นหาฟิลด์เป็นเพียงการค้นหาแผนที่
หากคุณต้องการการเปรียบเทียบที่คุ้มค่าจริง ๆ สิ่งที่ดีที่สุดคือการทำมาตรฐาน - ทำเกณฑ์มาตรฐานในบริบทที่คุณวางแผนที่จะใช้ข้อมูล
ขณะที่ฉันกำลังพิมพ์อยู่เฟลิกซ์คลิงได้รวบรวมคำตอบที่กระชับพอสมควรแล้วเปรียบเทียบกับพวกเขาในแง่ของเวลาที่จะใช้แต่ละคนดังนั้นฉันจะไม่ไปต่อไปอีก
Fasterไม่ใช่แอตทริบิวต์ของ JSON หรือ XML หรือผลลัพธ์ที่การเปรียบเทียบระหว่างผลลัพธ์นั้นจะเกิดขึ้น ถ้ามีก็เป็นคุณสมบัติของ parsers หรือแบนด์วิดธ์ที่คุณส่งข้อมูล
นี่คือ (จุดเริ่มต้น) รายการของข้อดีและข้อเสียของ JSON และ XML:
มือโปร:
Con:
ไวยากรณ์อย่างง่ายสนับสนุนเพียงหนึ่งประเภทข้อมูลที่แตกต่างกัน
ไม่รองรับความคิดเห็น
มือโปร:
Con:
ดังนั้นในที่สุดคุณต้องตัดสินใจว่าคุณต้องการอะไร เห็นได้ชัดว่าทั้งสองรูปแบบมีกรณีการใช้งานที่ถูกกฎหมาย หากคุณใช้ JavaScript เป็นส่วนใหญ่คุณควรใช้ JSON
โปรดเพิ่มข้อดีและข้อเสีย ฉันไม่ใช่ผู้เชี่ยวชาญ XML;)
id
แอตทริบิวต์นั้นไม่ซ้ำกันภายในเอกสาร
ความเร็วในการประมวลไม่อาจจะเป็นเรื่องที่เกี่ยวข้องเท่านั้น แต่เป็นว่าเป็นคำถามที่นี่มีตัวเลขบางในเกณฑ์มาตรฐาน: JSON กับ XML: บางตัวเลขอย่างหนักเกี่ยวกับฟุ่มเฟื่อย สำหรับความเร็วในเกณฑ์มาตรฐานอย่างง่ายนี้ XML จะแสดงโอเวอร์เฮดของ JSON 21%
หมายเหตุสำคัญเกี่ยวกับความละเอียดซึ่งเป็นบทความกล่าวว่าบ่นที่พบบ่อยที่สุด: นี้ไม่เกี่ยวข้องมากในทางปฏิบัติ (ไม่ XML หรือ JSON ข้อมูลโดยทั่วไปจะมีการจัดการโดยมนุษย์ แต่โดยเครื่อง) แม้ว่าสำหรับเรื่องของ ความเร็วมันต้องใช้เวลามากพอสมควรในการบีบอัด
นอกจากนี้ในเกณฑ์มาตรฐานนี้มีการประมวลผลข้อมูลจำนวนมากและเว็บแอปพลิเคชันทั่วไปจะไม่ส่งชิ้นข้อมูลขนาดใหญ่เท่า 90MB และการบีบอัดอาจไม่เป็นประโยชน์ (สำหรับชิ้นข้อมูลที่มีขนาดเล็กเพียงพอชิ้นส่วนที่บีบอัด จะใหญ่กว่าก้อนที่ไม่บีบอัด) ดังนั้นจึงไม่สามารถใช้งานได้
อย่างไรก็ตามหากไม่มีการบีบอัดที่เกี่ยวข้อง JSON จะเห็นได้ชัดว่าจะมีน้ำหนักน้อยกว่าช่องสัญญาณส่งโดยเฉพาะถ้าส่งผ่านการเชื่อมต่อ WebSocket โดยที่การไม่มีค่าใช้จ่าย HTTP แบบดั้งเดิมอาจสร้างความแตกต่างให้กับ JSON มากยิ่งขึ้น สำคัญ
หลังจากการส่งข้อมูลจะต้องมีการใช้และนับนี้ในเวลาการประมวลผลโดยรวม หากมีการส่งข้อมูลขนาดใหญ่หรือซับซ้อนเพียงพอการตรวจสอบตัวตรวจสอบ XML ตัวตรวจสอบความถูกต้องของตัวตรวจสอบ XML โดยอัตโนมัติอาจต้องตรวจสอบเพิ่มเติมเกี่ยวกับข้อมูล JSON การตรวจสอบเหล่านี้จะต้องดำเนินการใน JavaScript ซึ่งไม่ทราบว่ารวดเร็วโดยเฉพาะและดังนั้นจึงอาจแสดงโอเวอร์เฮดเพิ่มเติมผ่าน XML ในกรณีดังกล่าว
อย่างไรก็ตามการทดสอบเท่านั้นที่จะให้คำตอบสำหรับกรณีการใช้งานของคุณโดยเฉพาะ (ถ้าความเร็วเป็นเรื่องจริงเท่านั้นไม่ใช่มาตรฐานหรือความปลอดภัยหรือความสมบูรณ์ ... )
อัปเดต 1: ควรกล่าวถึงคือ EXI ซึ่งเป็นรูปแบบไบนารี XML ซึ่งมีการบีบอัดที่ต้นทุนต่ำกว่าการใช้ Gzip และบันทึกการประมวลผลที่จำเป็นในการคลายบีบอัด XML EXI คือ XML สิ่งที่ BSON คือ JSON มีภาพรวมอย่างรวดเร็วที่นี่มีการอ้างอิงถึงประสิทธิภาพในพื้นที่และเวลา: EXI: มาตรฐานไบนารีสุดท้ายหรือไม่ .
การปรับปรุงที่ 2: นอกจากนั้นยังมีรายงานการปฏิบัติงาน XML ไบนารีดำเนินการโดย W3C ในขณะที่ประสิทธิภาพและหน่วยความจำต่ำและการปล่อยก๊าซ CPU ยังเป็นเรื่องของพื้นที่ XML ที่มากเกินไป: มีประสิทธิภาพ XML แลกประเมินผล
คุ้มค่าที่จะสังเกตเห็นในบริบทนี้เช่น HTTP ค่าใช้จ่ายถูกยกขึ้นเป็นปัญหาที่: IANA ได้จดทะเบียนการเข้ารหัส EXI นี้ (XML ไบนารีที่มีประสิทธิภาพดังกล่าวข้างต้น) เช่น AA เนื้อหาการเข้ารหัสสำหรับโปรโตคอล HTTP (ใกล้กับการบีบอัด , ยุบและgzip ) . ซึ่งหมายความว่า EXI เป็นตัวเลือกที่คาดว่าเบราว์เซอร์สามารถเข้าใจได้ในไคลเอนต์ HTTP อื่น ๆ ดูHypertext Transfer Protocol พารามิเตอร์ (iana.org)
ฉันพบบทความนี้ที่ตลาดสดดิจิตอลน่าสนใจจริงๆ การอ้างอิงข้อความของพวกเขาจากบรรทัดฐาน:
เกี่ยวกับข้อดีของ JSON:
หากสิ่งที่คุณต้องการผ่านคือค่าอะตอมมิกหรือรายการหรือแฮชของค่าอะตอมมิน JSON มีข้อดีหลายอย่างของ XML: มันสามารถใช้งานได้อย่างตรงไปตรงมาบนอินเทอร์เน็ตรองรับแอพพลิเคชั่นที่หลากหลาย มันมีคุณสมบัติเสริมบางอย่างมันเป็นมนุษย์ที่ชัดเจนและสมเหตุสมผลการออกแบบมันเป็นทางการและรัดกุมเอกสาร JSON นั้นง่ายต่อการสร้างและใช้ Unicode ...
เกี่ยวกับข้อดี XML:
XML จัดการได้ดีอย่างน่าทึ่งด้วยความสมบูรณ์ของข้อมูลที่ไม่มีโครงสร้าง ฉันไม่กังวลเกี่ยวกับอนาคตของ XML เลยแม้ว่าการตายของมันจะได้รับการเฉลิมฉลองอย่างสนุกสนานจากกลุ่มนักออกแบบเว็บ API
และฉันไม่สามารถต้านทานการเหน็บ "ฉันบอกคุณแล้ว!" โทเค็นในโต๊ะของฉัน ฉันหวังว่าจะเห็นสิ่งที่คน JSON ทำเมื่อพวกเขาถูกขอให้พัฒนา API ยิ่งขึ้น เมื่อพวกเขาต้องการแลกเปลี่ยนข้อมูลที่มีโครงสร้างน้อยกว่าพวกเขาจะใช้มันเป็น JSON หรือไม่ ฉันเห็นการพูดถึงสคีมาเป็นครั้งคราวสำหรับ JSON ภาษาอื่น ๆ จะตามมาหรือไม่ ...
ฉันเห็นด้วยกับนอร์ม ฉันคิดว่าการโจมตี XML ส่วนใหญ่มาจากนักพัฒนาเว็บสำหรับแอปพลิเคชันทั่วไปไม่ใช่จากนักพัฒนาการรวมระบบจริงๆ แต่นั่นเป็นความคิดเห็นของฉัน! ;)
{ "foo": 42 }
วัตถุประเภทใด { "__type": "Bar", "foo": 42 }
จากนั้นในการแก้ไขปัญหาการขาดชนิดต่างๆเช่นการแสดงนี้ขึ้น: ในรูปแบบ XML ในรูปแบบความคมชัดสามารถ connotated <Bar><foo>42</foo></Bar>
ไปที่ชื่อธาตุ: เฉพาะ lisp และ javascript เท่านั้นเช่น json;)
XML (Extensible Markup Language) มักจะใช้ XHR เพราะนี่เป็นภาษาออกอากาศมาตรฐานสิ่งที่สามารถใช้กับภาษาการเขียนโปรแกรมใดก็ได้และสนับสนุนทั้งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์ดังนั้นนี่จึงเป็นโซลูชันที่ยืดหยุ่นที่สุด XML สามารถแยกส่วนเพิ่มเติมเพื่อให้กลุ่มที่ระบุสามารถพัฒนาส่วนของโปรแกรมโดยไม่ส่งผลกระทบต่อส่วนอื่น ๆ รูปแบบ XML สามารถกำหนดได้โดย XML DTD หรือ XML Schema (XSL) และสามารถทดสอบได้
รูปแบบการแลกเปลี่ยนข้อมูล JSON ซึ่งกำลังได้รับความนิยมมากขึ้นเนื่องจากรูปแบบแอปพลิเคชัน JavaScript ที่เป็นไปได้ โดยทั่วไปนี่เป็นอาร์เรย์ของวัตถุ JSON มีไวยากรณ์ที่ง่ายมากเพื่อให้สามารถเรียนรู้ได้ง่าย และยังรองรับ JavaScript ที่แยกวิเคราะห์ JSON ด้วยeval
ฟังก์ชั่น ในทางกลับกันeval
ฟังก์ชั่นได้รับเชิงลบ ตัวอย่างเช่นโปรแกรมสามารถแยกวิเคราะห์ JSON ช้ามากและเนื่องจากความปลอดภัยโปรแกรมeval
อาจมีความเสี่ยงมาก นี่ไม่ได้หมายความว่า JSON ไม่ดีแค่เราต้องระวังให้มากขึ้น
คำแนะนำของฉันคือคุณควรใช้ JSON สำหรับแอปพลิเคชันที่มีการแลกเปลี่ยนข้อมูลแบบเบาเช่นเกม เนื่องจากคุณไม่ต้องกังวลกับการประมวลผลข้อมูลจึงง่ายและรวดเร็วมาก
XML เหมาะที่สุดสำหรับเว็บไซต์ขนาดใหญ่เช่นเว็บไซต์ช็อปปิ้งหรืออะไรทำนองนี้ XML นั้นมีความปลอดภัยและชัดเจนยิ่งขึ้น คุณสามารถสร้าง data-struct พื้นฐานและ schema เพื่อทดสอบการแก้ไขและแยกออกเป็นส่วน ๆ ได้อย่างง่ายดาย
ฉันแนะนำให้คุณใช้ XML เพราะความเร็วและความปลอดภัย แต่ JSON สำหรับสิ่งที่มีน้ำหนักเบา
สิ่งสำคัญเกี่ยวกับ JSON คือการเข้ารหัสการถ่ายโอนข้อมูลด้วยเหตุผลด้านความปลอดภัย ไม่ต้องสงสัยเลยว่า JSON นั้นเร็วกว่า XML มากเพียงใด ฉันเห็นว่า XML ใช้เวลา 100 มิลลิวินาทีโดยที่ JSON ใช้เวลาเพียง 60 มิลลิวินาทีเท่านั้น ข้อมูล JSON นั้นง่ายต่อการจัดการ