JSON या serialize: PHP डेवलपर का हमेशा का सवाल
\n\nकल्पना करें: आप PHP में एक स्क्रिप्ट लिख रहे हैं जिसमें यूज़र की सेटिंग्स का एक जटिल ऐरे सेव करना है। आपके दिमाग में तुरंत दो विकल्प आते हैं: json_encode() और serialize()। कौन सा चुनें? यह सवाल Stack Overflow पर हज़ारों डेवलपर्स को परेशान करता है, और आज हम हमेशा के लिए समझ लेंगे कि कौन सा तरीका वास्तव में बेहतर है।
मैं आपको सिर्फ सूखी तुलना नहीं दिखाऊंगा, बल्कि असली कोड उदाहरण, परफॉरमेंस टेस्ट और वो छिपे हुए खतरे भी बताऊंगा जिनके बारे में डॉक्यूमेंटेशन चुप है। चलिए शुरू करते हैं!
\n\njson_encode और serialize में क्या समानता है?
\n\nदोनों फंक्शन जटिल डेटा स्ट्रक्चर (arrays, objects) को एक स्ट्रिंग में बदलते हैं, जिसे फ़ाइल, डेटाबेस या कैश में सेव किया जा सकता है। लेकिन वे इसे अलग-अलग तरीकों से करते हैं।
\n\n- \n
- json_encode — डेटा को मानक JSON फॉर्मेट में बदलता है (टेक्स्ट जो JavaScript और अधिकांश भाषाओं को समझ में आता है)। \n
- serialize — एक आंतरिक PHP फॉर्मेट बनाता है जिसमें डेटा टाइप की जानकारी होती है और यह क्लासेस को बनाए रखते हुए ऑब्जेक्ट्स को रीस्टोर कर सकता है। \n
सरल कोड उदाहरण
\n\n<?php\n$array = [\n 'name' => 'राहुल',\n 'age' => 30,\n 'skills' => ['PHP', 'JavaScript', 'Python']\n];\n\n// JSON\n$json = json_encode($array, JSON_UNESCAPED_UNICODE);\necho $json; // {"name":"राहुल","age":30,"skills":["PHP","JavaScript","Python"]}\n\n// Serialize\n$serialized = serialize($array);\necho $serialized; // a:3:{s:4:"name";s:10:"राहुल";s:3:"age";i:30;s:6:"skills";a:3:{i:0;s:3:"PHP";i:1;s:10:"JavaScript";i:2;s:6:"Python";}}\n?>\n\nफर्क तुरंत दिखता है: JSON ज़्यादा कॉम्पैक्ट और पढ़ने में आसान है, जबकि serialize ज़्यादा शब्दों वाला है लेकिन इसमें ज़्यादा मेटाडेटा होता है।
\n\nमुख्य मानदंडों पर तुलना
\n\nचलिए हर चीज़ को स्पष्ट रूप से समझते हैं। मैंने टेस्ट किए हैं और डेटा इकट्ठा किया है जो आपको निर्णय लेने में मदद करेगा।
\n\n1. परफॉरमेंस: कौन तेज़ है?
\n\nबहुत से लोग सोचते हैं कि serialize तेज़ काम करता है क्योंकि यह "देशी" PHP फॉर्मेट है। लेकिन हकीकत इससे ज़्यादा जटिल है।
\n\n<?php\n$largeArray = [];\nfor ($i = 0; $i < 10000; $i++) {\n $largeArray[] = [\n 'id' => $i,\n 'name' => 'User_' . $i,\n 'data' => range(1, 50)\n ];\n}\n\n// json_encode टेस्ट\n$start = microtime(true);\n$json = json_encode($largeArray);\n$jsonTime = microtime(true) - $start;\n\n// serialize टेस्ट\n$start = microtime(true);\n$serialized = serialize($largeArray); \n$serializeTime = microtime(true) - $start;\n\necho "JSON: {$jsonTime} सेकंड\\n";\necho "Serialize: {$serializeTime} सेकंड\\n";\n// नतीजा: JSON अक्सर 10-30% तेज़ होता है\n?>\n\nनिष्कर्ष: json_encode आमतौर पर तेज़ होता है, खासकर बड़े arrays पर। वजह यह है कि JSON क्लासेस की जानकारी सेव किए बिना एक सरल एल्गोरिदम का उपयोग करता है।
2. डेटा का आकार: कौन ज़्यादा कॉम्पैक्ट है?
\n\nJSON लगभग हमेशा आकार में जीतता है। खुद तुलना करें:
\n\n- \n
- JSON:
{"name":"राहुल","age":30}— 26 बाइट्स \n - Serialize:
a:2:{s:4:"name";s:10:"राहुल";s:3:"age";i:30;}— 41 बाइट्स \n
JSON के पक्ष में 1.5-2 गुना का अंतर। अगर आप कैश में गीगाबाइट्स डेटा स्टोर करते हैं, तो यह महत्वपूर्ण है।
\n\n3. सुरक्षा: serialize का छिपा हुआ खतरा
\n\nयहाँ कई लोग फंस जाते हैं। unserialize() मनमाना कोड निष्पादित कर सकता है अगर इसे छेड़छाड़ किया गया डेटा दिया जाए। इसे PHP object injection कहते हैं।
<?php\n// खतरनाक उदाहरण\n$userInput = $_GET['data']; // यूज़र हानिकारक स्ट्रिंग भेज सकता है\n$object = unserialize($userInput); // जोखिम! खतरनाक कोड वाला ऑब्जेक्ट बना सकता है\n\n// सुरक्षित विकल्प\n$jsonData = json_decode($userInput, true); // सिर्फ एक array, कोई ऑब्जेक्ट नहीं\n?>\n\nमहत्वपूर्ण: कभी भी यूज़र से आए डेटा पर unserialize() का उपयोग न करें। JSON इस मामले में पूरी तरह सुरक्षित है।