3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScript の TextEncoder を毎回生成すると、効率はどうなるか?

Posted at

(十分最近の) JavaScript では、TextEncoder クラスのオブジェクトを用いて、文字列を UTF-8 のバイト列に変換できる。
この変換を行う際は、クラスの静的メソッドではなく、オブジェクトを用いる。
このオブジェクトは、最初に1個生成してそれを何度も使うこともできるし、変換のたびに生成することもできる。
しかし、オブジェクトを変換のたびに生成していたら、効率が悪いのではないか?
というわけで、JSBench.me で実験をしてみた。

テストコード

reuse or recreate TextEncoder (version 1) - JavaScript benchmark at JSBench.me

Setup JavaScript

使いまわし用の TextEncoder を生成する。
また、入力用の文字列も用意しておく。

const encoder = new TextEncoder();
const input = "こんにちはworld";

Test Case: reuse

生成しておいた TextEncoder のインスタンスを使用して、エンコードを行う。

encoder.encode(input);

Test Case: recreate

TextEncoder のインスタンスを生成して、エンコードを行う。

new TextEncoder().encode(input);

実験結果

筆者の環境で1回実行した結果、以下の結果が得られた。

ブラウザ 使いまわし 毎回生成
Firefox
142.0.1
2492万 ops/s ± 0.47%
Fastest
921万 ops/s ± 5.67%
63.05 % slower
Google Chrome
140.0.7339.128
72万 ops/s ± 1.55%
Fastest
54万 ops/s ± 1.43%
25.6 % slower

結論

Firefox・Google Chrome ともに、TextEncoder のインスタンスを毎回生成したほうが効率が悪いという結果になった。

  • とにかく効率を重視したい
  • 変数に入れて短い表現で呼び出したい

などの場合は、最初にインスタンスを生成し、使い回すのがいいだろう。
一方、

  • 効率はあまり重視しない (変換の頻度が低いなど)
  • 変数を作りたくない

などの場合は、毎回インスタンスを生成してもいいだろう。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?