目次
シナリオ 1: 実際の環境でチャート データのリアルタイム更新をシミュレートする
maxCount=100000
シナリオ 2: オブジェクトが空のオブジェクトかどうかを判断する
ホームページ ウェブフロントエンド jsチュートリアル JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

Mar 14, 2019 am 11:40 AM
javascript json

この記事では、JSON.parse() と JSON.stringify() のパフォーマンス テスト (例) を紹介します。一定の参考値があります。必要な友人は参考にしてください。お役に立てれば幸いです。 。

JSON.parse(JSON.stringify(obj)) 通常、ディープコピーに使用しますが、端的に言えば、JSON.stringify を使用して js オブジェクト (JSON 文字列) をシリアル化し、 JSON.parse js オブジェクトを逆シリアル化 (復元) します。なぜこのコード行でディープコピーが実現できるのか、どのような制限があるのか​​などについては、この記事では紹介しません。この記事で探りたいのは、このコード行の実行がどの程度効率的かということです。何気なく使っても何か問題はありますか?

JS パフォーマンス テスト用の最初の 2 つの依存関係関数

/**
 * 一个简单的断言函数
 * @param value {Boolean} 断言条件
 * @param desc {String} 一个消息
 */
function assert(value, desc) {
    let li = document.createElement('li');
    li.className = value ? 'pass' : 'fail';
    li.appendChild(document.createTextNode(desc));
    document.getElementById('results').appendChild(li);
}
ログイン後にコピー
/**
 * 一个测试套件,定时器是为了多次执行减少误差
 * @param fn {Function} 需要多次执行的代码块(需要测试、比对性能的代码块)
 * @param config {Object} 配置项,maxCount: 执行代码块的for循环次数,times: 定时器执行次数
 */
function intervalTest(fn, config = {}) {
    let maxCount = config.maxCount || 1000;
    let times = config.times || 10;
    let timeArr = [];
    let timer = setInterval(function () {
        let start = new Date().getTime();
        for (let i = 0; i  p + c) / times;
            let p = document.createElement('p');
            p.innerHTML = `for循环:${maxCount}次,定时器执行:${times}次,平均值:${average} ms`;
            document.body.appendChild(p);
        }
    }, 1000);
}
ログイン後にコピー

いくつかの初期データを定義する

let jsonData = {
    title: 'hhhhh',
    dateArr: [],
    series: [
        {
            name: 'line1',
            data: []
        },
        {
            name: 'line2',
            data: []
        },
        {
            name: 'line3',
            data: []
        },
    ]
};

let res = [
    {
        name: 'line1',
        value: 1
    },
    {
        name: 'line2',
        value: 2
    },
    {
        name: 'line3',
        value: 3
    },
];
ログイン後にコピー

シナリオ 1: 実際の環境でチャート データのリアルタイム更新をシミュレートする

データ処理関数

/**
 * 处理json数据的函数。模拟真实环境中图表数据实时更新
 * @param lastData {Object} 上一次的数据
 * @param res {Array} 当前数据
 * @returns data 处理完成后的结果集
 */
function handleJsonData(lastData, res) {
    // 1. 使用 JSON.parse(JSON.stringify()) 深拷贝
    let data = JSON.parse(JSON.stringify(lastData));

    // 2. 不使用JSON序列化,直接修改参数
    // let data = lastData;

    if (data.dateArr.length > 60) {
        data.dateArr.shift();
        for (let i = 0; i <h4 id="maxCount">maxCount=100</h4><p>実行して、最初にmaxCount=100として、100回ループします</p><pre class="brush:php;toolbar:false">let jsonTest = function () {
    jsonData = handleJsonData(jsonData, res);
};

intervalTest(jsonTest, {maxCount: 100});
ログイン後にコピー

1。JSON.parse( JSON.stringify ()) ディープコピーの結果:

JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

2. JSON シリアル化を使用せずにパラメーターを直接変更した結果:

function handleJsonData(lastData, res) {
    // 1. 使用 JSON.parse(JSON.stringify()) 深拷贝
    // let data = JSON.parse(JSON.stringify(lastData));

    // 2. 不使用JSON序列化,直接修改参数
    let data = lastData;
    
    // ...
}
ログイン後にコピー

JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

maxCount=1000

intervalTest(jsonTest, {maxCount: 1000});
ログイン後にコピー

1. JSON.parse(JSON.stringify()) のディープ コピー結果を使用します:

JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

2。パラメータを直接変更した結果である JSON シリアル化は使用しないでください:

JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

maxCount=10000

intervalTest(jsonTest, {maxCount: 10000});
ログイン後にコピー

1。JSON.parse(JSON.stringify() を使用します) ) ディープコピー 結果:

JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

#2. JSON シリアル化を使用せず、パラメーターを直接変更した結果:

JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

シナリオ 2: オブジェクトが空のオブジェクトかどうかを判断する

// 1. 使用 JSON.stringify() 判断一个对象是否为空对象
let isEmptyObject1 = function () {
    if (JSON.stringify(jsonData) === '{}') {
        // do something
    }
};

// 2. 使用 Object.keys().length 判断一个对象是否为空对象
let isEmptyObject2 = function () {
    if (Object.keys(jsonData).length === 0) {
        // do something
    }
};
ログイン後にコピー

判定条件を通過するだけです。if

maxCount=1000

内に実行コードはありません。 1. JSON.stringify() を使用して、オブジェクトが空のオブジェクトかどうかの結果を判定します:

intervalTest(isEmptyObject1, {maxCount: 1000});
ログイン後にコピー

JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

2. Object.keys( ).length を使用して、オブジェクトが空のオブジェクトかどうかを判断します。 :

intervalTest(isEmptyObject2, {maxCount: 1000});
ログイン後にコピー

JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

maxCount=10000

1. JSON.stringify() を使用した結果オブジェクトが空のオブジェクトかどうかを判断するには:
JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

2. Object.keys().length を使用して、オブジェクトが空のオブジェクトかどうかを判断します。結果:

JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

maxCount=100000

1. JSON.stringify() を使用して、オブジェクトが空のオブジェクトかどうかを判断します。結果:

JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

2. Object.keys().length を使用して、オブジェクトが空のオブジェクトかどうかを判断します。結果:

JSON.parse() と JSON.stringify() のパフォーマンステスト (例)

JSON.parse( ) および JSON.stringify() はここで終了します。パラメータの変更と実行されるコード ブロックの変更では、結果が異なる場合があります。上記の結果は参考用です。

小さな結論: JSON.parse() と JSON.stringify() を使用できない場合は、よりパフォーマンスの高い代替手段を使用してください。 PS: 特に、JSON データが比較的大きい場合に、複数回実行する必要があるコード ブロックについては特にそうです。

JSON.parse() と JSON.stringify() については、さらに多くの知識があなたを待っています。一緒にコミュニケーションと学習をするために、皆さんを歓迎します ~

JSON.parse(JSON.stringify(obj)) について: JSON.parse(JSON.stringify(obj)) のディープ コピーを実装する際に注意すべき落とし穴について。 stringify(obj))
ディープ コピーについて: ディープ コピーの究極の探索 (99% の人は知りません)



以上がJSON.parse() と JSON.stringify() のパフォーマンステスト (例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL5.7とMySQL8.0の違いは何ですか? MySQL5.7とMySQL8.0の違いは何ですか? Feb 19, 2024 am 11:21 AM

MySQL5.7 と MySQL8.0 は 2 つの異なる MySQL データベース バージョンであり、それらの間には主な違いがいくつかあります: パフォーマンスの向上: MySQL8.0 では、MySQL5.7 と比較してパフォーマンスがいくつか向上しています。これには、より優れたクエリ オプティマイザー、より効率的なクエリ実行プランの生成、より優れたインデックス作成アルゴリズムと並列クエリなどが含まれます。これらの改善により、クエリのパフォーマンスとシステム全体のパフォーマンスが向上します。 JSON サポート: MySQL 8.0 では、JSON データのストレージ、クエリ、インデックス作成など、JSON データ型のネイティブ サポートが導入されています。これにより、MySQL での JSON データの処理と操作がより便利かつ効率的になります。トランザクション機能: MySQL8.0 では、アトミックなどのいくつかの新しいトランザクション機能が導入されています。

PHP 配列を JSON に変換するためのパフォーマンス最適化のヒント PHP 配列を JSON に変換するためのパフォーマンス最適化のヒント May 04, 2024 pm 06:15 PM

PHP 配列を JSON に変換するためのパフォーマンスの最適化方法には、JSON 拡張機能と json_encode() 関数の使用、文字エスケープを回避するためのバッファーの使用、およびサードパーティのエンコード結果の使用の検討が含まれます。 JSONエンコーディングライブラリ。

Pandas の使用法チュートリアル: JSON ファイルを読み取るためのクイック スタート Pandas の使用法チュートリアル: JSON ファイルを読み取るためのクイック スタート Jan 13, 2024 am 10:15 AM

クイック スタート: JSON ファイルを読み取る Pandas の方法、特定のコード サンプルが必要です はじめに: データ分析とデータ サイエンスの分野では、Pandas は重要な Python ライブラリの 1 つです。豊富な機能と柔軟なデータ構造を備え、さまざまなデータを簡単に処理・分析できます。実際のアプリケーションでは、JSON ファイルを読み取る必要がある状況によく遭遇します。この記事では、Pandas を使用して JSON ファイルを読み取る方法を紹介し、具体的なコード例を添付します。 1.パンダのインストール

Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化をどのように制御しますか? Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化をどのように制御しますか? May 06, 2024 pm 10:09 PM

Jackson ライブラリのアノテーションは、JSON のシリアル化と逆シリアル化を制御します。 シリアル化: @JsonIgnore: プロパティを無視します @JsonProperty: 名前を指定します @JsonGetter: get メソッドを使用します @JsonSetter: set メソッドを使用します Deserialization: @JsonIgnoreProperties: プロパティ @ JsonProperty を無視します:名前を指定 @JsonCreator: コンストラクターを使用 @JsonDeserialize: カスタム ロジック

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

PHPを深く理解する:JSON Unicodeを中国語に変換する実装方法 PHPを深く理解する:JSON Unicodeを中国語に変換する実装方法 Mar 05, 2024 pm 02:48 PM

PHP の深い理解: JSONUnicode を中国語に変換する実装方法 開発中、JSON データを処理する必要がある状況によく遭遇しますが、特に変換する必要がある場合、JSON 内の Unicode エンコードによっていくつかのシナリオで問題が発生します。 Unicode エンコードを漢字に変換する場合。 PHP では、この変換処理を実現するためのメソッドがいくつかありますが、以下では一般的なメソッドを紹介し、具体的なコード例を示します。まず、JSON の Un について理解しましょう

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが

PHP 配列を JSON に変換するための簡単なヒント PHP 配列を JSON に変換するための簡単なヒント May 03, 2024 pm 06:33 PM

PHP 配列は、 json_encode() 関数を使用して JSON 文字列に変換できます (例: $json=json_encode($array);)。逆に、 json_decode() 関数を使用して JSON から配列に変換できます ($array= json_decode($json);) 。その他のヒントには、深い変換の回避、カスタム オプションの指定、サードパーティ ライブラリの使用などがあります。

See all articles