第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

存儲PHP數(shù)組的首選方法(json_encode vs序列化)

存儲PHP數(shù)組的首選方法(json_encode vs序列化)

PHP
一只斗牛犬 2019-06-26 15:04:58
存儲PHP數(shù)組的首選方法(json_encode vs序列化)為了緩存的目的,我需要將多維關(guān)聯(lián)數(shù)組數(shù)據(jù)存儲在一個平面文件中。我偶爾會發(fā)現(xiàn)需要將其轉(zhuǎn)換為JSON,以便在我的Web應(yīng)用程序中使用,但大部分時間我將直接使用PHP中的數(shù)組。在這個文本文件中將數(shù)組存儲為JSON還是PHP序列化數(shù)組會更有效嗎?我環(huán)顧四周,似乎在PHP(5.3)的最新版本中,json_decode實際上比unserialize.目前,我傾向于將數(shù)組存儲為JSON,因為我覺得如果有必要的話,它更容易被人讀取,它可以在PHP和JavaScript中使用,只需花費很少的努力,而且從我所讀到的內(nèi)容來看,解碼速度甚至可能更快(不過,對編碼不太確定)。有人知道有什么陷阱嗎?有誰有很好的基準(zhǔn)來顯示這兩種方法的性能優(yōu)勢?
查看完整描述

3 回答

?
心有法竹

TA貢獻(xiàn)1866條經(jīng)驗 獲得超5個贊

取決于你的輕重緩急。

如果性能是你絕對的駕駛特點,那么一定要使用最快的。在做出選擇之前,一定要充分理解這些差異。

  • 不像

    serialize()

    您需要添加額外的參數(shù)以保持UTF-8字符不受影響:

    json_encode($array, JSON_UNESCAPED_UNICODE)

    (否則,它會將UTF-8字符轉(zhuǎn)換為Unicode轉(zhuǎn)義序列)。
  • JSON將沒有對象的原始類的內(nèi)存(它們總是被還原為stdClass的實例)。
  • 你不能利用

    __sleep()

    __wakeup()

    用JSON
  • 默認(rèn)情況下,只有公共屬性使用JSON序列化。(在

    PHP>=5.4

    你可以實現(xiàn)

    JsonSerialable

    若要更改此行為,請執(zhí)行以下操作。
  • JSON更便攜

而且可能還有一些其他的差異,我現(xiàn)在無法想象。

一種簡單的速度測試來比較這兩種情況

<?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 themif ($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';}


查看完整回答
反對 回復(fù) 2019-06-26
?
慕桂英4014372

TA貢獻(xiàn)1871條經(jīng)驗 獲得超13個贊

杰森比PHP的序列化格式更簡單和更快,應(yīng)該使用除非:

  • 您正在存儲深度嵌套數(shù)組:

    json_decode()

    :“如果JSON編碼的數(shù)據(jù)深于127個元素,此函數(shù)將返回false?!?/trans>
  • 您正在存儲需要非序列化為正確類的對象
  • 您正在與不支持json_decode的舊PHP版本交互


查看完整回答
反對 回復(fù) 2019-06-26
?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗 獲得超9個贊

我寫了一篇關(guān)于這個主題的博客:“緩存一個大數(shù)組:json、序列化還是var_export?“.在這篇文章中,序列化是從小到大數(shù)組的最佳選擇,對于非常大的數(shù)組(>70 MB),JSON是更好的選擇。


查看完整回答
反對 回復(fù) 2019-06-26
  • 3 回答
  • 0 關(guān)注
  • 839 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號