Dalam beberapa tahun kebelakangan ini, dengan perkembangan pesat Internet mudah alih dan pembangunan pesat pengkomputeran awan, Internet of Things, kecerdasan buatan dan bidang lain, kecekapan pemprosesan data telah menjadi salah satu kebimbangan perusahaan utama. Dalam pembangunan web, pemprosesan data json telah menjadi pautan yang sangat diperlukan, sebagai kuasa utama dalam pembangunan web, juga berhadapan dengan masalah bagaimana memproses data json dengan cekap. Dalam konteks ini, artikel ini akan meneroka kecekapan menukar json kepada tatasusunan dalam PHP dan cara mengoptimumkannya.
Dalam PHP, operasi menukar data json kepada tatasusunan adalah sangat mudah, hanya gunakan fungsi json_decode(). Takrifan fungsi ini adalah seperti berikut:
mixed json_decode ( string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options = 0 ]]] )
Antaranya, parameter $json menunjukkan rentetan json untuk dinyahkod, parameter $assoc menunjukkan sama ada untuk menukar objek json kepada tatasusunan bersekutu, dan $ parameter kedalaman menunjukkan bilangan maksimum lapisan penyahkodan yang disokong ( Lalai ialah 512), dan parameter $options menunjukkan pilihan tingkah laku semasa penyahkodan.
Berikut ialah contoh mudah:
$json_str = '{"name":"张三","age":18}'; $arr = json_decode($json_str, true); print_r($arr);
Hasil keluarannya ialah:
Array ( [name] => 张三 [age] => 18 )
Ia boleh dilihat bahawa menukar rentetan json kepada tatasusunan adalah sangat mudah, dan kecekapan pemprosesan juga agak tinggi tinggi, menyokong penukaran tatasusunan bersekutu dan tatasusunan biasa pada masa yang sama.
Walaupun menukar json kepada tatasusunan adalah sangat mudah, akan terdapat kesesakan prestasi apabila memproses sejumlah besar data json. Pertama sekali, penyahkodan rentetan json memerlukan sumber sistem tertentu, seperti memori, CPU, dll. Kedua, apabila menukar rentetan json kepada tatasusunan, ia perlu dihuraikan dan ditukar lapisan demi lapisan mengikut struktur rentetan json Proses ini juga memerlukan banyak masa dan sumber.
Untuk menggambarkan masalah ini, berikut ialah contoh ujian prestasi Data json yang diuji mengandungi 10,000 objek, setiap objek mempunyai 10 atribut dan semua atribut adalah jenis rentetan.
Salin selepas log masuk
Keputusan ujian ialah:
10000 0.785
Dapat dilihat bahawa ia mengambil masa 0.785 saat untuk menyahkod dan menukar 10MB data json Kali ini mungkin digunakan dalam beberapa aplikasi dengan konkurensi tinggi dan nyata -keperluan masa akan menjadi halangan. Oleh itu, bagaimana untuk meningkatkan kecekapan menukar json kepada tatasusunan telah menjadi isu yang sangat penting.
Pelbagai penyelesaian pengoptimuman boleh diguna pakai untuk menangani kesesakan prestasi penukaran json kepada penukaran tatasusunan.
3.1. Memampatkan data json
Pertama sekali, anda boleh memampatkan data json untuk mengurangkan saiz rentetan json, dengan itu memendekkan masa penyahkodan dan penukaran. Kaedah pemampatan biasa termasuk gzip dan LZ4. Contohnya, menggunakan gzip untuk memampatkan data json dalam contoh di atas boleh mengurangkan saiz data kepada kira-kira 1.56MB, sekali gus memendekkan masa penyahkodan dan penukaran.
3.2. Gunakan kaedah penghuraian penstriman
Kedua, anda boleh menggunakan kaedah penghuraian penstriman untuk menghuraikan data json secara beransur-ansur untuk mengelakkan memuatkan keseluruhan rentetan json ke dalam memori pada satu masa. Anda boleh menggunakan fungsi json_stream_decode() dalam php untuk melaksanakan penghuraian penstriman. Contohnya:
write($line); if ($result !== null) { array_push($arr, $result); } } fclose($handle); echo count($arr) . " "; function json_parser() { $parser = new JsonStreamingParser_Parser(new class() implements JsonStreamingParser_Listener { private $current_obj; private $stack; public function start_document() { $this->stack = []; } public function start_object() { $this->current_obj = []; } public function end_object() { $obj = array_pop($this->stack); if (!empty($this->stack)) { $current_key = end($this->stack); $current_key[] = $obj; } else { array_push($this->current_obj, $obj); } } public function start_array() { $this->stack[] = []; } public function end_array() { $arr = array_pop($this->stack); if (!empty($this->stack)) { $current_key = end($this->stack); $current_key[] = $arr; } else { array_push($this->current_obj, $arr); } } public function key($key) { array_push($this->stack, [$key]); } public function value($value) { $current_key = end($this->stack); $current_key[] = $value; } public function whitespace($whitespace) { } }); return $parser; }
Dalam contoh ini, pustaka pihak ketiga JsonStreamingParser digunakan untuk melaksanakan penghuraian penstriman. Prinsip asas adalah untuk membuka data json kepada beberapa kepingan kecil, menghuraikan setiap bahagian kecil, dan menjana elemen tatasusunan yang sepadan. Dengan cara ini, anda boleh mengelak daripada memuatkan keseluruhan rentetan json ke dalam memori sekali gus, sekali gus meningkatkan kecekapan.
3.3. Gunakan protokol binari
Akhir sekali, anda boleh menggunakan protokol binari untuk menggantikan rentetan json dan menukarnya kepada data binari untuk penghantaran dan pemprosesan. Oleh kerana data binari biasanya lebih padat daripada data literal, ia boleh dihuraikan dengan lebih pantas. Dalam php, anda boleh menggunakan sambungan MessagePack untuk melaksanakan pemprosesan protokol binari. Contohnya:
$msgpack = new MessagePack(); $packed = $msgpack->pack($arr); $unpacked = $msgpack->unpack($packed);
Dalam contoh ini, tatasusunan ditukar kepada format binari dan kaedah pack() dan unpack() dalam kelas MessagePack digunakan untuk penukaran. Ia boleh dilihat bahawa menggunakan protokol binari boleh meningkatkan kecekapan penyahkodan dan penukaran.
Dalam pembangunan sebenar, json ialah format data yang sangat biasa digunakan dan juga merupakan salah satu format data standard API Web. Oleh itu, adalah sangat penting untuk mengoptimumkan kecekapan menukar json kepada tatasusunan dalam php. Dalam artikel ini, tiga penyelesaian pengoptimuman biasa diperkenalkan, termasuk menggunakan algoritma pemampatan, menggunakan penghuraian penstriman dan menggunakan protokol binari. Setiap penyelesaian pengoptimuman mempunyai kelebihan sendiri dan senario yang boleh digunakan, dan pembangun boleh memilih penyelesaian yang sesuai berdasarkan keperluan sebenar.
Atas ialah kandungan terperinci php json kepada kecekapan tatasusunan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!