[JavaScript] 日本語を含んだ文字配列を大量に比較する場合「localeCompare」と「Intl.Collator の compare」のどちらがパフォーマンス良いか検証した
フロントエンドで日本語を含んだ文字配列を比較する手段として、
localeCompare
-
Intl.Collator
のcompare
の2つがあります。
どちらが、パフォーマンスが良いか検証した際のメモを残します。
localeCompare
と Intl.Collator
のcompare
本記事記載(ES2020)時点において、
文字列を比較するlocaleCompare
というメソッドが提供されています。
localeCompareで配列の内容を五十音順ソートの記事にもある通り、
漢字を含めた日本語をソートしたい場合、localeCompare
を使用する手があります。
が、MDNのlocalCompare
の説明を読み進めると、
以下の記載が見つかりました。
パフォーマンス
巨大な配列のソートなど大量の文字列を比較する場合は Intl.Collator オブジェクトを作成し、 compare プロパティで提供される関数を利用すると良いでしょう。
日本語を含めた文字配列を作成し、検証してみました。
CodeSandboxで検証
から、1000個の名前ダミーデータ(英字500個, 日本語500個)を用意し、
CodeSandboxで検証用のロジックを書いてみました。
-
Intl.Collator Sort
を押下すると、Intl.Collator
のcompare
を使った比較および時間計測 -
localCompare Sort
を押下すると、localCompare
を使った比較および時間計測
が行われ、コンソールへ以下のように出力されます。
// 1回目
Object {used: "Intl.Collator", time: 1.8749999981373549, localSamples: Array[1000]}
Object {used: "localeCompare", time: 3.025000001769513, localSamples: Array[1000]}
// 2回目
Object {used: "Intl.Collator", time: 1.8199999976204708, localSamples: Array[1000]}
Object {used: "localeCompare", time: 3.224999996717088, localSamples: Array[1000]}
MDNのドキュメント通り、Intl.Collator
の方が高速にソートできるようです。
結論
日本語を含む文字配列を大量に比較する場合は、
localeCompare
よりIntl.Collator
を使うとパフォーマンスが良いとわかりました。
が、仕様上、一二三
のような漢字も一三二
とソートされますので、
注意して使用してください。1
おわり
以上です。
おかしい、気になった点などありましたら、
フィードバックいただけると助かります。
参考記事
-
Qiita - ウェブサイトをグローバル化するために便利なIntl APIの話 ...
Intl
系の他機能を紹介されています - ダミーデータ系
-
名前に紐づく
ふりがな
のような項目がある場合は、ふりがな
でソートした方が正確に並び替えられます。 ↩
Author And Source
この問題について([JavaScript] 日本語を含んだ文字配列を大量に比較する場合「localeCompare」と「Intl.Collator の compare」のどちらがパフォーマンス良いか検証した), 我々は、より多くの情報をここで見つけました https://qiita.com/zaki_zaki/items/e75b6c5cbfe56081a769著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .