Saya ingin tahu mana yang lebih cepat: XML dan JSON? Kapan harus menggunakan yang mana?
Saya ingin tahu mana yang lebih cepat: XML dan JSON? Kapan harus menggunakan yang mana?
Jawaban:
Sebelum menjawab kapan harus menggunakan yang mana, sedikit latar belakang:
sunting: Saya harus menyebutkan bahwa perbandingan ini benar-benar dari sudut pandang menggunakannya di browser dengan JavaScript. Ini bukan cara format yang baik data memiliki yang akan digunakan, dan ada banyak parser yang baik yang akan mengubah rincian untuk membuat apa yang saya katakan tidak cukup valid.
JSON lebih kompak dan (dalam pandangan saya) lebih mudah dibaca - dalam transmisi bisa "lebih cepat" hanya karena lebih sedikit data yang ditransfer.
Dalam parsing, itu tergantung pada parser Anda. Seorang parser yang mengubah kode (baik itu JSON atau XML) menjadi struktur data (seperti peta) dapat mengambil manfaat dari sifat ketat XML ( Skema XML memisahkan struktur data dengan baik) - namun di JSON jenis item (String / Number / Nested JSON Object) dapat disimpulkan secara sintaksis, misalnya:
myJSON = {"age" : 12,
"name" : "Danielle"}
Pengurai tidak perlu cukup pintar untuk menyadari yang 12
mewakili angka, (dan Danielle
merupakan string seperti yang lainnya). Jadi dalam javascript kita bisa melakukan:
anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False
Dalam XML kita harus melakukan sesuatu seperti berikut:
<person>
<age>12</age>
<name>Danielle</name>
</person>
(sebagai tambahan, ini menggambarkan titik bahwa XML agak lebih bertele-tele; perhatian untuk transmisi data). Untuk menggunakan data ini, kami menjalankannya melalui parser, maka kami harus memanggil sesuatu seperti:
myObject = parseThatXMLPlease();
thePeople = myObject.getChildren("person");
thePerson = thePeople[0];
thePerson.getChildren("name")[0].value() == "Danielle" // True
thePerson.getChildren("age")[0].value() == "12" // True
Sebenarnya, parser yang baik mungkin mengetikkan age
untuk Anda (di sisi lain, Anda mungkin tidak menginginkannya). Apa yang terjadi ketika kita mengakses data ini - alih-alih melakukan pencarian atribut seperti pada contoh JSON di atas - kita sedang melakukan pencarian peta pada kunci name
. Mungkin lebih intuitif untuk membentuk XML seperti ini:
<person name="Danielle" age="12" />
Tetapi kami masih harus melakukan pencarian peta untuk mengakses data kami:
myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");
EDIT: Asli:
Di sebagian besar bahasa pemrograman (tidak semua, dengan rentang apa pun) pencarian peta seperti ini akan lebih mahal daripada pencarian atribut (seperti yang kami dapatkan di atas ketika kami mem-parsing JSON).
Ini menyesatkan: ingat bahwa dalam JavaScript (dan bahasa dinamis lainnya) tidak ada perbedaan antara pencarian peta dan pencarian bidang. Bahkan, lookup lapangan adalah hanya lookup peta.
Jika Anda ingin perbandingan yang benar-benar berharga, yang terbaik adalah membandingkannya - lakukan tolok ukur dalam konteks di mana Anda berencana untuk menggunakan data.
Saat saya mengetik, Felix Kling telah memberikan jawaban yang cukup ringkas membandingkan mereka dalam hal kapan harus menggunakan masing-masing, jadi saya tidak akan melangkah lebih jauh.
Lebih cepat bukanlah atribut JSON atau XML atau hasil yang perbandingannya akan menghasilkan. Jika ada, maka itu adalah atribut parser atau bandwidth yang digunakan untuk mengirimkan data.
Inilah (awal) daftar kelebihan dan kekurangan JSON dan XML:
Pro:
Menipu:
Sintaksis sederhana, hanya segelintir tipe data berbeda yang didukung.
Tidak ada dukungan untuk komentar.
Pro:
Menipu:
Jadi pada akhirnya Anda harus memutuskan apa yang Anda butuhkan . Jelas kedua format memiliki kasus penggunaan yang sah. Jika Anda sebagian besar akan menggunakan JavaScript maka Anda harus menggunakan JSON.
Silahkan menambahkan pro dan kontra. Saya bukan ahli XML;)
id
atribut menjadi unik di dalam dokumen.
Kecepatan pemrosesan mungkin bukan satu-satunya masalah yang relevan, namun, karena itulah pertanyaannya, berikut adalah beberapa angka dalam tolok ukur: JSON vs XML: Beberapa angka sulit tentang verbositas . Untuk kecepatan, dalam patokan sederhana ini, XML menghadirkan 21% overhead di atas JSON.
Catatan penting tentang verbositas, seperti yang dikatakan artikel tersebut, keluhan paling umum: ini tidak begitu relevan dalam praktiknya (baik data XML atau JSON biasanya ditangani oleh manusia, tetapi oleh mesin), bahkan jika untuk masalah kecepatan, itu memerlukan beberapa waktu lebih masuk akal untuk kompres.
Juga, dalam patokan ini, sejumlah besar data diproses, dan aplikasi web tipikal tidak akan mengirimkan potongan data dengan ukuran seperti itu, sebesar 90MB, dan kompresi mungkin tidak menguntungkan (untuk potongan data yang cukup kecil, potongan terkompresi akan lebih besar dari potongan yang tidak terkompresi), jadi tidak berlaku.
Namun, jika tidak ada kompresi yang terlibat, JSON, seperti yang jelas terser, akan lebih sedikit lebih berat di saluran transmisi, terutama jika ditransmisikan melalui koneksi WebSocket, di mana tidak adanya overhead HTTP klasik dapat membuat perbedaan pada keuntungan JSON, bahkan lebih penting.
Setelah transmisi, data akan dikonsumsi, dan ini dihitung dalam waktu pemrosesan keseluruhan. Jika data yang cukup besar atau kompleks untuk ditransmisikan, kurangnya skema yang secara otomatis diperiksa oleh pengurai XML yang valid, mungkin memerlukan pemeriksaan lebih lanjut pada data JSON; pemeriksaan ini harus dieksekusi dalam JavaScript, yang tidak diketahui cepat, dan karenanya dapat menghadirkan overhead tambahan atas XML dalam kasus-kasus seperti itu.
Bagaimanapun, hanya pengujian yang akan memberikan jawaban untuk kasus penggunaan khusus Anda (jika kecepatan adalah satu-satunya masalah, dan bukan standar atau keamanan atau integritas ...).
Pembaruan 1: layak untuk disebutkan, adalah EXI, format XML biner, yang menawarkan kompresi dengan biaya lebih murah daripada menggunakan Gzip, dan menghemat pemrosesan yang diperlukan untuk mendekompresi XML terkompresi. EXI adalah untuk XML, apa itu BSON untuk JSON. Punya tinjauan singkat di sini, dengan beberapa referensi efisiensi di ruang dan waktu: EXI: Standar biner terakhir? .
Pembaruan 2: terdapat juga laporan kinerja XML biner, yang dilakukan oleh W3C, karena efisiensi dan memori yang rendah dan jejak CPU, juga merupakan masalah untuk area XML juga: Evaluasi Interchange XML yang Efisien .
Layak untuk diperhatikan dalam konteks ini, karena overhead HTTP dimunculkan sebagai masalah: IANA telah mendaftarkan pengkodean EXI (XML biner efisien yang disebutkan di atas), sebagai Coding Konten untuk protokol HTTP (bersama dengan kompres , deflate , dan gzip ) . Ini berarti EXI adalah opsi yang diharapkan dapat dipahami oleh browser di antara klien HTTP lain yang mungkin. Lihat Parameter Protokol Transfer Hiperteks (iana.org) .
Saya menemukan artikel ini di pasar digital sangat menarik. Mengutip kutipan mereka dari Norm:
Tentang pro JSON:
Jika semua yang Anda ingin sampaikan adalah nilai atom atau daftar atau hash nilai atom, JSON memiliki banyak keunggulan XML: itu dapat digunakan langsung melalui Internet, mendukung berbagai aplikasi, mudah untuk menulis program untuk memproses JSON, ia memiliki beberapa fitur opsional, mudah dibaca oleh manusia dan cukup jelas, desainnya formal dan ringkas, dokumen JSON mudah dibuat, dan menggunakan Unicode. ...
Tentang pro XML:
Penawaran XML sangat baik dengan kekayaan penuh data tidak terstruktur. Saya tidak khawatir tentang masa depan XML sama sekali bahkan jika kematiannya dirayakan dengan gembira oleh kader desainer web API.
Dan aku tidak bisa menahan diri untuk tidak mengatakan, "Sudah kubilang!" token di meja saya. Saya berharap dapat melihat apa yang dilakukan orang-orang JSON ketika mereka diminta untuk mengembangkan API yang lebih kaya. Ketika mereka ingin bertukar data yang kurang terstruktur, apakah mereka akan memilihnya ke JSON? Saya melihat sesekali menyebutkan bahasa skema untuk JSON, akankah bahasa lain mengikuti? ...
Saya pribadi setuju dengan Norm. Saya pikir sebagian besar serangan ke XML berasal dari Pengembang Web untuk aplikasi tipikal, dan bukan dari pengembang integrasi. Tapi itu menurut saya! ;)
{ "foo": 42 }
Jenis apa objek itu? Kemudian, untuk memperbaiki kekurangan dari jenis, hal-hal seperti ini menunjukkan up: { "__type": "Bar", "foo": 42 }
. Dalam XML dalam jenis kontras dapat connotated untuk nama elemen: <Bar><foo>42</foo></Bar>
. Hanya orang-orang yang suka dan javascript seperti json;)
XML (Extensible Markup Language) sering digunakan XHR karena ini adalah bahasa penyiaran standar, apa yang dapat digunakan oleh bahasa pemrograman apa pun, dan didukung oleh sisi server dan klien, jadi ini adalah solusi yang paling fleksibel. XML dapat dipisahkan untuk lebih banyak bagian sehingga grup tertentu dapat mengembangkan bagian dari program, tanpa mempengaruhi bagian lainnya. Format XML juga dapat ditentukan oleh XML DTD atau XML Schema (XSL) dan dapat diuji.
JSON adalah format pertukaran data yang semakin populer sebagai format aplikasi JavaScript. Pada dasarnya ini adalah array notasi objek. JSON memiliki sintaks yang sangat sederhana sehingga dapat dipelajari dengan mudah. Dan juga dukungan JavaScript parsing JSON dengan eval
fungsi. Di sisi lain, eval
fungsi tersebut mendapat negatif. Sebagai contoh, program JSON dapat menjadi sangat lambat dan karena keamanannya eval
bisa sangat berisiko. Ini tidak berarti bahwa JSON tidak baik, hanya saja kita harus lebih berhati-hati.
Saran saya adalah Anda harus menggunakan JSON untuk aplikasi dengan pertukaran data ringan, seperti game. Karena Anda tidak harus benar-benar peduli dengan pemrosesan data, ini sangat sederhana dan cepat.
XML adalah yang terbaik untuk situs web yang lebih besar, misalnya situs belanja atau sesuatu seperti ini. XML bisa lebih aman dan jelas. Anda dapat membuat data-struct dan skema dasar untuk dengan mudah menguji koreksi dan memisahkannya menjadi beberapa bagian dengan mudah.
Saya sarankan Anda menggunakan XML karena kecepatan dan keamanan, tetapi JSON untuk hal-hal ringan.
Hal penting tentang JSON adalah menjaga agar data transfer tetap terenkripsi untuk alasan keamanan. Tidak diragukan bahwa JSON jauh lebih cepat daripada XML. Saya telah melihat XML mengambil 100 ms dimana JSON hanya mengambil 60 ms. Data JSON mudah dimanipulasi.