JavaScriptのスプレッド演算子のパフォーマンスを向上させるにはどうすればよいですか?
この記事では、スプレッド演算子のパフォーマンスをどのように改善できるかを確認する興味深いテストを実施します。
スプレッド演算子が配列でどのように機能するかを簡単に紹介することから始めましょう。
展開演算子 (一般的に使用される 3 つ) を使用すると、配列を小さなブロックごとに展開できます。次に、角かっこ構文 []
を使用して、これらの小さな部分を再組み立てして、新しい配列を構築します。
スプレッド演算子は、角括弧 []
内のどこにでも配置できます。
const numbers = [1, 2, 3]; [0, ...numbers]; // => [0, 1, 2, 3] [0, ...numbers, 4]; // => [0, 1, 2, 3, 4] [...numbers, 4]; // => [1, 2, 3, 4]
最初の質問に答えると、配列リテラル内にスプレッド演算子を配置するとパフォーマンスが向上しますか?さらに詳しく調べてみましょう。
先頭関数と末尾関数に追加
パフォーマンスの比較を始める前に、2 つの関数を定義しましょう。
最初の関数は appendToTail()
です。
function appendToTail(item, array) { return [...array, item]; } const numbers = [1, 2, 3]; appendToTail(10, numbers); // => [1, 2, 3, 10]
appendToTail()
を使用すると、配列の末尾に値を挿入できます。この関数は、[...array, item]
という記述方法を使用します。
2 番目の関数は appendToHead()
です。
function appendToHead(item, array) { return [item, ...array]; } const numbers = [1, 2, 3]; appendToHead(10, numbers); // => [10, 1, 2, 3]
appendToHead()
は、値が追加された新しい配列を返す純粋な関数です。元の配列の先頭に挿入されます。 [item, ...array]
を使用します。
正直に言うと、上記の 2 つの関数のパフォーマンスに基づいて、これらの関数の効率が異なると考える理由はありません。しかし、現実は想像とは異なるかもしれないので、テストを続けてみましょう。
パフォーマンス テスト
MacBook Pro
を使用して、次の 3 つのブラウザ ラップトップでテストしました[... 配列, 項目]
と [item, ...array]
、2 つのパフォーマンスを比較します:
- Chrome 76
- Firefox 68
- Safari 12.1
パフォーマンス テストの結果は次のとおりです:
予想どおり、Firefox および Safari ブラウザーでは [ ...array, item]
と [item, ...array]
のパフォーマンスは同じです。
ただし、Chrome では、[...array, item]
は [item, ...array]
の 2 倍の速度で実行されます。これは有益な結果です。
Chrome のスプレッド演算子のパフォーマンスを向上させるには、配列リテラルの先頭にスプレッド演算子を使用します。
const result = [...array, item];
しかし、別の疑問が生じます。この問題の原因は何ですか?
V8 エンジンのバージョン 7.2 以降、Chrome での JavaScript 実行のサポートが提供され、スプレッド演算子で新しい最適化を実行できるようになりました: 高速パス最適化。
これがどのように機能するかを次のような文で説明します。
この最適化を行わないと、エンジンが展開演算子 [...iterable, item]
,これにより、反復可能オブジェクト iterator.next()
の反復子が呼び出されます。反復ごとに、結果配列のメモリが増加し、反復結果が結果配列に追加されます。
しかし、高速パス最適化 は、既知の反復可能オブジェクト (整数配列など) を検出し、反復子オブジェクトの作成を完全にスキップします。次に、エンジンは拡張配列の長さを読み取り、結果の配列にメモリを 1 回だけ割り当てます。次に、配列はインデックスによって伝播され、結果の配列に各項目が追加されます。
高速パスの最適化では、反復オブジェクトの作成がスキップされ、結果にメモリが 1 回だけ割り当てられます。これにより、パフォーマンスが向上します。
サポートされるデータ構造
ファスト パスの最適化は、次の標準 JavaScript データ構造で機能します。
#配列
const numbers = [1, 2, 3, 4]; [...numbers, 5]; // => [1, 2, 3, 4, 5]
文字列
const message = 'Hi'; [...message, '!']; // => ['H', 'i', '!']
セット
const colors = new Set(['blue', 'white']); [...colors, 'green']; // => ['blue', 'white', 'green'] [...colors.values(), 'green']; // => ['blue', 'white', 'green'] [...colors.keys(), 'green']; // => ['blue', 'white', 'green']
Maps
Map オブジェクトでは、map.keys() メソッドと
map.values() メソッドのみがサポートされます:
const names = new Map([[5, 'five'], [7, 'seven']]); [...names.values(), 'ten']; // => ['five', 'seven', 'ten'] [...names.keys(), 10]; // => [5, 7, 10]
結論
展開された配列が配列の先頭にある場合、高速パスの最適化によりパフォーマンスが向上します。これは、V8 エンジン バージョン 7.2 (Chrome v72 および NodeJS v12 に付属の機能) で動作します。 この最適化により、パフォーマンス テストでは、[... array, item] が
[item, ...array] の少なくとも 2 倍の速度で実行されることが示されています。
元のリンク: https://dmitripavlutin.com/javascript-spread-operator-performance-optimization/プログラミング関連の知識の詳細については、次を参照してください:
プログラミング ビデオ ! !
以上がJavaScriptのスプレッド演算子のパフォーマンスを向上させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

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

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript は Web 開発で広く使用されているプログラミング言語であり、WebSocket はリアルタイム通信に使用されるネットワーク プロトコルです。 2 つの強力な機能を組み合わせることで、効率的なリアルタイム画像処理システムを構築できます。この記事では、JavaScript と WebSocket を使用してこのシステムを実装する方法と、具体的なコード例を紹介します。まず、リアルタイム画像処理システムの要件と目標を明確にする必要があります。リアルタイムの画像データを収集できるカメラ デバイスがあるとします。
