আমি জানতে চাই কোনটি দ্রুত: এক্সএমএল এবং জেএসএন? কোনটি ব্যবহার করবেন?
আমি জানতে চাই কোনটি দ্রুত: এক্সএমএল এবং জেএসএন? কোনটি ব্যবহার করবেন?
উত্তর:
কোনটি কখন ব্যবহার করবেন তার উত্তর দেওয়ার আগে, একটি সামান্য পটভূমি:
সম্পাদনা: আমার উল্লেখ করা উচিত যে এই তুলনাটি জাভাস্ক্রিপ্ট সহ ব্রাউজারে সেগুলি ব্যবহার করার দৃষ্টিকোণ থেকে। এটা তোলে পথ পারেন ডেটা বিন্যাস নয় গেছে ব্যবহার করা, এবং ভাল পারজার যা কি আমি বেশ বৈধ বলছি করতে বিশদ বিবরণ পরিবর্তন হবে প্রচুর আছে।
জেএসএন আরও কমপ্যাক্ট এবং (আমার দৃষ্টিতে) আরও পঠনযোগ্য - সংক্রমণে এটি "দ্রুত" হতে পারে কেবলমাত্র কম ডেটা স্থানান্তরিত হওয়ার কারণে।
পার্সিংয়ের ক্ষেত্রে এটি আপনার পার্সারের উপর নির্ভর করে। কোডটি (এটি জেএসএন বা এক্সএমএল) একটি ডেটা স্ট্রাকচারে রূপান্তরকারী (মানচিত্রের মতো) XML এর কঠোর প্রকৃতি থেকে উপকৃত হতে পারে ( এক্সএমএল স্কিমাস তথ্যের কাঠামোটি সুন্দরভাবে বিচ্ছিন্ন করে ) - তবে JSON এ কোনও আইটেমের ধরণ (স্ট্রিং / সংখ্যা / নেস্টেড জেএসএন অবজেক্ট) সিন্টেক্সিকভাবে অনুমান করা যায়, যেমন:
myJSON = {"age" : 12,
"name" : "Danielle"}
12
সংখ্যাকে প্রতিনিধিত্ব করে এমনটি বুঝতে পার্সারের পক্ষে যথেষ্ট বুদ্ধিমান হওয়ার প্রয়োজন নেই (এবং Danielle
এটি অন্যগুলির মতো স্ট্রিং)। সুতরাং জাভাস্ক্রিপ্ট আমরা করতে পারেন:
anObject = JSON.parse(myJSON);
anObject.age === 12 // True
anObject.name == "Danielle" // True
anObject.age === "12" // False
এক্সএমএলে আমাদের নীচের মতো কিছু করতে হবে:
<person>
<age>12</age>
<name>Danielle</name>
</person>
(একদিকে যেমন এটি বিন্দুটি ব্যাখ্যা করে যে এক্সএমএল বরং আরও ভার্বোস; ডেটা সংক্রমণের জন্য উদ্বেগ)। এই ডেটাটি ব্যবহার করতে, আমরা এটি একটি পার্সারের মাধ্যমে চালাতে চাই, তারপরে আমাদের এমন কিছু কল করতে হবে:
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
। এটির মতো এক্সএমএল গঠন করা আরও স্বজ্ঞাত হতে পারে:
<person name="Danielle" age="12" />
তবে আমাদের ডেটা অ্যাক্সেস করতে আমাদের এখনও মানচিত্রের অনুসন্ধান করতে হবে:
myObject = parseThatXMLPlease();
age = myObject.getChildren("person")[0].getAttr("age");
সম্পাদনা: মূল:
বেশিরভাগ প্রোগ্রামিং ভাষায় (সমস্তই, কোনও প্রসারিত নয়) এগুলির মতো মানচিত্রের অনুসন্ধানটি কোনও অ্যাট্রিবিউট লুক্কুলের চেয়ে বেশি ব্যয়বহুল হবে (যেমন আমরা JSON পার্স করার সময় উপরে পেয়েছি)।
এটি বিভ্রান্তিকর: মনে রাখবেন যে জাভাস্ক্রিপ্টে (এবং অন্যান্য গতিশীল ভাষাগুলি) মানচিত্রের অনুসন্ধান এবং ক্ষেত্র অনুসন্ধানের মধ্যে কোনও পার্থক্য নেই । আসলে, একটি ক্ষেত্র লুকআপ হয় মাত্র একটি মানচিত্র অনুসন্ধান।
আপনি যদি সত্যিই সার্থক তুলনা করতে চান তবে সেরাটি হ'ল বেঞ্চমার্ক করা - যেখানে আপনি ডেটা ব্যবহার করার পরিকল্পনা করছেন সেই প্রসঙ্গে মাপদণ্ডটি করুন।
আমি টাইপ করার সময়, ফেলিক্স ক্লিং ইতিমধ্যে তাদের প্রত্যেকের কখন ব্যবহার করবেন সে ক্ষেত্রে তাদের তুলনা করার জন্য একটি মোটামুটি উত্তরোত্তর উত্তর রেখেছেন, সুতরাং আমি আর কোনও কাজ করব না।
দ্রুত জেএসএন বা এক্সএমএলের কোনও বৈশিষ্ট্য নয় বা এর ফলস্বরূপ যেগুলির মধ্যে একটি তুলনা পাওয়া যায়। যদি কোনও হয়, তবে এটি পার্সার বা ব্যান্ডউইথের একটি বৈশিষ্ট্য যা আপনি ডেটা প্রেরণ করেন।
এখানে JSON এবং XML এর সুবিধাগুলি এবং অসুবিধাগুলির একটি তালিকা রয়েছে (এর শুরু):
প্রো:
কন:
সরল বাক্য গঠন, কেবলমাত্র কয়েকটি মুষ্টিমেয় বিভিন্ন ধরণের ডেটা সমর্থিত।
মন্তব্যের জন্য কোনও সমর্থন নেই।
প্রো:
কন:
সুতরাং শেষ পর্যন্ত আপনাকে কী প্রয়োজন তা সিদ্ধান্ত নিতে হবে । স্পষ্টতই উভয় ফর্ম্যাটে তাদের বৈধ ব্যবহারের কেস রয়েছে। আপনি যদি বেশিরভাগ জাভাস্ক্রিপ্ট ব্যবহার করতে যাচ্ছেন তবে আপনার JSON এর সাথে যাওয়া উচিত।
ভাল এবং কনস যোগ করতে নির্দ্বিধায় দয়া করে। আমি এক্সএমএল বিশেষজ্ঞ নই;)
id
ডকুমেন্টের মধ্যে বৈশিষ্ট্যটি অনন্য হতে বাধ্য করে এটি করে।
প্রক্রিয়াজাতকরণের গতি কেবল প্রাসঙ্গিক বিষয় নাও হতে পারে, যদিও এটিই প্রশ্ন, এখানে একটি মানদণ্ডে কয়েকটি নম্বর রয়েছে: জেএসএন বনাম এক্সএমএল: ভার্বোসিটি সম্পর্কে কিছু হার্ড সংখ্যা । গতির পক্ষে, এই সাধারণ বেঞ্চমার্কে, এক্সএমএল জেএসএনের উপর 21% ওভারহেড উপস্থাপন করে।
ভার্বোসটি সম্পর্কে একটি গুরুত্বপূর্ণ নোট, যা নিবন্ধটি বলেছে, সর্বাধিক সাধারণ অভিযোগ: এটি বাস্তবে এতটা প্রাসঙ্গিক নয় (এক্সএমএল বা জেএসওএন ডেটা সাধারণত মানুষ দ্বারা পরিচালিত হয় না, তবে মেশিনগুলির দ্বারাও হয়), এমনকি যদি বিষয়টি বিবেচনা করে তবে গতি, সংকোচনের জন্য এটি কিছু যুক্তিসঙ্গত আরও সময় প্রয়োজন।
এছাড়াও, এই বেঞ্চমার্কে, প্রচুর পরিমাণে ডেটা প্রক্রিয়া করা হয়েছিল এবং একটি সাধারণ ওয়েব অ্যাপ্লিকেশন 90MB এর মতো আকারের ডেটা অংশগুলি প্রেরণ করে না এবং সংকোচনের পক্ষে উপকারী হতে পারে না (ছোট পর্যাপ্ত ডেটা অংশগুলির জন্য, একটি সংকীর্ণ অংশ সঙ্কুচিত অংশের চেয়ে বড় হবে), তাই প্রযোজ্য নয়।
তবুও, যদি কোনও সংকোচনের সাথে জড়িত না হয়, জেএসওএন, স্পষ্টতই টর্সারের মাধ্যমে সংক্রমণ চ্যানেলের উপর ওজন কম হবে, বিশেষত যদি ওয়েবস্কট সংযোগের মাধ্যমে প্রেরণ করা হয়, যেখানে ক্লাসিক এইচটিটিপি ওভারহেডের অনুপস্থিতি জেএসএনের সুবিধা নিয়ে পার্থক্য তৈরি করতে পারে, আরও বেশি উল্লেখযোগ্য।
সংক্রমণ হওয়ার পরে, ডেটা গ্রাস করতে হবে এবং সামগ্রিক প্রক্রিয়াজাতকরণের সময় এই গণনা। যদি বড় বা জটিল পর্যাপ্ত ডেটা প্রেরণ করতে হয় তবে কোনও বৈধ এক্সএমএল পার্সার দ্বারা স্বয়ংক্রিয়ভাবে চেক করা স্কিমার অভাবের জন্য জেএসএন ডেটাতে আরও চেকের প্রয়োজন হতে পারে; এই চেকগুলি জাভাস্ক্রিপ্টে সম্পাদন করতে হবে, যা বিশেষভাবে দ্রুত বলে জানা যায় না, এবং তাই এটি এক্সএমএলের উপরে এই ধরনের ক্ষেত্রে অতিরিক্ত ওভারহেড উপস্থাপন করতে পারে।
যাইহোক, কেবলমাত্র পরীক্ষা আপনার নির্দিষ্ট ব্যবহারের উত্তর সরবরাহ করবে ‑ কেস (যদি গতি সত্যিই একমাত্র বিষয়, এবং মান না সুরক্ষা বা সততা নয় ...)।
আপডেট 1: উল্লেখ্যযোগ্য, এক্সআই, বাইনারি এক্সএমএল ফর্ম্যাট, যা জিজিপ ব্যবহারের চেয়ে কম খরচে সংক্ষেপণ সরবরাহ করে এবং প্রসেসিং সংরক্ষণ করে অন্যথায় সংকুচিত এক্সএমএলকে সঙ্কুচিত করার জন্য প্রয়োজনীয়। এক্সআইএমএসের কাছে এক্সআই, জেএসনকে বিএসএন কী। স্থান এবং সময় উভয়ই দক্ষতার কিছু রেফারেন্স সহ এখানে একটি দ্রুত পর্যালোচনা করুন: এক্সআই: সর্বশেষ বাইনারি মান? ।
আপডেট 2: ডাব্লু 3 সি দ্বারা পরিচালিত বাইনারি এক্সএমএল পারফরম্যান্স রিপোর্টগুলিও রয়েছে, দক্ষতা এবং কম মেমরি এবং সিপিইউ পদচিহ্ন হিসাবে এটি এক্সএমএল অঞ্চলের জন্যও একটি বিষয়: দক্ষ এক্সএমএল ইন্টারচেঞ্জ মূল্যায়ন ।
এই প্রসঙ্গে লক্ষ্য করার মতো বিষয়, এইচটিটিপি ওভারহেড একটি ইস্যু হিসাবে উত্থাপিত হয়েছিল: আইএএনএ এইচটিটিপি প্রোটোকলের ( সংক্ষেপণ , ডিফ্লেট এবং জিজিপ সহ ) কনটেন্ট কোডিং হিসাবে এক্সআই এনকোডিং (উপরে উল্লিখিত দক্ষ বাইনারি এক্সএমএল) নিবন্ধ করেছে has । এর অর্থ হল এক্সআই একটি বিকল্প যা সম্ভবত অন্যান্য এইচটিটিপি ক্লায়েন্টগুলির মধ্যে ব্রাউজারগুলির দ্বারা বোঝার আশা করা যায়। দেখুন হাইপারটেক্সট ট্রান্সফার প্রোটোকল মাপদণ্ডগুলি (iana.org) ।
আমি এই নিবন্ধটি ডিজিটাল বাজারে পেয়েছি সত্যিই আকর্ষণীয়। নর্ম থেকে তাদের উদ্ধৃতি উদ্ধৃত:
জেএসওএন সম্পর্কে:
যদি আপনি যা করতে চান তার সবগুলি যদি পারমাণবিক মান বা তালিকা বা পারমাণবিক মানগুলির হ্যাশ হয় তবে জেএসএনের এক্সএমএল এর অনেকগুলি সুবিধা রয়েছে: এটি ইন্টারনেটে সোজাভাবে ব্যবহারযোগ্য, বিভিন্ন অ্যাপ্লিকেশন সমর্থন করে, জেএসওএন প্রক্রিয়া করার জন্য প্রোগ্রামগুলি লেখা সহজ, এর কয়েকটি optionচ্ছিক বৈশিষ্ট্য রয়েছে, এটি মানব-সুগঠিত এবং যুক্তিসঙ্গতভাবে পরিষ্কার, এর নকশাটি আনুষ্ঠানিক এবং সংক্ষিপ্ত, জেএসওএন নথিগুলি তৈরি করা সহজ, এবং এটি ইউনিকোড ব্যবহার করে। ...
এক্সএমএল সম্পর্কে:
এক্সএমএল অনঠনযুক্ত ডেটার সম্পূর্ণ nessশ্বর্যের সাথে উল্লেখযোগ্যভাবে ভালভাবে ডিল করে। ওয়েব এপিআই ডিজাইনারদের একটি ক্যাডার দ্বারা মৃত্যুর আনন্দের সাথে উদযাপিত হলেও আমি এক্সএমএলের ভবিষ্যত নিয়ে মোটেও উদ্বিগ্ন নই।
এবং "আমি আপনাকে বলেছিলাম!" আমার ডেস্ক টোকেন দূরে। আমি যখন আরও সমৃদ্ধ এপিআইগুলি বিকাশ করতে বলা হয় তখন জেএসএন লোকেরা কী করে তা দেখার জন্য আমি প্রতীক্ষিত। যখন তারা কম ভাল স্ট্রুকড ডেটা বিনিময় করতে চায়, তখন তারা কী এটি JSON এ জুতা দেবে? আমি JSON এর জন্য একটি স্কিমা ভাষার মাঝে মাঝে উল্লেখ দেখতে পাই, অন্যান্য ভাষা কি অনুসরণ করবে? ...
আমি ব্যক্তিগতভাবে নর্মের সাথে একমত আমি মনে করি যে এক্সএমএল-এর বেশিরভাগ আক্রমণগুলি ওয়েব অ্যাপ্লিকেশনগুলি সাধারণত অ্যাপ্লিকেশনগুলির জন্য আসে, এবং সত্যই ইন্টিগ্রেশন ডেভেলপারদের থেকে নয়। তবে এটাই আমার মতামত! ;)
{ "foo": 42 }
কি ধরণের এই বস্তু? তারপর টাইপ অভাব সমাধানের জন্য, এই শো আপ ভালো জিনিস: { "__type": "Bar", "foo": 42 }
। বিপরীতে ধরনের XML- এর উপাদান নামের connotated করা যেতে পারে: <Bar><foo>42</foo></Bar>
। কেবল লিস্প এবং জাভাস্ক্রিপ্টের ছেলেরা
এক্সএমএল (এক্সটেনসিবল মার্কআপ ল্যাঙ্গুয়েজ) প্রায়শই এক্সএইচআর ব্যবহৃত হয় কারণ এটি একটি প্রমিত সম্প্রচারিত ভাষা, কোনও প্রোগ্রামিং ভাষা ব্যবহার করতে পারে এবং সার্ভার এবং ক্লায়েন্ট উভয় পক্ষকেই সমর্থন করে, তাই এটি সবচেয়ে নমনীয় সমাধান। এক্সএমএল আরও অংশের জন্য পৃথক করা যায় যাতে একটি নির্দিষ্ট গোষ্ঠী অন্যান্য অংশকে প্রভাবিত না করেই প্রোগ্রামটির অংশটি বিকাশ করতে পারে। এক্সএমএল ফর্ম্যাটটি এক্সএমএল ডিটিডি বা এক্সএমএল স্কিমা (এক্সএসএল) দ্বারাও নির্ধারণ করা যায় এবং এটি পরীক্ষাও করা যায়।
JSON একটি ডেটা-এক্সচেঞ্জ ফর্ম্যাট যা জাভাস্ক্রিপ্ট অ্যাপ্লিকেশনগুলির সম্ভাব্য ফর্ম্যাট হিসাবে আরও জনপ্রিয় হচ্ছে। মূলত এটি একটি অবজেক্ট নোটেশন অ্যারে। জেএসএনের একটি খুব সহজ বাক্য গঠন রয়েছে তাই সহজেই শিখতে পারা যায়। এবং জাভাস্ক্রিপ্ট eval
ফাংশনটির সাথে JSON কে পার্সিং সমর্থন করে। অন্যদিকে, eval
ফাংশনটি নেতিবাচক হয়েছে। উদাহরণস্বরূপ, প্রোগ্রামটি খুব ধীরে ধীরে JSON পার্সিং হতে পারে এবং সুরক্ষার কারণে eval
এটি খুব ঝুঁকিপূর্ণ হতে পারে। এর অর্থ এই নয় যে জেএসএন ভাল নয়, কেবল আমাদের আরও যত্নবান হতে হবে।
আমার পরামর্শ হ'ল গেমসের মতো হালকা ডেটা-এক্সচেঞ্জের সাথে অ্যাপ্লিকেশনগুলির জন্য আপনার জেএসওএন ব্যবহার করা উচিত। যেহেতু আপনাকে ডেটা-প্রক্রিয়াকরণ সম্পর্কে সত্যই যত্ন নিতে হবে না, এটি খুব সহজ এবং দ্রুত।
এক্সএমএল বড় ওয়েবসাইটগুলির জন্য সর্বোত্তম, উদাহরণস্বরূপ শপিং সাইটগুলি বা এই জাতীয় কিছু। এক্সএমএল আরও সুরক্ষিত এবং পরিষ্কার হতে পারে। আপনি সংশোধনটি সহজে পরীক্ষা করতে এবং সহজেই অংশগুলিতে পৃথক করতে বেসিক ডেটা-স্ট্রাক্ট এবং স্কিমা তৈরি করতে পারেন।
আমি আপনাকে গতি এবং সুরক্ষার কারণে এক্সএমএল ব্যবহার করার পরামর্শ দিচ্ছি, তবে লাইটওয়েট স্টাফের জন্য জেএসএন।
জেএসএন সম্পর্কিত গুরুত্বপূর্ণ বিষয়টি হ'ল সুরক্ষার কারণে ডেটা স্থানান্তর এনক্রিপ্ট করা। সন্দেহ নেই যে জেএসএন তখন এক্সএমএল থেকে অনেক দ্রুত is আমি এক্সএমএল 100 মিমি নিতে দেখেছি যেখানে জেএসএন কেবল 60 মিমি নিয়েছে। JSON ডেটা ম্যানিপুলেট করা সহজ।