Javascript 関数を高速化するにはどうすればよいですか
最近のプロジェクトで、効率がまだ不十分な機能に遭遇しました。この関数は 2 つのマップ ループ、3 つのフィルター (それぞれにインクルードを伴う)、および組み込みの検索を備えた追加のマップを実行し、合計 12 回の反復を実行しました。これらのメソッドの一部 (フィルターなど) は配列全体を走査する必要はありませんが、特に大量の項目の場合、この操作は依然としてかなりのコストがかかりました。
この関数の複雑さは O(n * m) であり、プロジェクトが拡大するにつれてすぐに問題になる可能性があります。
そこで、この関数を最適化することにしました。私がとった最初のステップは、2 つのキー配列を Set に置き換えることでした。 JavaScript では、Set は一意のデータを格納する構造であり、配列よりもはるかに高速な存在チェックを提供します。配列の複雑度が O(n) であることを確認すると、Set では O(1) になります。さらに、Set.has メソッドは、Array.includes とは異なり、Set 内のデータ数が増加してもパフォーマンスが低下しません。
この変更により、アレイ上で動作するフィルターはすでに大幅に改善されています。ただし、マップの 1 つには、最適化できる Array.find() もありました。 JavaScript では、Map はインデックス付きリストですが、Array.find は線形検索を実行するため、コードが実行されるプロセッサのパフォーマンスに応じて、Map よりも 2,100 ~ 12,000 倍遅くなる可能性があります。
ループの 1 つで Array.find を Map.get に置き換えることで、反復の合計数を 12 から 9 に減らすことができました。 3 つのループの削減はそれほど重要ではないように思えるかもしれませんが、アルゴリズムの複雑さはさらに大きくなりました。 O(n m)、関数の実行時間は 96% も短縮されました!
Intel Core i7-10510U で実行されたテストでは、配列を使用した関数の実行は、5,000 項目の配列を使用した Map および Set を使用した実行より 28 倍の時間がかかりました (191.19 ミリ秒から 6.80 ミリ秒)。
配列を使用した元のアルゴリズムの複雑さは O(n * m) でしたが、実行時間は項目数に応じて指数関数的に増加したことに言及する価値があります。ソフトウェア開発シナリオでは、ビジネスの成長とコードが実行されるマシンの制限を考慮することが重要です。たとえば、配列が 50,000 項目に増加した場合、元のアルゴリズムの実行時間は 13,585 ミリ秒ですが、Set と Map を使用して最適化されたアルゴリズムでは 135 ミリ秒しかかかりません。この場合、元のアルゴリズムは 100 倍遅くなり、最適化により実行時間が 99% 削減されることがわかります。
結論
情報取得に関しては、Array と比較して Set と Map の速度の優位性を考慮すると、Array.filter や Array.find などの繰り返しでこの情報を確認する必要がある場合、Set または Map を作成するための繰り返しのコストは正当化されます。
ただし、シーケンシャルな順序付けができない、インデックスによる要素への直接アクセスが不可能、重複した要素を保存できないという制限など、いくつかの欠点があるため、Set の使用が常に実行可能であるとは限りません。
これらの制限にもかかわらず、多くの状況において、配列を Set または Map に置き換えることは、パフォーマンスと効率の点で大きな利点をもたらします。
以上がJavascript 関数を高速化するにはどうすればよいですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック











Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。
