import * as _ from'lodash 'とimport {indexOf} from'lodash'の間にパフォーマンスの違いはありますか?

プログラマー悟空

2つのインポート間でメモリとパフォーマンスに違いがあるかどうか疑問に思いました。

ノードモジュールにlodashがある場合、インポートに関係なく、とにかくすべてのファイルをコンパイルしますか?

パトリック・ロバーツ

理論的にはimportの仕様基づいて、はい、違いがあるはずです。

この仕様ではindexOf()、lodashモジュールがES2015モジュールとして記述されている場合、提供必要なもののみをロードするために、名前付きインポートの静的分析を使用する準拠した最適化が可能です。

ES2015モジュールで静的分析を実行するときに解決する方法への参照を保持するImportEntryレコード作成しimport、関連するもののみexportが評価されるようにします。

実際には、これはそれほど単純ではなく、現在ネイティブ実装がないため、BabelのようなトランスパイラーはES2015import構文をCommonJSの同等の機能に変換します。

残念ながら、この機能的に同等の方法では、モジュール全体を評価する必要があります。これは、完全に評価されるまでそのエクスポートがわからないためです。

ES2015仕様が必要とする理由であるimportexport静的解析をするためのコードを評価する際に、ファイルの部分は安全に省略することができるかを決定することによって最適化するJavaScriptエンジンを可能にするように、最上位レベルの範囲内にあることをexport

一方、RollupやWebpackのような非ネイティブのバンドラーは、ツリーシェイクを実行importし、バンドル内のモジュールに参照されていないデッドコードのセクションを削除するために静的分析を実行しますこの最適化はimport/の使用とは無関係ですが、グロブスターの代わりにexport名前付きを使用するとimports、これらのバンドラー内でより簡単で最適な静的分析を実行でき、最終的には将来リリースされるネイティブ実装を使用できます。

TL; DR

理論的には違いはありますが、実際には、ネイティブ実装がimport/export利用可能になるまで、または実際の構文と仕様に関係なく静的分析とツリーシェーキングを実行するバンドラーを使用しない限り、違いはありません

いずれの場合も、名前付きインポートを使用することをお勧めします。これにより、使用している環境に関係なく、可能な最適化を実行できます。

ECMAScriptセクション15.2モジュール仕様

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

How to import and use _.sortBy from lodash

分類Dev

import() import { something } from 'somewhere'; と同等。

分類Dev

let import React from'react / addons 'とimport {PropTypes} from'react / addons'の違い

分類Dev

`from ... import`対` import .`

分類Dev

use lodash to find substring from array of strings

分類Dev

Lodash get leafs from the mixed arrays and objects

分類Dev

「from xy import z」と「import xyz as z」の違い

分類Dev

lodashの「get」句と「ifelse」句のパフォーマンスの違い

分類Dev

from ..importとfrom ..の違い インポート

分類Dev

from ... import OR import ...モジュールと同様

分類Dev

「import * as _」を使用しているときに、webpackがlodashをツリーシェイクしないのはなぜですか?

分類Dev

How can I remove object from array, with Lodash?

分類Dev

Make object from an array of key-value pairs using Lodash

分類Dev

How to find the parent name from child using lodash and print the path

分類Dev

LodashのカレーとcurryRightの違い

分類Dev

Lodashの使い方

分類Dev

Lodashの使い方

分類Dev

Lodashとの違いを使用する

分類Dev

Pythonでは、「import foo.bar as bar」と「from foo import bar」の違いは何ですか?

分類Dev

PythonのLodash?

分類Dev

サフィックス(from :)とdropFirst(_ :)の間に違いはありますか?

分類Dev

名前空間と子モジュールの両方をインポートすることの欠点はありますか?例: `import React、{Component} from ...`

分類Dev

Webpack import from %appdata%

分類Dev

Import Data from Module

分類Dev

import * as $ from "jQuery";

分類Dev

デフォルトのエクスポートが定義されていない場合、import Module from'module 'importとは何ですか?また、import * as Moduleとは異なるのはなぜですか?

分類Dev

Use Lodash to find the indexOf a JSON array inside of an [] array

分類Dev

Why webpack doesn't tree-shake the lodash when using "import * as _"?

分類Dev

LodashとUnderscore.jsの違い

Related 関連記事

  1. 1

    How to import and use _.sortBy from lodash

  2. 2

    import() import { something } from 'somewhere'; と同等。

  3. 3

    let import React from'react / addons 'とimport {PropTypes} from'react / addons'の違い

  4. 4

    `from ... import`対` import .`

  5. 5

    use lodash to find substring from array of strings

  6. 6

    Lodash get leafs from the mixed arrays and objects

  7. 7

    「from xy import z」と「import xyz as z」の違い

  8. 8

    lodashの「get」句と「ifelse」句のパフォーマンスの違い

  9. 9

    from ..importとfrom ..の違い インポート

  10. 10

    from ... import OR import ...モジュールと同様

  11. 11

    「import * as _」を使用しているときに、webpackがlodashをツリーシェイクしないのはなぜですか?

  12. 12

    How can I remove object from array, with Lodash?

  13. 13

    Make object from an array of key-value pairs using Lodash

  14. 14

    How to find the parent name from child using lodash and print the path

  15. 15

    LodashのカレーとcurryRightの違い

  16. 16

    Lodashの使い方

  17. 17

    Lodashの使い方

  18. 18

    Lodashとの違いを使用する

  19. 19

    Pythonでは、「import foo.bar as bar」と「from foo import bar」の違いは何ですか?

  20. 20

    PythonのLodash?

  21. 21

    サフィックス(from :)とdropFirst(_ :)の間に違いはありますか?

  22. 22

    名前空間と子モジュールの両方をインポートすることの欠点はありますか?例: `import React、{Component} from ...`

  23. 23

    Webpack import from %appdata%

  24. 24

    Import Data from Module

  25. 25

    import * as $ from "jQuery";

  26. 26

    デフォルトのエクスポートが定義されていない場合、import Module from'module 'importとは何ですか?また、import * as Moduleとは異なるのはなぜですか?

  27. 27

    Use Lodash to find the indexOf a JSON array inside of an [] array

  28. 28

    Why webpack doesn't tree-shake the lodash when using "import * as _"?

  29. 29

    LodashとUnderscore.jsの違い

ホットタグ

アーカイブ