পিএইচপি অ্যারে সঞ্চয় করার জন্য পছন্দসই পদ্ধতি (জেসন_এনকোড বনাম সিরিয়ালাইজ)


609

ক্যাশিংয়ের উদ্দেশ্যে ফ্ল্যাট ফাইলে আমাকে মাল্টি-ডাইমেনশনাল এসোসিয়েটিভ অ্যারে সংরক্ষণ করতে হবে। আমার ওয়েব অ্যাপ্লিকেশনটিতে ব্যবহারের জন্য আমি মাঝে মাঝে এটিকে জেএসএনে রূপান্তর করার প্রয়োজনীয়তাটি দেখতে পাব কিন্তু আমি পিএইচপি-তে সরাসরি অ্যারে ব্যবহার করব এমন বেশিরভাগ সময়।

এই পাঠ্য ফাইলে জেএসএন বা পিএইচপি সিরিয়ালযুক্ত অ্যারে হিসাবে অ্যারে সংরক্ষণ করা কি আরও দক্ষ হবে? আমি চারপাশে দেখেছি এবং মনে হচ্ছে পিএইচপি (5.3) এর সর্বশেষতম সংস্করণগুলিতে json_decodeআসলে তুলনায় দ্রুত unserialize

আমি বর্তমানে জেএসএন হিসাবে অ্যারে সংরক্ষণ করার দিকে ঝুঁকছি কারণ যদি প্রয়োজন হয় তবে কোনও মানুষের দ্বারা পড়া সহজ মনে হচ্ছে, এটি খুব সামান্য প্রচেষ্টা সহ পিএইচপি এবং জাভাস্ক্রিপ্ট উভয় ক্ষেত্রেই ব্যবহার করা যেতে পারে, এবং আমি যা পড়েছি তা হতে পারে দ্রুত ডিকোড করা (যদিও এনকোডিং সম্পর্কে নিশ্চিত নয়)।

কেউ কি কোনও সমস্যা সম্পর্কে জানেন? যে কোনও পদ্ধতির পারফরম্যান্স সুবিধা দেখানোর জন্য কারও ভাল মানদণ্ড রয়েছে?

উত্তর:


563

আপনার অগ্রাধিকার উপর নির্ভর করে।

পারফরম্যান্স যদি আপনার নিখুঁত ড্রাইভিং বৈশিষ্ট্য হয় তবে সর্বকালের দ্রুততম ব্যবহার করুন। কোনও সিদ্ধান্ত নেওয়ার আগে নিশ্চিত হয়ে নিন যে পার্থক্য সম্পর্কে আপনার সম্পূর্ণ ধারণা রয়েছে

  • ভিন্ন serialize()আপনি হল UTF-8 টি অক্ষর অস্পৃষ্ট রাখার অতিরিক্ত প্যারামিটার যোগ করতে হবে: json_encode($array, JSON_UNESCAPED_UNICODE) (অন্যথায় UTF-8 টি অক্ষর ইউনিকোড পালাবার ক্রম পরিবর্তিত)।
  • জেএসএনের কাছে বস্তুর মূল বর্গটি কী ছিল তার কোনও স্মৃতি থাকবে না (এগুলি সবসময় stdClass এর উদাহরণ হিসাবে পুনরুদ্ধার করা হয়)।
  • আপনি লিভারেজ করতে পারবে না __sleep()এবং __wakeup()JSON সঙ্গে
  • ডিফল্টরূপে, কেবলমাত্র জনসাধারণের সম্পত্তিগুলি JSON দিয়ে ক্রমিকায়িত হয়। ( PHP>=5.4আপনি এই আচরণটি পরিবর্তন করতে জসনসারিয়ালাইজেবল বাস্তবায়ন করতে পারেন )।
  • জেএসএন আরও পোর্টেবল

এবং সম্ভবত কিছু অন্যান্য পার্থক্য আছে যা আমি এই মুহুর্তে ভাবতে পারি না।

দুটি তুলনা করার জন্য একটি সহজ গতি পরীক্ষা

<?php

ini_set('display_errors', 1);
error_reporting(E_ALL);

// Make a big, honkin test array
// You may need to adjust this depth to avoid memory limit errors
$testArray = fillArray(0, 5);

// Time json encoding
$start = microtime(true);
json_encode($testArray);
$jsonTime = microtime(true) - $start;
echo "JSON encoded in $jsonTime seconds\n";

// Time serialization
$start = microtime(true);
serialize($testArray);
$serializeTime = microtime(true) - $start;
echo "PHP serialized in $serializeTime seconds\n";

// Compare them
if ($jsonTime < $serializeTime) {
    printf("json_encode() was roughly %01.2f%% faster than serialize()\n", ($serializeTime / $jsonTime - 1) * 100);
}
else if ($serializeTime < $jsonTime ) {
    printf("serialize() was roughly %01.2f%% faster than json_encode()\n", ($jsonTime / $serializeTime - 1) * 100);
} else {
    echo "Impossible!\n";
}

function fillArray( $depth, $max ) {
    static $seed;
    if (is_null($seed)) {
        $seed = array('a', 2, 'c', 4, 'e', 6, 'g', 8, 'i', 10);
    }
    if ($depth < $max) {
        $node = array();
        foreach ($seed as $key) {
            $node[$key] = fillArray($depth + 1, $max);
        }
        return $node;
    }
    return 'empty';
}

31
"জেএসওএন ইউটিএফ -8 অক্ষরকে ইউনিকোড এস্কেপ সিকোয়েন্সগুলিতে রূপান্তর করে" " অগত্যা সত্য: আর আমাদের এখন নেই JSON_UNESCAPED_UNICODE
ট্রিগ

32
এখানে আমরা প্রায় 5 বছর পরে এবং আমি আবার পরীক্ষাগুলি চালিয়েছি (কেবলমাত্র json_encode) এবং এটি এখন ক্রমিকের তুলনায় গড় প্রায় 131% দ্রুত। সুতরাং, 5.3.x এর উপরে 5.4.x এ ফাংশনে কিছু সুন্দর সুন্দর উন্নতি করতে হবে। বিশেষত, আমি CentOS 6 এ 5.4.24 চালিয়ে যাচ্ছি, সুতরাং, জেএসওনের পক্ষে হ্যাঁ !!
কাইলফারিস 21

8
আমার ক্ষেত্রে আমরা একবার এনকোড করেছি এবং অনেকগুলি ডিকোড করেছি, সুতরাং আমরা json_decode বনাম আনসিরিয়ালাইজকে বেঞ্চমার্ক করেছি এবং ফলাফলগুলি 0.06662392616272 সেকেন্ডে JSON ডকোড করা হয়েছিল - পিএইচপি 0.093269109725952 সেকেন্ডে আনসিরিয়ালাইজড হয়েছিল - json_decode () আনসরিয়ালাইজেশন (প্রায়) ছাড়াই প্রায় 39.99% ছিল
এএমবি

21
আকর্ষণীয়: আপনি যদি 3v4l.org এ এই কোডটি চালান , সর্বশেষ পিএইচপি 7 বিকাশ জেসন_এনকোডের চেয়ে দ্রুত সিরিয়ালাইজ চালায়: "সিরিয়ালাইজ () জেসন_কেনড ()" এর তুলনায় মোটামুটি 76.53% ছিল দ্রুত
মার্চওয়ানগ্র্যান্ড

21
2017, পিএইচপি 7.1 এবংserialize() was roughly 35.04% faster than json_encode()
এলিয়াস সোয়ারস

239

জেএসএন পিএইচপি এর সিরিয়ালাইজেশন ফর্ম্যাটের চেয়ে সহজ এবং দ্রুত এবং এটি ব্যবহার করা উচিত যদি না :

  • আপনি গভীরভাবে নেস্টেড অ্যারেগুলি সংরক্ষণ করছেন json_decode(): "JSON এনকোডড ডেটা 127 উপাদানগুলির চেয়ে গভীর হলে এই ফাংশনটি মিথ্যা ফিরে আসবে" "
  • আপনি অবজেক্টগুলি সংরক্ষণ করছেন যেগুলি সঠিক শ্রেণীর হিসাবে আনসিরিয়ালাইজড করা দরকার
  • আপনি পুরানো পিএইচপি সংস্করণগুলির সাথে আলাপ করছেন যা json_decode সমর্থন করে না

12
দুর্দান্ত উত্তর। হাহা, 127 স্তর গভীর কিছুটা উন্মাদ বলে মনে হচ্ছে; ধন্যবাদ আমি সর্বাধিক ২-৩ এর মতোই যাচ্ছি জেসন_ডাইকোড / জসন_এনকোড আনসিরিয়ালাইজ / সিরিয়ালাইজ করার চেয়ে দ্রুততর এই ব্যাক আপ করার জন্য আপনার কাছে কি কোনও ডেটা আছে?
কাইলফ্যারিস

1
আমি কিছুক্ষণ আগে এটি পরীক্ষা করেছিলাম এবং জসন দ্রুত বেরিয়ে এসেছিল - যদিও আমার কাছে আর কোনও ডেটা নেই।
গ্রেগ

47
"5.3.0
alচ্ছিক

4
আমি উপরের তালিকায় আরও একটি আইটেম যুক্ত করব: আপনার ডেটাতে অবৈধ ইউটিএফ -8 বাইট সিকোয়েন্স থাকতে পারে তবে json_encode () ব্যবহার করা উচিত নয়। এটি কেবল এই জাতীয় ডেটার জন্য মিথ্যা ফিরিয়ে দেয়। উদাহরণস্বরূপ চেষ্টা করুন: var_dump (json_encode ("\ xEF \ xEF"));
পাকো

1
এটি সাধারণ যে এটি দ্রুততর তা সত্য নয়। আপনার যদি প্রায় ~ 500 এন্ট্রি সহ একটি ছোট অ্যারে থাকে, তবে আনসিয়ালাইজ / সিরিয়ালাইজটি আসলে 200-400% দ্রুত হয় তবে json_decode / json_encode (পিএইচপি 5.6.19)
অ্যাডাম

59

আমি এই বিষয় সম্পর্কে একটি ব্লগপোস্ট লিখেছি: " একটি বড় অ্যারে ক্যাশে করুন: জেএসওএন, সিরিয়ালাইজ করুন বা ভার_এক্সপোর্ট? " । এই পোস্টে এটি প্রদর্শিত হয় যে সিরিয়ালাইজ হ'ল ছোট থেকে বড় আকারের অ্যারেগুলির জন্য সেরা পছন্দ। খুব বড় অ্যারেগুলির জন্য (> 70 এমবি) জেএসএন আরও ভাল পছন্দ।


8
লিঙ্কটি আর উপলভ্য নয়।
মার্টিন থোমা

1
ধন্যবাদ, মুজ, আমি লিঙ্কটি আপডেট করেছি। যদিও নিবন্ধটি প্রায় 6 বছরের পুরানো এবং বর্তমান পিএইচপি সংস্করণগুলির জন্য এতটা সঠিক নাও হতে পারে।
টাকো

আমি কয়েকটি পরীক্ষা করেছি এবং এটি পরীক্ষা করার জন্য একটি সাধারণ ফাংশন করেছি, প্রায় 300 টি পুনরাবৃত্তির চেয়ে json_encode()প্রায় 80% থেকে 150% দ্রুত (এটি সত্যিই উপরে এবং নীচে যাচ্ছে) এর চেয়ে বড় অ্যারে (তাদের জন্য পিটার বেলির ব্যবহৃত ফাংশন ) রয়েছে serialize()। তবে ছোট অ্যারেগুলি ( array("teams" => array(1 => array(4 arrays of players), 2 => array(4 arrays of players)))) ব্যবহার করার সময় , আমি 750,000 পুনরাবৃত্তির সাথে পরীক্ষা করেছিলাম এবং serialize()সেই ক্ষেত্রে প্রায় 6% থেকে 10% দ্রুত। আমার ফাংশনটি সমস্ত পুনরাবৃত্তির জন্য গড় সময় নেয় এবং তাদের তুলনা করে। আমি উত্তরগুলির একটি হিসাবে এটি এখানে পোস্ট করতে পারি
MiChAeLoKGB

যদি ডেটাগুলি কেবল পিএইচপি দ্বারা ব্যবহৃত হয়, তবে var_export আমার জিনিস। অন্তর্ভুক্ত চিন্তায় সম্ভাব্য বাক্য গঠন ত্রুটিগুলির সাথে কেবল সতর্কতা অবলম্বন করা উচিত।
Gfra54

3
ব্লগ আর বিদ্যমান নেই
পোপিয়ে

53

আপনি https://github.com/phadej/igbinary- এও আগ্রহী হতে পারেন - যা পিএইচপি-র জন্য আলাদা সিরিয়ালাইজেশন 'ইঞ্জিন' সরবরাহ করে।

আমার এলোমেলো / স্বেচ্ছাসেবী 'পারফরম্যান্স' পরিসংখ্যান, পিএইচপি 5.3.5 একটি 64 বিট প্ল্যাটফর্ম শোতে ব্যবহার করে:

জেএসএন:

  • JSON 2.180496931076 সেকেন্ডে এনকোড করেছে
  • জেএসএন 9.8368630409241 সেকেন্ডে ডিকোড করেছে
  • সিরিয়ালযুক্ত "স্ট্রিং" আকার: 13993

নেটিভ পিএইচপি:

  • পিএইচপি 2.9125759601593 সেকেন্ডে সিরিয়ালযুক্ত
  • পিএইচপি 6.4348418712616 সেকেন্ডে আনসিয়েরাইজড
  • সিরিয়ালযুক্ত "স্ট্রিং" আকার: 20769

ইগবাইনারি:

  • উইন ইগবাইনারি 1.6099879741669 সেকেন্ডে সিরিয়ালযুক্ত
  • 4.7737920284271 সেকেন্ডে উইন ইগবিনারি আনসিয়েরাইজড
  • WIN ক্রমিকিত "স্ট্রিং" আকার: 4467

সুতরাং, এটি আইগবাইনারি_সরিয়ালাইজ () এবং ইগবাইনারি_উনসায়ারালাইজ () দ্রুত করা এবং ডিস্কের কম স্থান ব্যবহার করে।

আমি উপরের মত ফিলআর্রে (0, 3) কোডটি ব্যবহার করেছি, তবে অ্যারে কীগুলি দীর্ঘতর স্ট্রিংয়ে রেখেছি।

আইগিনারি পিএইচপি-র নেটিভ সিরিয়ালাইজ ক্যান হিসাবে একই ডেটা ধরণের সঞ্চয় করতে পারে (সুতরাং কোনও জিনিস ইত্যাদিতে কোনও সমস্যা নেই) এবং আপনি যদি চান তবে PHP5.3 কে এটি সেশন হ্যান্ডলিংয়ের জন্য ব্যবহার করতে বলতে পারেন।

এছাড়াও দেখুন http://ilia.ws/files/zendcon_2010_hided_features.pdf - বিশেষভাবে স্লাইডগুলি 14/15/16


25

ওয়াই কেবল সিরিয়ালাইজড এবং জসন এনকোড এবং ডিকোড পরীক্ষা করেছেন, প্লাস আকারটি এটি স্ট্রিংটি সঞ্চয় করে নেবে।

JSON encoded in 0.067085981369 seconds. Size (1277772)
PHP serialized in 0.12110209465 seconds. Size (1955548)
JSON decode in 0.22470498085 seconds
PHP serialized in 0.211947917938 seconds
json_encode() was roughly 80.52% faster than serialize()
unserialize() was roughly 6.02% faster than json_decode()
JSON string was roughly 53.04% smaller than Serialized string

আমরা এই উপসংহারে পৌঁছাতে পারি যে জেএসএন দ্রুত এনকোড করে এবং একটি ছোট স্ট্রিংয়ের ফলস্বরূপ, তবে স্ট্রিংটি ডিকোড করার জন্য আনসিরিয়ালাইজ করা দ্রুত হয়।


6
আমি জানি না কেন লোকেরা সর্বদা এত ছোট ডেটাসেট দিয়ে পারফরম্যান্স পরীক্ষা করে। আপনার ফলাফলগুলিতে ত্রুটি যুক্ত করে এমন সমস্ত ওভারহেড রয়েছে তা করে। এবং যদি লোকেরা পারফরম্যান্সে আগ্রহী হয় তবে এটি সম্ভবত তাদের একটি খুব বড় ডেটাসেট রয়েছে কারণ একটিবার মাইক্রো সেকেন্ড অর্জন করার কোনও মানে নেই।
ইয়ান সাগান

1
বেশিরভাগ সময় আমি অনেকগুলি ছোট ডেটাসেটগুলিতে পুনরাবৃত্তি করি। শত শত ছোট ছোট ডেটাসেটের সাথে প্রত্যেকের জন্য 1 মিএস অর্জন এখনও আকর্ষণীয়।
টেসন

@ ইয়ানসাগন এমনকি ছোট ডেটাসেটের সাথেও পারফরম্যান্স পরীক্ষা করা বোধগম্য। এটি যদি কেবলমাত্র একটি মাইক্রো সেকেন্ডের হয় তবে পরীক্ষার আগে আপনার কীভাবে জানা উচিত?
আদম

17

আপনি যদি পরবর্তী সময়ে সময়ে অন্তর্ভুক্ত করতে "অন্তর্ভুক্ত" করতে চান এমন তথ্য ক্যাচিং করে থাকেন, তবে আপনি var_export ব্যবহার করে দেখতে চাইতে পারেন । এইভাবে আপনি কেবল "সিরিয়ালাইজ" তে হিট নিয়েছেন এবং "আনসিরিয়ালাইজড" তে নয়।


এটি সম্ভবত সবচেয়ে দ্রুততম উপায়। - আমি তাই "পিএইচপি তে একটি উদাহরণ লিখেছিলেন ফাস্ট ধারাবাহিকভাবে / unserialize": stackoverflow.com/questions/2545455/...
dave1010

12

আমি আনসিরিয়ালাইজেশন কর্মক্ষমতা অন্তর্ভুক্ত করতে পরীক্ষাটি বাড়িয়েছি। আমি পেয়েছি নম্বর এখানে।

Serialize

JSON encoded in 2.5738489627838 seconds
PHP serialized in 5.2861361503601 seconds
Serialize: json_encode() was roughly 105.38% faster than serialize()


Unserialize

JSON decode in 10.915472984314 seconds
PHP unserialized in 7.6223039627075 seconds
Unserialize: unserialize() was roughly 43.20% faster than json_decode() 

সুতরাং জসন এনকোডিংয়ের জন্য দ্রুত তবে ডিকোডিংয়ের ক্ষেত্রে ধীর বলে মনে হচ্ছে। সুতরাং এটি আপনার অ্যাপ্লিকেশন এবং আপনি সবচেয়ে বেশি কী আশা করেন তার উপর নির্ভর করে।


9

সত্যিই দুর্দান্ত বিষয় এবং কয়েকটি উত্তর পড়ার পরে, আমি এই বিষয়টিতে আমার পরীক্ষাগুলি ভাগ করতে চাই।

আমি এমন একটি ব্যবহারের কেস পেয়েছি যেখানে ডাটাবেসের সাথে কথা বলার সময় প্রায় প্রতিটি "বিশাল" টেবিলটি জিজ্ঞাসা করা উচিত (কেন কেবল একটি সত্য জিজ্ঞাসা করবেন না)। ডাটাবেস ক্যাচিং সিস্টেমটি যথাযথ নয় কারণ এটি বিভিন্ন অনুরোধগুলি ক্যাশে করবে না, তাই আমি যদিও পিএইচপি ক্যাচিং সিস্টেম সম্পর্কে।

আমি চেষ্টা করেছিলাম apcuতবে এটি প্রয়োজনীয়তার সাথে খাপ খায় না, এক্ষেত্রে স্মৃতিশক্তি যথেষ্ট নির্ভরযোগ্য নয়। পরবর্তী পদক্ষেপ ছিল সিরিয়ালাইজেশন সহ একটি ফাইলের ক্যাশে করা।

সারণীতে 18 টি কলাম সহ 14355 টি প্রবেশ রয়েছে, সেগুলি সিরিয়ালযুক্ত ক্যাশে পড়ার জন্য আমার পরীক্ষা এবং পরিসংখ্যান:

তাদেরকে JSON:

যেমনটি আপনি সমস্তই বলেছিলেন, json_encode/ এর সাথে সবচেয়ে বড় অসুবিধা json_decodeহ'ল এটি সবকিছুকে একটি StdClassউদাহরণে (বা অবজেক্ট) রূপান্তর করে । আপনার যদি এটি লুপ করার প্রয়োজন হয় তবে এটিকে অ্যারেতে রূপান্তর করা সম্ভবত আপনি যা করবেন এবং হ্যাঁ এটি রূপান্তরের সময়কে বাড়িয়ে তুলছে

গড় সময়: 780.2 এমএস; মেমরি ব্যবহার: 41.5MB; ক্যাশে ফাইলের আকার: 3.8MB

Msgpack

@ হ্যাচ পিকপ্যাকের উল্লেখ করেছেন । সুন্দর ওয়েবসাইট। এর চেষ্টা করা যাক আমরা কি?

গড় সময়: 497 এমএস; মেমরি ব্যবহার: 32MB; ক্যাশে ফাইলের আকার: 2.8MB

এটি আরও ভাল, তবে একটি নতুন এক্সটেনশন প্রয়োজন; মাঝে মাঝে ভয় পাওয়া লোকদের সংকলন ...

IgBinary

@ জিঞ্জারডগ আইগিনারি সম্পর্কে উল্লেখ করেছে । দ্রষ্টব্য যে আমি সেট করেছি igbinary.compact_strings=Offকারণ ফাইল আকারের চেয়ে আমি পারফরম্যান্স পড়ার বিষয়ে বেশি যত্নশীল।

গড় সময়: 411.4 এমএস; মেমরি ব্যবহার: 36.75MB; ক্যাশে ফাইলের আকার: 3.3MB

প্যাক প্যাকের চেয়ে ভাল। তবুও, এটির জন্য খুব সংকলন প্রয়োজন।

serialize/unserialize

গড় সময়: 477.2 এমএস; মেমরি ব্যবহার: 36.25MB; ক্যাশে ফাইলের আকার: 5.9MB

জেএসএনের চেয়ে আরও ভাল পারফরম্যান্স, অ্যারে যত বড় হবে ধীরে ধীরে json_decode, তবে আপনি এটি ইতিমধ্যে নতুন।

এই বাহ্যিক এক্সটেনশনগুলি ফাইলের আকার সঙ্কুচিত করছে এবং কাগজে দুর্দান্ত দেখায়। সংখ্যা মিথ্যা বলে না *। আপনি যদি কোনও স্ট্যান্ডার্ড পিএইচপি ফাংশন নিয়ে প্রায় একই ফলাফল পান তবে কোনও এক্সটেনশন সংকলন করার কী দরকার?

আমরা আপনার প্রয়োজনের উপর নির্ভর করে এটিও অনুমান করতে পারি, আপনি অন্য কারও চেয়ে আলাদা কিছু বেছে নেবেন:

  • আইজিবাইনারি সত্যিই দুর্দান্ত এবং এমএসজিপ্যাকের চেয়ে আরও ভাল পারফর্ম করে
  • আপনার ডেটাগুলি সংকুচিত করতে এমএসজিপ্যাক আরও ভাল (নোট করুন যে আমি আইগবাইনারি কমপ্যাক্ট.স্ট্রিং বিকল্পটি ব্যবহার করে নি)।
  • সংকলন করতে চান না? মান ব্যবহার করুন।

এটাই, আপনাকে একটি বেছে নিতে সহায়তা করার জন্য আর একটি সিরিয়ালাইজেশন পদ্ধতির তুলনা!

* পিএইচপিউনিট ৩.7.৩১, পিএইচপি ৫.৫.১০ দিয়ে পরীক্ষিত - কেবলমাত্র একটি স্ট্যান্ডার্ড হার্ডরিভ এবং পুরানো দ্বৈত কোর সিপিইউ দিয়ে ডিকোডিং - 10 টি একই ব্যবহারের কেস টেস্টের গড় সংখ্যা, আপনার পরিসংখ্যান আলাদা হতে পারে


ফেরত অ্যারেগুলিকে জোর করতে json_decode এ পতাকা কেন পাঠানো হবে না?
অ্যালেক্স ইয়ারোশেভিচ

কারণ এটি ধীর। আমি এটি পরীক্ষা করিনি তবে আমি মনে করি যে পিএইচপি থেকে টাইপ পরিবর্তন করার জন্য কেবল বাধ্য করা দ্রুত হয়।
soyuka

আমি শুধু জানি যে পিএইচপি মধ্যে বস্তুর তুলনায় অ্যারে তৈরি খুব দ্রুত।
অ্যালেক্স ইয়ারোশেভিচ

সুতরাং আপনি যে বিষয়ে কথা বলছেন json_decode($object, true), মূলত এটি একই হিসাবে (array) json_decode($object)তবে পুনরাবৃত্তির সাথে কাজ করবে যাতে একই আচরণ হবে এবং উভয় ক্ষেত্রেই এর একটি উল্লেখযোগ্য ব্যয় হবে। মনে রাখবেন যে আমি পারফরম্যান্সের মধ্যে পার্থক্য পরীক্ষা করেছি না StdClassএবং arrayএটি এখানে মূল বিষয় নয়।
soyuka

আমি নিশ্চিত এটি অন্য একটি খরচ কারণ এটি অবজেক্ট ছাড়াই নিম্ন স্তরে সম্পন্ন হয়েছে।
অ্যালেক্স ইয়ারোশেভিচ

8

দেখে মনে হচ্ছে সিরিয়ালাইজ হ'ল একটি কারণ আমি 2 কারণে ব্যবহার করতে যাচ্ছি:

  • কেউ উল্লেখ করেছেন যে আনসিয়েরালাইজড জসন_ডেকোডের চেয়ে দ্রুত এবং একটি 'রিড' কেস একটি 'রাইটিং' কেসের চেয়ে বেশি সম্ভাব্য বলে মনে হচ্ছে।

  • অবৈধ ইউটিএফ -8 অক্ষরের সাথে স্ট্রিং রাখার সময় আমি json_encode নিয়ে সমস্যায় পড়েছি। যখন এটি ঘটে তখন স্ট্রিংটি তথ্য ক্ষতির ফলে খালি হয়ে যায়।


আপনি দয়া করে একটি উদাহরণ দিয়ে আপনার শেষ পয়েন্টটি বিস্তারিতভাবে বর্ণনা করতে পারেন
নবীন সরোয়ে

6

আমি এটিকে একেবারে জটিল, হালকাভাবে নেস্টেড মাল্টি-হ্যাশের সমস্ত ধরণের ডেটা (স্ট্রিং, নুল, পূর্ণসংখ্যার) সাথে পরীক্ষা করেছি এবং সিরিয়ালাইজ / আনসিরিয়ালাইজড শেষ হয়েছে json_encode / json_decode এর চেয়ে অনেক দ্রুত।

আমার পরীক্ষাগুলিতে জসনর একমাত্র সুবিধা হ'ল এটি ছোট 'প্যাকড' আকার।

এগুলি পিএইচপি 5.3.3 এর অধীনে করা হয়েছে, আপনি আরও বিশদ বিবরণ চান কিনা তা আমাকে জানান।

এখানে পরীক্ষাগুলির ফলাফল রয়েছে তারপরে কোডগুলি সেগুলি তৈরি করার জন্য। আমি পরীক্ষার ডেটা সরবরাহ করতে পারছি না কারণ এটি এমন তথ্য প্রকাশ করবে যা আমি বন্যের বাইরে যেতে দিতে পারি না।

JSON encoded in 2.23700618744 seconds
PHP serialized in 1.3434419632 seconds
JSON decoded in 4.0405561924 seconds
PHP unserialized in 1.39393305779 seconds

serialized size : 14549
json_encode size : 11520
serialize() was roughly 66.51% faster than json_encode()
unserialize() was roughly 189.87% faster than json_decode()
json_encode() string was roughly 26.29% smaller than serialize()

//  Time json encoding
$start = microtime( true );
for($i = 0; $i < 10000; $i++) {
    json_encode( $test );
}
$jsonTime = microtime( true ) - $start;
echo "JSON encoded in $jsonTime seconds<br>";

//  Time serialization
$start = microtime( true );
for($i = 0; $i < 10000; $i++) {
    serialize( $test );
}
$serializeTime = microtime( true ) - $start;
echo "PHP serialized in $serializeTime seconds<br>";

//  Time json decoding
$test2 = json_encode( $test );
$start = microtime( true );
for($i = 0; $i < 10000; $i++) {
    json_decode( $test2 );
}
$jsonDecodeTime = microtime( true ) - $start;
echo "JSON decoded in $jsonDecodeTime seconds<br>";

//  Time deserialization
$test2 = serialize( $test );
$start = microtime( true );
for($i = 0; $i < 10000; $i++) {
    unserialize( $test2 );
}
$unserializeTime = microtime( true ) - $start;
echo "PHP unserialized in $unserializeTime seconds<br>";

$jsonSize = strlen(json_encode( $test ));
$phpSize = strlen(serialize( $test ));

echo "<p>serialized size : " . strlen(serialize( $test )) . "<br>";
echo "json_encode size : " . strlen(json_encode( $test )) . "<br></p>";

//  Compare them
if ( $jsonTime < $serializeTime )
{
    echo "json_encode() was roughly " . number_format( ($serializeTime / $jsonTime - 1 ) * 100, 2 ) . "% faster than serialize()";
}
else if ( $serializeTime < $jsonTime )
{
    echo "serialize() was roughly " . number_format( ($jsonTime / $serializeTime - 1 ) * 100, 2 ) . "% faster than json_encode()";
} else {
    echo 'Unpossible!';
}
    echo '<BR>';

//  Compare them
if ( $jsonDecodeTime < $unserializeTime )
{
    echo "json_decode() was roughly " . number_format( ($unserializeTime / $jsonDecodeTime - 1 ) * 100, 2 ) . "% faster than unserialize()";
}
else if ( $unserializeTime < $jsonDecodeTime )
{
    echo "unserialize() was roughly " . number_format( ($jsonDecodeTime / $unserializeTime - 1 ) * 100, 2 ) . "% faster than json_decode()";
} else {
    echo 'Unpossible!';
}
    echo '<BR>';
//  Compare them
if ( $jsonSize < $phpSize )
{
    echo "json_encode() string was roughly " . number_format( ($phpSize / $jsonSize - 1 ) * 100, 2 ) . "% smaller than serialize()";
}
else if ( $phpSize < $jsonSize )
{
    echo "serialize() string was roughly " . number_format( ($jsonSize / $phpSize - 1 ) * 100, 2 ) . "% smaller than json_encode()";
} else {
    echo 'Unpossible!';
}

আমি সবেমাত্র পিএইচপি 5.4.12 এর সাথে একটি অনুরূপ পরীক্ষা করেছি এবং অনুরূপ ফলাফল পেয়েছি: {আন,} সিরিয়ালাইজেশন দ্রুততর। আমার ডেটা 3 স্তরের গভীর (900 ক সিরিয়ালযুক্ত) হ্যাশযুক্ত।
sorpigal

6

আমি একটি ছোট বেঞ্চমার্কও তৈরি করেছিলাম। আমার ফলাফল একই ছিল। তবে আমার ডিকোড পারফরম্যান্স দরকার। যেখানে আমি লক্ষ্য করেছি, উপরের কিছু লোকের মতো তারাও বলেছে, unserializeতার চেয়ে দ্রুত json_decodeunserializeপ্রায় 60-70% json_decodeসময় নেয় । সুতরাং উপসংহারটি মোটামুটি সহজ: যখন আপনার এনকোডিংয়ে পারফরম্যান্স প্রয়োজন তখন ব্যবহার করুন json_encode, যখন ডিকোডিংয়ের সময় আপনার পারফরম্যান্স প্রয়োজন তখন ব্যবহার করুন unserialize। যেহেতু আপনি আরও একটি পারফরম্যান্স প্রয়োজন যেখানে আপনি একটি choise করতে হবে দুটি ফাংশন মার্জ করতে পারবেন না।

ছদ্মতে আমার মানদণ্ড:

  • কয়েকটি এলোমেলো কী এবং মান সহ অ্যারে $ আরার সংজ্ঞায়িত করুন
  • এক্স <100 এর জন্য; এক্স ++,; সিরিয়ালাইজ এবং json_encode একটি অ্যারে_আরন্ড $ আরআর
  • y <1000 এর জন্য; Y ++,; json_decode json এনকোড স্ট্রিং - গণনার সময়
  • y <1000 এর জন্য; Y ++,; সিরিয়ালযুক্ত স্ট্রিং আনসিয়ালাইজ করুন - গণনার সময়
  • ফলাফলটি প্রতিধ্বনিত করল যা দ্রুত ছিল

অ্যাভারেজে: আনসিরালাইজড জসন_ডেকোডের চেয়ে 4 বারের বেশি 96 বার জিতেছে। প্রায় 1.5 মিমি এর ওভারেজ সহ 1.5 মিমি।


3

আপনি আপনার চূড়ান্ত সিদ্ধান্ত নেওয়ার আগে জেনে রাখুন যে JSON ফর্ম্যাটটি এসোসিয়েটিভ অ্যারেগুলির জন্য নিরাপদ নয় - json_decode()পরিবর্তে সেগুলি বস্তু হিসাবে ফিরিয়ে দেবে:

$config = array(
    'Frodo'   => 'hobbit',
    'Gimli'   => 'dwarf',
    'Gandalf' => 'wizard',
    );
print_r($config);
print_r(json_decode(json_encode($config)));

আউটপুট হল:

Array
(
    [Frodo] => hobbit
    [Gimli] => dwarf
    [Gandalf] => wizard
)
stdClass Object
(
    [Frodo] => hobbit
    [Gimli] => dwarf
    [Gandalf] => wizard
)

সত্যিই, আপনি ঠিক বলেছেন। আমি বলতে চাচ্ছি, এটা হয় জাভাস্ক্রিপ্ট বস্তুর afterall স্বরলিপি! ধন্যবাদ, যদি আপনি জানেন যে আপনি যা এনকোড করেছেন json_encodeসেটি কোনও এসোসিয়েটিভ অ্যারে ছিল, আপনি সহজেই এটিকে এমন অ্যারেতে আবার জোর করতে পারেন: $json = json_encode($some_assoc_array); $back_to_array = (array)json_decode($json);এছাড়াও আপনি লক্ষ্য রাখতে পারেন যে আপনি পিএইচপি-তে অ্যারে হিসাবে একইভাবে অবজেক্টগুলিকে অ্যাক্সেস করতে পারেন তাই সাধারণ পরিস্থিতিতে, একটি এমনকি পার্থক্য জানতে পারে না। ভাল পয়েন্ট যদিও!
কাইলফারিস 21

30
@ টুমুচফ্প, দুঃখিত তবে আপনি ভুল করেছেন। Json_decode 'bool $ अस্যাস = মিথ্যা' এর জন্য একটি দ্বিতীয় প্যারামিটার রয়েছে যা json_decode একটি অ্যারে তৈরি করে। @ কাইলফ্যারিস, এটি অ্যারে টাইপকাস্ট ব্যবহারের চেয়ে দ্রুত হওয়া উচিত।
জান্পিও

উত্তরটি সঠিক নয়। ফাংশনের দ্বিতীয় প্যারামিটার হিসাবে সত্য ব্যবহার করার সময়, json_decode () বস্তুর পরিবর্তে মিশ্র অ্যারেগুলি ফিরিয়ে দেবে।
মারভিন সালাদিনগার

3

প্রথমে আমি আরও কিছু বেঞ্চমার্কিং করতে স্ক্রিপ্টটি পরিবর্তন করেছি (এবং কেবল 1 এর পরিবর্তে 1000 রানও করেছি):

<?php

ini_set('display_errors', 1);
error_reporting(E_ALL);

// Make a big, honkin test array
// You may need to adjust this depth to avoid memory limit errors
$testArray = fillArray(0, 5);

$totalJsonTime = 0;
$totalSerializeTime = 0;
$totalJsonWins = 0;

for ($i = 0; $i < 1000; $i++) {
    // Time json encoding
    $start = microtime(true);
    $json = json_encode($testArray);
    $jsonTime = microtime(true) - $start;
    $totalJsonTime += $jsonTime;

    // Time serialization
    $start = microtime(true);
    $serial = serialize($testArray);
    $serializeTime = microtime(true) - $start;
    $totalSerializeTime += $serializeTime;

    if ($jsonTime < $serializeTime) {
        $totalJsonWins++;
    }
}

$totalSerializeWins = 1000 - $totalJsonWins;

// Compare them
if ($totalJsonTime < $totalSerializeTime) {
    printf("json_encode() (wins: $totalJsonWins) was roughly %01.2f%% faster than serialize()\n", ($totalSerializeTime / $totalJsonTime - 1) * 100);
} else {
    printf("serialize() (wins: $totalSerializeWins) was roughly %01.2f%% faster than json_encode()\n", ($totalJsonTime / $totalSerializeTime - 1) * 100);
}

$totalJsonTime = 0;
$totalJson2Time = 0;
$totalSerializeTime = 0;
$totalJsonWins = 0;

for ($i = 0; $i < 1000; $i++) {
    // Time json decoding
    $start = microtime(true);
    $orig = json_decode($json, true);
    $jsonTime = microtime(true) - $start;
    $totalJsonTime += $jsonTime;

    $start = microtime(true);
    $origObj = json_decode($json);
    $jsonTime2 = microtime(true) - $start;
    $totalJson2Time += $jsonTime2;

    // Time serialization
    $start = microtime(true);
    $unserial = unserialize($serial);
    $serializeTime = microtime(true) - $start;
    $totalSerializeTime += $serializeTime;

    if ($jsonTime < $serializeTime) {
        $totalJsonWins++;
    }
}

$totalSerializeWins = 1000 - $totalJsonWins;


// Compare them
if ($totalJsonTime < $totalSerializeTime) {
    printf("json_decode() was roughly %01.2f%% faster than unserialize()\n", ($totalSerializeTime / $totalJsonTime - 1) * 100);
} else {
    printf("unserialize() (wins: $totalSerializeWins) was roughly %01.2f%% faster than json_decode()\n", ($totalJsonTime / $totalSerializeTime - 1) * 100);
}

// Compare them
if ($totalJson2Time < $totalSerializeTime) {
    printf("json_decode() was roughly %01.2f%% faster than unserialize()\n", ($totalSerializeTime / $totalJson2Time - 1) * 100);
} else {
    printf("unserialize() (wins: $totalSerializeWins) was roughly %01.2f%% faster than array json_decode()\n", ($totalJson2Time / $totalSerializeTime - 1) * 100);
}

function fillArray( $depth, $max ) {
    static $seed;
    if (is_null($seed)) {
        $seed = array('a', 2, 'c', 4, 'e', 6, 'g', 8, 'i', 10);
    }
    if ($depth < $max) {
        $node = array();
        foreach ($seed as $key) {
            $node[$key] = fillArray($depth + 1, $max);
        }
        return $node;
    }
    return 'empty';
}

আমি পিএইচপি 7 এর বিল্ডটি ব্যবহার করেছি:

পিএইচপি 7.0.14 (ক্লিটার) (নির্মিত: জানুয়ারী 18 2017 19:13:23) (এনটিএস) কপিরাইট (সি) 1997-2016 পিএইচপি গ্রুপ জেন্ড ইঞ্জিন v3.0.0, কপিরাইট (সি) 1998-2016 জেন্ড টেকনোলজিস জেন্ড ওপচে v7.0.14, কপিরাইট (সি) 1999-2016, জেন্ড টেকনোলজিস দ্বারা

এবং আমার ফলাফলগুলি ছিল:

সিরিয়ালাইজ () (জিত: ৯৯৯) জেসন_এনকোড () আনসরিয়ালাইজ (): (জিত: ৯ )7) তুলনায় মোটামুটি ৩৩.২ faster% বেশি ছিল জেসন_ডেকোড () আনসিয়েরালাইজ () (জিত: 987) এর চেয়ে প্রায় 48.35% দ্রুত ছিল জেএসন_ডেকোডের চেয়ে ()

সুতরাং পরিষ্কার , সিরিয়ালাইজ / আনসিরিয়ালাইজ করা হ'ল দ্রুততম পদ্ধতি, যখন জসন_এনকোড / ডিকোড সবচেয়ে বহনযোগ্য।

আপনি যদি এমন একটি দৃশ্যের বিষয়টি বিবেচনা করেন যেখানে আপনি সিরিয়ালযুক্ত তথ্য 10x পড়েন বা লেখেন বা কোনও পিএইচপি সিস্টেম থেকে পাঠানোর বা তার চেয়ে বেশি বার পাঠানোর প্রয়োজন হয়, আপনি সিরিয়ালাইজ / আনসিরিয়ালাইজেশন ব্যবহার করার চেয়ে আরও ভাল হন এবং সিরিয়ালাইজেশনের আগে এটি জসন_এনকোড বা জসন_ডেকোড রাখুন সময়ের নিরিখে।


2

এখানে ফলাফলগুলি দেখুন (পিএইচপি কোডটি জেএস কোড বাক্সে রাখার জন্য হ্যাকের জন্য দুঃখিত):

http://jsfiddle.net/newms87/h3b0a0ha/embedded/result/

ফলাফল: serialize()এবং unserialize()পৃথক আকারের অ্যারেগুলিতে পিএইচপি 5.4 এ উভয়ই উল্লেখযোগ্যভাবে দ্রুত।

জেসন_এনকোড বনাম সিরিয়ালাইজ এবং জসন_ডেকোড বনাম আনসিরিয়ালে তুলনা করার জন্য আমি বাস্তব বিশ্বের ডেটাতে একটি পরীক্ষা স্ক্রিপ্ট তৈরি করেছি। পরীক্ষাটি একটি ইন-প্রডাকশন ই-কমার্স সাইটের ক্যাচিং সিস্টেমে চালানো হয়েছিল। এটি কেবল ক্যাশে থাকা ডেটা গ্রহণ করে এবং সমস্ত ডেটা এনকোড / ডিকোড (বা সিরিয়ালাইজ / আনসিরিয়ালাইজেশন) করার সময় পরীক্ষা করে এবং আমি এটিকে টেবিল দেখতে সহজেই রেখেছি।

আমি এই পিএইচপি 5.4 শেয়ার হোস্টিং সার্ভার এ চালানো।

ফলাফলগুলি অত্যন্ত সিদ্ধান্তে পৌঁছেছিল যে এইগুলি বড় থেকে ছোট ডেটা সেটগুলির জন্য সিরিয়ালাইজ এবং আনসিরিয়ালাইজেশন ছিল স্পষ্ট বিজয়ী। বিশেষত আমার ব্যবহারের ক্ষেত্রে, json_decode এবং unserialize ক্যাচিং সিস্টেমের জন্য সবচেয়ে গুরুত্বপূর্ণ most আনসিরিয়ালাইজ করা এখানে প্রায় সর্বব্যাপী বিজয়ী ছিল। এটি সাধারণত 2 থেকে 4 বার ছিল (কখনও কখনও 6 বা 7 বার) জেসন_ডেকোডের মতো দ্রুত।

@ পিটার-বেইলি থেকে প্রাপ্ত ফলাফলের পার্থক্যটি লক্ষ করা আকর্ষণীয়।

ফলাফল উত্পন্ন করতে এখানে পিএইচপি কোড ব্যবহৃত হয়:

<?php

ini_set('display_errors', 1);
error_reporting(E_ALL);

function _count_depth($array)
{
    $count     = 0;
    $max_depth = 0;
    foreach ($array as $a) {
        if (is_array($a)) {
            list($cnt, $depth) = _count_depth($a);
            $count += $cnt;
            $max_depth = max($max_depth, $depth);
        } else {
            $count++;
        }
    }

    return array(
        $count,
        $max_depth + 1,
    );
}

function run_test($file)
{
    $memory     = memory_get_usage();
    $test_array = unserialize(file_get_contents($file));
    $memory     = round((memory_get_usage() - $memory) / 1024, 2);

    if (empty($test_array) || !is_array($test_array)) {
        return;
    }

    list($count, $depth) = _count_depth($test_array);

    //JSON encode test
    $start            = microtime(true);
    $json_encoded     = json_encode($test_array);
    $json_encode_time = microtime(true) - $start;

    //JSON decode test
    $start = microtime(true);
    json_decode($json_encoded);
    $json_decode_time = microtime(true) - $start;

    //serialize test
    $start          = microtime(true);
    $serialized     = serialize($test_array);
    $serialize_time = microtime(true) - $start;

    //unserialize test
    $start = microtime(true);
    unserialize($serialized);
    $unserialize_time = microtime(true) - $start;

    return array(
        'Name'                   => basename($file),
        'json_encode() Time (s)' => $json_encode_time,
        'json_decode() Time (s)' => $json_decode_time,
        'serialize() Time (s)'   => $serialize_time,
        'unserialize() Time (s)' => $unserialize_time,
        'Elements'               => $count,
        'Memory (KB)'            => $memory,
        'Max Depth'              => $depth,
        'json_encode() Win'      => ($json_encode_time > 0 && $json_encode_time < $serialize_time) ? number_format(($serialize_time / $json_encode_time - 1) * 100, 2) : '',
        'serialize() Win'        => ($serialize_time > 0 && $serialize_time < $json_encode_time) ? number_format(($json_encode_time / $serialize_time - 1) * 100, 2) : '',
        'json_decode() Win'      => ($json_decode_time > 0 && $json_decode_time < $serialize_time) ? number_format(($serialize_time / $json_decode_time - 1) * 100, 2) : '',
        'unserialize() Win'      => ($unserialize_time > 0 && $unserialize_time < $json_decode_time) ? number_format(($json_decode_time / $unserialize_time - 1) * 100, 2) : '',
    );
}

$files = glob(dirname(__FILE__) . '/system/cache/*');

$data = array();

foreach ($files as $file) {
    if (is_file($file)) {
        $result = run_test($file);

        if ($result) {
            $data[] = $result;
        }
    }
}

uasort($data, function ($a, $b) {
    return $a['Memory (KB)'] < $b['Memory (KB)'];
});

$fields = array_keys($data[0]);
?>

<table>
    <thead>
    <tr>
        <?php foreach ($fields as $f) { ?>
            <td style="text-align: center; border:1px solid black;padding: 4px 8px;font-weight:bold;font-size:1.1em"><?= $f; ?></td>
        <?php } ?>
    </tr>
    </thead>

    <tbody>
    <?php foreach ($data as $d) { ?>
        <tr>
            <?php foreach ($d as $key => $value) { ?>
                <?php $is_win = strpos($key, 'Win'); ?>
                <?php $color = ($is_win && $value) ? 'color: green;font-weight:bold;' : ''; ?>
                <td style="text-align: center; vertical-align: middle; padding: 3px 6px; border: 1px solid gray; <?= $color; ?>"><?= $value . (($is_win && $value) ? '%' : ''); ?></td>
            <?php } ?>
        </tr>
    <?php } ?>
    </tbody>
</table>

1

কেবলমাত্র একটি ফাই - আপনি যদি JSON এর মতো পড়তে ও বুঝতে সহজ কিছুতে নিজের ডেটা সিরিয়াল করতে চান তবে আরও সংক্ষেপণ এবং উচ্চতর পারফরম্যান্স সহ আপনার বার্তা প্যাকটি পরীক্ষা করা উচিত


2
এটি যদি কেবল একটি ফাই হয় তবে আপনি মন্তব্য হিসাবে এটি আরও ভাল করে রাখতে চাইবেন।
টেকনোফাইল

0

আপনি যদি ডেটা ব্যাকআপ করতে এবং কোনও অন্য মেশিনে বা এফটিপি এর মাধ্যমে পুনরুদ্ধার করতে চান তবে জেএসএন আরও ভাল।

উদাহরণস্বরূপ, যদি আপনি উইন্ডোজ সার্ভারে ডেটা সঞ্চয় করেন তবে এফটিপি এর মাধ্যমে এটি ডাউনলোড করুন এবং একটি লিনাক্সে পুনরুদ্ধার করুন চর্যাপটার পুনরায় এনকোডিংয়ের কারণে এটি আর কাজ করতে পারে না, কারণ সিরিয়ালিয়াল স্ট্রিংগুলির দৈর্ঘ্য এবং ইউনিকোডে সংরক্ষণ করে > ইউটিএফ -8 প্রায় 1 বাইট চর্যাচটার ট্রান্সকোডিং অ্যালগরিদম ক্র্যাশ করে দীর্ঘ 2 বাইটে পরিণত হতে পারে।


0

THX - এই বেঞ্চমার্ক কোডের জন্য:

তাদেরকে JSON 0,0031511783599854 সেকেন্ডের মধ্যে এনকোড: কনফিগারেশনের জন্য অ্যারে আমি ব্যবহারের আমার ফলাফল fallows হিসাবে
পিএইচপি 0,0037961006164551 সেকেন্ডের মধ্যে ধারাবাহিকভাবে
json_encode()মোটামুটিভাবে 20,47% তুলনায় দ্রুততর হয় serialize() তাদেরকে JSON 0,0070841312408447 সেকেন্ডের মধ্যে এনকোড
পিএইচপি 0,0035839080810547 সেকেন্ডের মধ্যে ধারাবাহিকভাবে
unserialize()মোটামুটিভাবে 97,66% তুলনায় দ্রুততর হয়json_encode()

সুতরাং - এটি আপনার নিজের ডেটাতে পরীক্ষা করুন।


আপনার মানে "আনসিয়ালাইজড ()" এ জাসন_ডেকোড () json_encode () "এর চেয়ে প্রায় 97.66% দ্রুত ছিল, হ্যাঁ?
মিজান-উদ-দিন

0

লোকেরা এখানে কী বলে তা সংক্ষিপ্ত করতে, json_decode / এনকোডটি সিরিয়ালাইজ / আনসিরিয়ালাইজ করা তুলনায় দ্রুত বলে মনে হচ্ছে তবে BUT করুন যদি সিরিয়ালাইজড অবজেক্টের ধরণটি পরিবর্তন করা হয়। যদি কোনও কারণে আপনি এই টাইপটি রাখতে চান তবে সিরিয়ালাইজ করুন!

(উদাহরণস্বরূপ stdClass বনাম অ্যারে চেষ্টা করুন)

ধারাবাহিকভাবে / unserialize:

Array cache:
array (size=2)
  'a' => string '1' (length=1)
  'b' => int 2
Object cache:
object(stdClass)[8]
  public 'field1' => int 123
This cache:
object(Controller\Test)[8]
  protected 'view' => 

json এনকোড / ডিকোড

Array cache:
object(stdClass)[7]
  public 'a' => string '1' (length=1)
  public 'b' => int 2
Object cache:
object(stdClass)[8]
  public 'field1' => int 123
This cache:
object(stdClass)[8]

আপনি দেখতে পাচ্ছেন যে জসন_নকোড / ডিকোড সমস্তকে স্টডি ক্লাসে রূপান্তরিত করে, যা খুব ভাল নয়, অবজেক্টের তথ্য হারিয়ে গেছে ... সুতরাং প্রয়োজনের ভিত্তিতে সিদ্ধান্ত নিন, বিশেষত যদি এটি কেবল অ্যারে না হয় ...


কেবল একটি নোট: বেশিরভাগ উত্তর উত্তর বলে যে সিরিয়ালাইজ / আনসিরিয়ালাইজেশন দ্রুততর is
Ecker00

-3

আমি আপনাকে সুপার ক্যাশে ব্যবহার করার পরামর্শ দেব, এটি একটি ফাইল ক্যাশে প্রক্রিয়া যা ব্যবহার করবে না json_encodeবা করবে না serialize। এটি ব্যবহার করা সহজ এবং অন্যান্য পিএইচপি ক্যাশে প্রক্রিয়াটির তুলনায় সত্যই দ্রুত।

https://packagist.org/packages/smart-php/super-cache

উদা:

<?php
require __DIR__.'/vendor/autoload.php';
use SuperCache\SuperCache as sCache;

//Saving cache value with a key
// sCache::cache('<key>')->set('<value>');
sCache::cache('myKey')->set('Key_value');

//Retrieving cache value with a key
echo sCache::cache('myKey')->get();
?>

-1। যদিও এটি আরও ভাল সমাধান হতে পারে তবে এই উত্তরের কোনও অংশই আসলে ওপির প্রশ্নের উত্তর দেয় না। ভবিষ্যতে, সম্ভবত প্রশ্নের উত্তর দেওয়ার চেষ্টা করুন তবে নীচের দিকে একটি পরামর্শ রেখে যে বিকল্প সমাধান হতে পারে তদন্তের উপযুক্ত।
তারাবিআমরিনবোলাব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.