検索

Rishi Purwar 著✏️

JavaScript アプリケーションをしばらく構築している場合は、おそらく Lodash などのユーティリティ ライブラリを使用したことがあるでしょう。これらのライブラリには、JavaScript でのコーディングをより簡単かつ効率的にする便利な機能が満載されています。ただし、プロジェクトが成長し、より多くのユーティリティ関数を使用し始めると、バンドルのサイズも増加し始めることに気付くかもしれません。

これは、Lodash のような重いライブラリに依存している場合に特に当てはまり、より良い代替手段はないのかと疑問に思うでしょう。

そこで es-toolkit が登場します。これは、軽量で堅牢な TypeScript サポートを備えた最新の高性能 JavaScript ユーティリティ ライブラリであり、Lodash のような人気のあるライブラリの優れた代替品となります。

es-toolkit と Lodash の主な比較は次のとおりです。

  • es-toolkit は、関数、配列、オブジェクト、文字列、数学、述語、Promise などの領域をカバーする、Lodash と同様の主要なユーティリティ関数を提供します
  • es-toolkit の関数は、実装で最新の JavaScript API を使用し、型チェックに TypeScript を使用し、追加の防御コードの必要性を減らすため、Lodash の関数よりも高速であることがよくあります。
  • パフォーマンス ベンチマークは、es-toolkit 関数が Lodash の同等の関数よりも優れており、場合によっては大幅なマージンを上回っていることを示しています
  • es-toolkit の関数は、Lodash の同等の関数と比較してバンドル サイズが大幅に小さいため、読み込み時間が短縮され、パフォーマンスが向上します
  • es-toolkit は、最新の JavaScript 機能を活用し、Lodash に見られる相互依存関係を回避することで、パフォーマンスとバンドル サイズの課題に対処します
  • es-toolkit 関数はほとんどがスタンドアロンであり、ユーティリティ関数が相互依存していることが多い Lodash とは異なり、不要なコードが意図せず組み込まれることを防ぎます

これらの違いについて核心を説明し、JavaScript プロジェクトで es-toolkit を使用する方法を見てみましょう。

es-toolkitの主な機能

es-toolkit がもたらすものを簡単に見てみましょう:

  • 関数の結果をキャッシュするためのメモ化や、関数の呼び出し頻度を制限するためのデバウンスなどの関数
  • 配列間の相違点を見つけるために重複と差異を除外するための uniq のような配列
  • ディープ クローン作成用の cloneDeep やネストされたオブジェクトをフラット構造に変換する flattenObject など、JavaScript オブジェクトを処理するためのツール
  • 文字列を Kebab-case に変換する kebabCase などの文字列操作ツール
  • 数学ヘルパーは、乱数を生成する Random や四捨五入する Round などを使用します
  • isNil などの型ガード関数を使用して、null または未定義の値を簡単にチェックできます
  • 実行を少し一時停止するための遅延など、非同期コードを操作するためのユーティリティ

パフォーマンスとバンドル サイズの比較

es-toolkit の利点を真に理解するために、そのパフォーマンスとバンドル サイズを Lodash と比較してみましょう。

パフォーマンス

es-toolkit の関数は、実装で最新の JavaScript API を使用しているため、Lodash の関数よりも高速であることがよくあります。たとえば、es-toolkit の省略関数は、lodash の省略関数よりも約 11.8 倍高速です。

これは、さまざまな関数に対する es-toolkit と lodash-es のパフォーマンスを比較した表です。

Function es-toolkit@0.0.1 lodash-es@4.17.21 Difference
omit 4,767,360 times 403,624 times 11.8×
pick 9,121,839 times 2,663,072 times 3.43×
differenceWith 9,291,897 times 4,275,222 times 2.17×
difference 10,436,101 times 5,155,631 times 2.02×
intersectionWith 8,074,722 times 3,814,479 times 2.12×
intersection 9,999,571 times 4,630,316 times 2.15×
unionBy 6,435,983 times 3,794,899 times 1.69×
union 5,059,209 times 4,771,400 times 1.06×
dropRightWhile 7,529,559 times 5,606,439 times 1.34×
groupBy 5,000,235 times 5,206,286 times 0.96×

バンドルサイズ

バンドルのサイズに関して言えば、es-toolkit は本当に優れています。バンドル サイズが小さいほど、Web アプリケーションの読み込みが速くなり、特に低速のネットワークでのパフォーマンスが向上します。

ここでは、es-toolkit と lodash-es のいくつかの一般的な関数のバンドル サイズの比較を示します。

Function es-toolkit@0.0.1 lodash-es@4.17.21 Difference
sample 88 bytes 2,000 bytes -95.6 percent
difference 91 bytes 3,190 bytes -97.2 percent
sum 152 bytes 413 bytes -63.2 percent
debounce 144 bytes 1,400 bytes -89.7 percent
throttle 110 bytes 1,460 bytes -92.5 percent
pick 657 bytes 3,860 bytes -83.0 percent
zip 797 bytes 1,790 bytes -55.5 percent

es-toolkit の機能は、Lodash の対応する機能と比較してはるかに小さいです。たとえば、es-toolkit のサンプル関数はわずか 88 バイトですが、Lodash の同じ関数は 2,000 バイトで、ほぼ 96% 小さいです!

JavaScript アプリでの es-toolkit の使用

いくつかの例を見て、JavaScript アプリケーションで es-toolkit を使用するのがいかに簡単かを見てみましょう。このセクションでは、デバウンス、スロットル、オブジェクトからの特定のプロパティの選択、配列からの重複の削除などの一般的なタスクを es-toolkit がどのように処理するかを見ていきます。

それでどうなるでしょうか?作業をさらに簡単にするために、クローンを作成してすぐに実験を開始できるスターター コード リポジトリを GitHub にまとめました。ここで取り上げるすべての例の HTML および CSS コードと、開始するために必要なものがすべて含まれています。ここのリポジトリをチェックして、フォローしてください。

デバウンスの例

ユーザーがさまざまなトピックに関する情報を検索できる Web サイトの検索機能を構築しているとします。

ユーザーが入力するたびにデータをフェッチしたいが、キーストロークごとにリクエストを送信する必要はありません。そうしないと、API が過剰な呼び出しであふれてしまう可能性があります。ここで、es-toolkit のデバウンス機能が役立ちます。

その仕組みは次のとおりです:

import { debounce } from "es-toolkit";

// a function that simulates an API call
function fetchData(query) {
  console.log(`Fetching data for: ${query}`);
}

// Using es-toolkit debounce function
const debouncedFetchData = debounce(fetchData, 1000);

document.getElementById("search-input").addEventListener("input", (event) => {
    const query = event.target.value;
    debouncedSearch(query);
});

以下のデモでは、5 文字を入力しましたが、fetchData 関数は入力を少し止めた後にのみ呼び出されます。

このようにして、デバウンス機能を使用してキーを押すたびに不要な API リクエストを行うことを回避できます。
es-toolkit, a Lodash alternative

スロットルの例

Web ページ上に、クリックするとさらに投稿を読み込むボタンがあるとします。ボタンがあまりにも早くクリックされた場合に複数の API 呼び出しが行われないようにするには、es-toolkit の throttle 関数を使用できます。これにより、ボタンが複数回クリックされた場合でも、API 呼び出しが設定された間隔でのみ発生することが保証されます。

使用方法は次のとおりです:

// Throttle Example
import { throttle } from "es-toolkit";

// Function to fetch posts from an API
async function fetchPosts() {
  console.log("Fetching new posts...");
  const response = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await response.json();
  console.log("Posts fetched:", posts);
}
// Create a throttled version of fetchPosts
const throttledFetchPosts = throttle(fetchPosts, 2000);

// Set up an event listener on the button
document.getElementById("fetch-more-posts").addEventListener("click", () => {
  console.log("button clicked");
  throttledFetchPosts();
});

この例では、ユーザーが「Fetch More Posts」ボタンを素早くクリックしても、以下のデモに示すように、fetchPosts 関数は 2 秒に 1 回しかトリガーされません。
es-toolkit, a Lodash alternative

選択例

詳細なユーザー プロファイル データがあるが、ユーザー名、電子メール、年齢などの特定のプロパティのみをユーザー概要コンポーネントに表示したいとします。 pick 関数を使用すると、これらのプロパティを簡単に抽出できます。

これがどのように機能するかを示すデモです:

// Pick Example
import { pick } from "es-toolkit";

// dummy user data
const user = {
  id: 1,
  username: "johndoe",
  firstName: "John",
  lastName: "Doe",
  email: "john.doe@example.com",
  age: 30,
  address: {
    street: "123 Main St",
    city: "Anytown",
    country: "USA",
  },
  phoneNumber: "1234-5678",
};

// Use pick to select specific properties
const pickedUser = pick(user, ["username", "email", "age"]);

console.log("pickedUser", pickedUser)

この例では、pick 関数はユーザー オブジェクトからユーザー名、電子メール、および年齢のプロパティを抽出します。コンソール ログには次が出力されます:

import { debounce } from "es-toolkit";

// a function that simulates an API call
function fetchData(query) {
  console.log(`Fetching data for: ${query}`);
}

// Using es-toolkit debounce function
const debouncedFetchData = debounce(fetchData, 1000);

document.getElementById("search-input").addEventListener("input", (event) => {
    const query = event.target.value;
    debouncedSearch(query);
});

ユニークな例

ユーザーがタグを追加して投稿を分類できるブログを運営していると想像してください。各タグが 1 回だけ表示されるようにする必要があります。ここで、es-toolkit の uniq 関数が非常に役立ちます。これは、配列から重複を除外し、一意のタグのリストを取得するのに役立ちます。

これが実際的な例です:

// Throttle Example
import { throttle } from "es-toolkit";

// Function to fetch posts from an API
async function fetchPosts() {
  console.log("Fetching new posts...");
  const response = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await response.json();
  console.log("Posts fetched:", posts);
}
// Create a throttled version of fetchPosts
const throttledFetchPosts = throttle(fetchPosts, 2000);

// Set up an event listener on the button
document.getElementById("fetch-more-posts").addEventListener("click", () => {
  console.log("button clicked");
  throttledFetchPosts();
});

上記の例では、uniq 関数はタグ配列から重複を削除します。コンソール ログには次が出力されます:

// Pick Example
import { pick } from "es-toolkit";

// dummy user data
const user = {
  id: 1,
  username: "johndoe",
  firstName: "John",
  lastName: "Doe",
  email: "john.doe@example.com",
  age: 30,
  address: {
    street: "123 Main St",
    city: "Anytown",
    country: "USA",
  },
  phoneNumber: "1234-5678",
};

// Use pick to select specific properties
const pickedUser = pick(user, ["username", "email", "age"]);

console.log("pickedUser", pickedUser)

es-toolkit がパフォーマンスとバンドル サイズの課題にどのように対処するか

es-toolkit がこれらの課題にどのように取り組むかについて興味があるかもしれません。 es-toolkit は内部的に最新の JavaScript API を活用して、より高速なパフォーマンスと大幅に小さいバンドル サイズを実現します。

それに加えて、es-toolkit は TypeScript を使用します。これにより、通常は実行時に引数の型をチェックする余分な防御コードの多くを削減できます。これにより、コードがより効率的に実行されるだけでなく、処理速度を低下させる可能性がある不要なオーバーヘッドが最小限に抑えられます。

もう 1 つの重要な違いは、Lodash ユーティリティ関数は多くの場合相互依存していることです。つまり、1 つの関数をインポートすると、他の多くの関数も一緒にドラッグできることになります。対照的に、es-toolkit の機能はほとんどがスタンドアロンであるため、バンドルを軽量に保つことができます。

違いを実際に確認するには、webpack-bundle-analyzer を使用してバンドルのサイズを視覚化します。すべての設定は完了したので、メイン ブランチにチェックアウトして、クローンされたリポジトリのルートから npm i && npm run build を実行するだけで、バンドルに関するすべての詳細が記載されたページが開きます。

下の画像は、es-toolkitを使用した場合のバンドルサイズを示しています。ほとんどの es-toolkit 関数はスタンドアロンであるため、バンドル サイズが小さくなっていることがわかります。

es-toolkit, a Lodash alternative

ここで、上記の例の import ステートメント内の es-toolkit を lodash-es に置き換え、npm run build を再度実行して、lodash-es バンドル サイズを確認してみましょう。

下の画像は、Lodash 関数がほとんど相互依存しており、1 つだけをインポートするときに他の多くのユーティリティを取り込んでいることを示しています。

es-toolkit, a Lodash alternative

結論

es-toolkit は、特にパフォーマンスとバンドル サイズが重要な考慮事項である場合に、Lodash などのユーティリティ ライブラリの優れた代替手段となります。バンドルのサイズが小さく、最新の JavaScript 機能の使用法、および堅固な TypeScript サポートにより、開発者にとって優れた選択肢となります。

この es-toolkit の探索が JavaScript プロジェクトに役立つことを願っていますが、ここで終わらないでください。ご自身のアプリケーションで es-toolkit を試して、以下のコメントで経験を共有することをお勧めします。コーディングを楽しんでください!


パフォーマンスを向上させたり、新しい機能を構築したりするために、新しい JS ライブラリを追加していますか?彼らが逆のことをしていたらどうなるでしょうか?

フロントエンドがより複雑になっていることは疑いの余地がありません。新しい JavaScript ライブラリやその他の依存関係をアプリに追加するときは、ユーザーが未知の問題に遭遇しないように、可視性を高める必要があります。

LogRocket は、JavaScript エラーを自分のブラウザで発生したかのように再生できるフロントエンド アプリケーション監視ソリューションで、バグにより効果的に対応できます。

es-toolkit, a Lodash alternative

LogRocket は、フレームワークに関係なく、あらゆるアプリで完璧に動作し、Redux、Vuex、@ngrx/store からの追加のコンテキストをログに記録するプラグインを備えています。問題が発生する原因を推測する代わりに、問題が発生したときにアプリケーションがどのような状態にあったかを集計してレポートできます。 LogRocket はアプリのパフォーマンスも監視し、クライアントの CPU 負荷、クライアントのメモリ使用量などのメトリクスをレポートします。

自信を持って構築 — 無料でモニタリングを始めましょう。

以上がes-toolkit、Lodash の代替品の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PythonとJavaScriptの未来:傾向と予測PythonとJavaScriptの未来:傾向と予測Apr 27, 2025 am 12:21 AM

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

Python vs. JavaScript:開発環境とツールPython vs. JavaScript:開発環境とツールApr 26, 2025 am 12:09 AM

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

JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

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

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

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

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、