<p>25のパフォヌマンスがありたす</p>

䜜成日 2020幎01月24日  Â·  119コメント  Â·  ゜ヌス: facebook/jest

💥回垰レポヌト

jestを24から25にアップグレヌドし、ナニットテストがゞェンキンスでの5分23秒から11分以䞊になるこずを確認したした。 アップグレヌドで倱敗したスナップショットテストはごくわずかで、 -u 'dしたしたが、これは深刻なリグレッションimoです。 これを修正する方法を理解するのを手䌝っおください。 CIのキャッシュをクリアしお、垞に最新のものを実行できるようにしたす。

回垰ずは䜕かに぀いおの明確で簡朔な説明。
実行時間は5:23から11:00になりたした

最埌の䜜業バヌゞョン

24.8.0
バヌゞョンたで動䜜したした
24.8.0
バヌゞョンでの動䜜を停止したした
25.1.0

再珟するには

申し蚳ありたせんが、コヌドベヌスを共有できたせん
動䜜を再珟する手順

予想される行動

䜕が起こるず予想したかに぀いおの明確で簡朔な説明。

replたたはrepoぞのリンク匷く掚奚

repl.itデモたたはGitHubの最小限のリポゞトリのいずれかを提䟛しおください。

耇補リンクのない問題は倱速する可胜性がありたす。

npx envinfo --preset jest実行したす

ここに結果を貌り付けたす。

  System:
    OS: macOS Mojave 10.14.6
    CPU: (12) x64 Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz
  Binaries:
    Node: 10.16.0 - ~/.nvm/versions/node/v10.16.0/bin/node
    Yarn: 1.19.0 - ~/.nvm/versions/node/v10.16.0/bin/yarn
    npm: 6.13.6 - ~/.nvm/versions/node/v10.16.0/bin/npm
Regression Needs Repro

最も参考になるコメント

@SimenB git bisectを実行しお、24.9ず25.1の間のパフォヌマンスの䜎䞋がどこで発生したかを調べたした。 24.9から26.1たで倉曎なしで実行されるため、よりきれいなテストを䜿甚したした。

jsサブセットの3回の実行の环積実行時間をしばらくの間安党にするために無効にしたキャッシュず比范したした。 より具䜓的には、私が䜿甚するコマンドは、ノヌド10.19の yarn run jest --no-cache tests/js/ 

結果

24.9.0-dev 3cdbd556948b4974b2cc23178977eb159d343df8 151.84s <- Good
25.1.0-dev 5dcc48075f22d581864f381f20bc8b257d2a73cd 223.29s <- Bad
24.9.0-dev bf6109591365a2b71c7b642fa33ed06d3db6cb26 122.58s
24.9.0-dev 77c3ceedfd61ddc841e11fec7b76e540924d3e60 120.42s
24.9.0-dev 30e08e9ae7d7d78f40df757c2ec4b49357285eda 221.28s
24.9.0-dev ad5377333daf6716af3465bba39f86b7db485e2b 222.33s
24.9.0-dev 8ddadfca76eb3fb979df81033d3d0ff564c415d6 120.32s
24.9.0-dev 966f22f2a08d9ac9300b6964ab91c4e75dba4761 120.46s
24.9.0-dev b9084101189639524863e15ef7557ea6bc6704b9 119.87s
24.9.0-dev 1d8245d77d47b4198d51e55da87893d7dfe1a759 129.93s

ad5377333daf6716af3465bba39f86b7db485e2b is the first bad commit
commit ad5377333daf6716af3465bba39f86b7db485e2b
Author: Simen Bekkhus <[email protected]>
Date:   Mon Dec 2 23:20:16 2019 +0100

    feat: add support for `compileFunction` allowing us to avoid the module wrapper (#9252)

compileFunctionが定矩されおいない堎合はフォヌルバックがあるため、ad5377333daf6716af3465bba39f86b7db485e2bからcompileFunctionブランチを削陀しお、パフォヌマンスを埩元したした。

26.1を芋るず、コヌドは少し移動しおいたすが、 compileFunctionずフォヌルバックはただありたす。 そう

26.1.0-dev 817d8b6aca845dd4fcfd7f8316293e69f3a116c5 242.99s <- with compileFunction
26.1.0-dev 817d8b6aca845dd4fcfd7f8316293e69f3a116c5 151.61s <- without compileFunction

぀たり、 compileFunctionブランチパッチを削陀するず、26.1が24.9のランタむムに戻りたす。 それが解決策ではないず確信しおいたすが、少なくずも私たちには䜕か取り組むべきこずがありたす。

党おのコメント119件

リグレッションに぀いおは申し蚳ありたせんが

申し蚳ありたせんが、コヌドベヌスを共有できたせん

絶察に䜕もできないずいう意味です。 これは、パフォヌマンスの䜎䞋に぀いお聞いた最初のこずです。他のすべおの堎所で、パフォヌマンスが24から25に10〜40_改善_しおいるず聞いおいたす。䜕らかの再珟を提䟛する必芁がありたす。そうしないず、この問題を解決する必芁がありたす。珟状ではたったく実行可胜ではないためです。

これが修正されおいるのを芋たい堎合は、耇補ケヌスを組み立おるのに時間を費やす必芁がありたす。たたは、他の誰かがそうするこずを期埅したす。

わかりたした。おそらく最も遅い10個のテストをプルできるかどうかを確認し、24察25で実行しおみたす。それたでの間、CIでテストを実行する前にキャッシュをクリアするこずに関しお、䜕をお勧めしたすか やれ したせんか

構成、特にtransformsずセットアップファむルもおそらく関連性がありたす

CIでテストを実行する前にキャッシュをクリアするこずに関しお䜕をお勧めしたすか

個人的には、停陰性たたは停陜性を䞎えるこずで陳腐化したものがないこずを確認するのは良い考えだず思いたす。 キャッシュをクリアしないこずは、テストの実行時間に倧きな違いをもたらしたすか

キャッシュをクリアした埌に実行するず、かなり遅くなるようです。 ヒントをありがずう私はそれを調べお、再珟を詊みるこずができるかどうかを確認したす

FWIW、私はたた、v25がわずかに遅いか、v24ず同等であるこずに気づきたした。 10〜40近くの改善は芋られたせんでした。

ここに蚘茉されおいるように、jest 24よりも倧幅に高速化されおいたす https 

䞊蚘はosxでテストされたした。

ただし、CentOSを実行するCIでは、たったく同じセットアップの実行速床が倧幅に䜎䞋したす。

Linux固有の問題 キャッシュファむルを曞き蟌むずきのI / O関連の問題 これを陀倖するためにキャッシュ生成を完党にオフにするこずは可胜ですか

私たちの堎合、犯人を芋぀けたず思いたす。それは--collectCoverageフラグです。 Jest 24ず25の䞡方で削陀するず、25未満のテストは玄2倍の速床で実行されたす。有効にするず、25未満のテストは24未満の同じテストのほが4倍の速床になりたす。

これはOSXずCentOSの䞡方で再珟可胜であるため、以前のコメントずは異なり、この問題はLinux固有ではないようです。

面癜い むスタンブヌルをv3に曎新したした。おそらく、そこにある䜕かが埌退しおいたす。 v8コヌドカバレッゞのサポヌトを远加したので、そうするずきにリファクタリングも台無しにした可胜性がありたす

はい それは私が芋おいるものずも䞀臎しおいたす。 2倍遅いCIでカバレッゞを実行しおいたす。 そしお、私がcovgなしでロヌカルに実行するずき、非垞に高速です。 @SimenB叀いむスタンブヌルを䜿甚するための蚭定オプションはありたすか :)

ずにかくビルドする前にキャッシュを削陀するので、それが実際に原因である堎合は、CIでのキャッシュ生成をオフにするずよいず@csvanが蚀ったこずを゚コヌし​​たす

これを再珟するこずはできたせん-私がテストしたリポゞトリは、v24ずv25の間で--coverageずほが同じパフォヌマンスを瀺したす。 誰かがjest24ずjest25を䜿っおリポゞトリをたずめるこずができるでしょうかそれらを切り替えるず違いがわかりたすか

カバレッゞを無効にしおCIビルドを実行しただけですが、 @ csvanは䜕かに

ビルド゚ヌゞェントからのexinfo

00:03:31.992   System:
00:03:31.992     OS: Linux 3.10 CentOS Linux 7 (Core)
00:03:31.992     CPU: (8) x64 Intel Core Processor (Skylake, IBRS)
00:03:31.992   Binaries:
00:03:31.992     Node: 10.16.0 - ~/workspace/grocery-electrode/tools/nix_64/nodejs-10.16.0/bin/node
00:03:31.992     npm: 6.9.0 - ~/workspace/grocery-electrode/tools/nix_64/npm-6.9.0/node_modules/.bin/npm
00:03:31.993   npmPackages:
00:03:31.993     jest: 25.1.0 => 25.1.0 

同様の問題が発生しおいたす。 Jest 25をアップグレヌドするず、カバレッゞを䜿甚する際のテストが遅くなりたしたJest 24では166秒、Jest 25では381秒。 Jest 25は、チェックの実行䞭にこれらの゚ラヌの倚くを衚瀺したす。

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0x10003d041 node::Abort() [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 2: 0x10003d24b node::OnFatalError(char const*, char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 3: 0x1001b8e25 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 4: 0x100586d82 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 5: 0x100589855 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 6: 0x1005856ff v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 7: 0x1005838d4 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 8: 0x10059016c v8::internal::Heap::AllocateRawWithLigthRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 9: 0x1005901ef v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
10: 0x10055fb34 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
11: 0x1007e7e14 v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
12: 0xb9c575dbe3d 
13: 0xb9c57ab091a 
14: 0xb9c579e7d65 
15: 0xb9c579ebaf3 

<--- Last few GCs --->

[733:0x102804000]    84639 ms: Mark-sweep 1335.2 (1449.6) -> 1325.4 (1452.1) MB, 1443.2 / 0.0 ms  (average mu = 0.135, current mu = 0.076) allocation failure scavenge might not succeed
[733:0x102804000]    85872 ms: Mark-sweep 1338.3 (1452.1) -> 1327.8 (1455.1) MB, 1159.4 / 0.0 ms  (average mu = 0.101, current mu = 0.059) allocation failure scavenge might not succeed


<--- JS stacktrace --->

Jest 24にダりングレヌドするず、これらの゚ラヌはなくなりたす。

たた、Jest 25は、その構成で明瀺的に無効にしたファむルからカバレッゞを収集しおいるように芋えるため、 collectCoverageFrom方法が異なるこずに気付きたした。 そこでglob構文のサポヌトは倉曎されたしたか

JSトレヌスはありたすか それがどこで死んだかを芋るのは興味深いでしょう。

たた、Jest 25は、その構成で明瀺的に無効にしたファむルからカバレッゞを収集するように芋えるため、collectCoverageFromの凊理方法が異なるこずに気付きたした。 そこでglob構文のサポヌトは倉曎されたしたか

Micromatch 4にアップグレヌドしたしたが、䜕かが倉わった可胜性がありたす。 ただし、意図的に倉曎するこずはありたせん。 耇補で別の問題を開くこずができたすか

JSトレヌスはありたすか

これは印刷されたした

==== JS stack trace =========================================

    0: ExitFrame [pc: 0x521cca5be3d]
Security context: 0x0ebfa799e6e9 <JSObject>
    1: _clearMemoizedQueries [0xebf2a5aba99] [/Users/evhaus/Git/zenhub/client/node_modules/jest-environment-jsdom/node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js:~208] [pc=0x521cd0d9a4e](this=0x0ebf5bee2aa9 <EventTargetImpl map = 0xebf7963d039>)
    2: _clearMemoizedQueries [0xebf2a5aba99] [/Users/evhaus/Git/zenhub/client/node_modules/jest-environment-...

線集実際には、カバレッゞを無効にしおもヒヌプ゚ラヌが発生したす。

Micromatch 4にアップグレヌドしたしたが、䜕かが倉わった可胜性がありたす。 ただし、意図的に倉曎するこずはありたせん。 耇補で別の問題を開くこずができたすか

したしょう。

再びチャむムを鳎らしたす。 カバレッゞは間違いなく遅く、停物のようです。 OSXのタむミングは次のずおりです。

46.69
41.77
45.06

v24 coverage
78.60
75.79
80.38

v25
45.93
52.49
53.36

v25 circus
61.27
52.08

v25 coverage
310.98
227.15
153.81

CItravisのタむミング。

v24 coverage -w 4
101.634s

v25 coverage -w 4
178.306s

@milesj v25サヌカスずは䜕ですか

それはより速いはずの新しいランナヌを冗談で蚀いたす、しかしそれは私が芋たものから決しおありたせん。 https://www.npmjs.com/package/jest-circus

JSDOMからのjest-environment-jsdom@24をむンストヌルしお䜿甚しおみおください。 11から15にアップグレヌドしたので、そこにある䜕かが倉曎された可胜性がありたす。 ロングショットのように芋えたすが、誰が知っおいたすか

@SimenBロヌリングはバックだけでjest-environment-jsdomに<24.0.0私の䞭にpackage.json間違いなく圱響を䞎えたした。 heap out of memory゚ラヌはなくなり、Jestは問題なく実行を完了したようです。

面癜い 時間があれば、テストできたら玠敵です

たたは、 jsdomリンクしお二等分したす。 明日やりたすが、ただいい再珟がありたせん

次のテストでは、カバレッゞを有効にしおいたせん。

  • [email protected]

    • テストを実行するための143秒

    • 問題ありたせん

  • [email protected]

    • テストを実行するための154秒

    • 問題ありたせん

  • [email protected]

    • テストを実行するための228秒

    • 🚚倚くのJavaScript heap out of memory゚ラヌ

スタックトレヌス

これらは、 jest-environment-jsdom-fourteen実行からのスタックトレヌスの䞀郚です。

==== JS stack trace =========================================

    0: ExitFrame [pc: 0x20deef6dbe3d]
Security context: 0x36ee8219e6e9 <JSObject>
    1: _modified [0x36ee35982ec1] [/Users/evhaus/Git/zenhub/client/node_modules/jest-environment-jsdom-fourteen/node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js:~189] [pc=0x20deefba6433](this=0x36eef3246e99 <EventTargetImpl map = 0x36ee99264ee9>)
    2: _insert [0x36eeb41f1e41] [/Users/evhaus/Git/zenhub/client/node_modules/jest-environment-jsdom-fourte...
    0: ExitFrame [pc: 0x2aa5df5be3d]
Security context: 0x116a8d49e6e9 <JSObject>
    1: _clearMemoizedQueries [0x116a365133d1] [/Users/evhaus/Git/zenhub/client/node_modules/jest-environment-jsdom-fourteen/node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js:~208] [pc=0x2aa5dfe7dae](this=0x116a8f16cd11 <EventTargetImpl map = 0x116ae7cc9b61>)
    2: _clearMemoizedQueries [0x116a365133d1] [/Users/evhaus/Git/zenhub/client/node_modules/jest-...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0x10003d041 node::Abort() [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 2: 0x10003d24b node::OnFatalError(char const*, char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 3: 0x1001b8e25 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 4: 0x100586d82 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 5: 0x100589855 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 6: 0x1005856ff v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 7: 0x1005838d4 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 8: 0x10059016c v8::internal::Heap::AllocateRawWithLigthRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 9: 0x1005901ef v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
10: 0x10055fb34 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
11: 0x1007e7e14 v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
12: 0x20deef6dbe3d 
13: 0x20deefba6433 
    0: ExitFrame [pc: 0xb8909f5be3d]
Security context: 0x09e628d9e6e9 <JSObject>
    1: childrenIterator [0x9e612e1d581] [/Users/evhaus/Git/zenhub/client/node_modules/symbol-tree/lib/SymbolTree.js:~367] [pc=0xb890a41010e](this=0x09e612e3eb01 <SymbolTree map = 0x9e6a7f56c09>,parent=0x09e685ca27d1 <EventTargetImpl map = 0x9e6061f36f1>,options=0x09e67b6026f1 <undefined>)
    2: arguments adaptor frame: 1->2
    3: _detach [0x9e65c4ae341] [/U...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0x10003d041 node::Abort() [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 2: 0x10003d24b node::OnFatalError(char const*, char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 3: 0x1001b8e25 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 4: 0x100586d82 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 5: 0x100589855 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 6: 0x1005856ff v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 7: 0x1005838d4 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 8: 0x10059016c v8::internal::Heap::AllocateRawWithLigthRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 9: 0x1005901ef v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
10: 0x10055fb34 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
11: 0x1007e7e14 v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
12: 0x2aa5df5be3d 
    0: ExitFrame [pc: 0x180d6e95be3d]
Security context: 0x02052079e6e9 <JSObject>
    1: _modified [0x205b86c1861] [/Users/evhaus/Git/zenhub/client/node_modules/jest-environment-jsdom-fourteen/node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js:~189] [pc=0x180d6ede24fa](this=0x0205c8284411 <EventTargetImpl map = 0x205c1ea9769>)
    2: _attrModified [0x205b86ba771] [/Users/evhaus/Git/zenhub/client/node_modules/jest-environment-jsdom-fou...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0x10003d041 node::Abort() [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 2: 0x10003d24b node::OnFatalError(char const*, char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 3: 0x1001b8e25 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 4: 0x100586d82 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 5: 0x100589855 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 6: 0x1005856ff v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 7: 0x1005838d4 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 8: 0x10059016c v8::internal::Heap::AllocateRawWithLigthRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 9: 0x1005901ef v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
10: 0x10055fb34 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
11: 0x1007e7e14 v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
12: 0xb8909f5be3d 

お圹に立おれば

これが圹立぀かどうかはわかりたせんが、私の組織では、Jest24からJest2518分から28分ぞの倧幅な速床䜎䞋があり、カバレッゞ収集をオフにした埌10分たでなくなりたした。

@rosasynstylae奜奇心から、あなたのコヌドにはたくさんのスナップショットテストがありたすか

@benmonroそうですね。

私たちもそうです @SimenBリポゞトリ内のスナップショットがたくさんあるず、これが発生する可胜性があるず思いたすか

スナップショットがない堎合にパフォヌマンスの問題が発生したす。 ただし、カバレッゞを収集しおいたす。 24-> 25からの倧幅な枛速。2぀の異なるプロゞェクト。 それは倉化したすが、枛速は重芁で䞀貫しおいたす。

倉曎を加えずに䜕床もテストを実行でき、テストは平均しお24倍の速床で10倍遅くなりたす。

24に戻すず、実行は以前の速床に戻りたす。

必芁に応じお、より倚くの情報を提䟛できたす。 スナップショットテストのない2぀のプロゞェクトに぀いお蚀及したかったのです。

ここにあるすべおのコメントから、カバレッゞが問題であり、おそらくむスタンブヌルでの回垰であるように思われたすか

ここにあるすべおのコメントから、カバレッゞが問題であり、おそらくむスタンブヌルでの回垰であるように思われたすか

むスタンブヌルに指を向けるのはそれほど速くはないでしょう。 私の堎合、カバレッゞが無効になっおいる堎合でも、Jest 25でパフォヌマンスず安定性に重倧な問題が発生しおいたす。https //github.com/facebook/jest/issues/9457#issuecomment-579423330を参照しお

2぀の別々の問題がある可胜性がありたす。

1jest-environment-jsdom-fourteenの問題、および
2むスタンブヌルカバレッゞの問題

私は栌䞋げmicromatchに^3.0.0䜿甚しお倧芏暡な高速化ずのこぎり--coverage倚かれ少なかれバック我々は冗談24猶誰の再生の䞋で芋たパフォヌマンスには、

曎新ただし、 --coverageなしで実行するず、Jest 24レベルのパフォヌマンスに戻りたす-2倍遅い-/

@EvHausチェックしおくれおありがずう、ずおも面癜い 残念ながら、私はただこれを再珟するこずができたせん。 だから、耇補はただ玠晎らしいでしょう、そうすれば私はこれをデバッグしようずするこずができたす。

私は栌䞋げmicromatchに^3.0.0䜿甚しお倧芏暡な高速化ずのこぎり--coverage倚かれ少なかれバック我々は冗談24猶誰の再生の䞋で芋たパフォヌマンスには、

曎新ただし、 --coverageなしで実行するず、Jest 24レベルのパフォヌマンスに戻りたす-2倍遅い-/

䞖界で䜕が...むスタンブヌルで䜕も芋えない限り、マむクロマッチに䟝存しおいるので、それがカバレッゞに圱響を䞎える理由は私を超えおいたす🙁

マむクロマッチ党䜓のパフォヌマンスは少しばかげおいたす。カバレッゞv3はv4よりも高速ですが、v4がない堎合はv3よりも高速ですか。 😅

@SimenBうん、確認のためにCIにも実行したした。 远加以倖は䜕も倉曎したせん

  "resolutions": {
    "micromatch": "^3.0.0"
  }

私たちのpackage.jsonは、 --coverageを䜿甚するず、実行から6分で確実に短瞮され、Jest24で芋たものにほが戻りたした。

私が芋る限り、むスタンブヌルではマむクロマッチに䟝存しおいたす

これに関連しおいる可胜性のある別のスレッドでこのコメントが芋぀かりたした

https://github.com/facebook/jest/issues/9464#issuecomment -579733243

istanbulでmicromatchをプルするものがないこずを確認したした圌らはbabelプラグむンでminimatchを䜿甚したす。

確かに、陀倖が適切に機胜しおいないこずに぀いおの䜕かかもしれたせん。 これを䜿甚しお、むンストルメントする必芁があるものを確認したす https  trueでどこでもmicromatch@4我々がないこずmicromatch@3 

確かに2぀の別々の問題のように感じたす。1぀はjsdomに関するもので、もう1぀はカバレッゞに関するものです。

micromatch @ 3も解決するず、CIで通垞の速床に戻っおいるこずを確認できたす。

Jest + typescript + reactコヌドベヌスはこちら。 この問題を確認し、npm-force-resolutionsを䜿甚しおmicromatch ^ 3.0.0を匷制するず、クレむゞヌな速床䜎䞋が修正されたようです。

構成にカスタムテストファむルパタヌンたたはカバレッゞパタヌンがありたすか

@EvHaus jsdomバヌゞョンずの倧きな違いを芋たように、Micromatchもダりングレヌドするこずで違いが芋られるかどうか、私は非垞に興味がありたす

これがあなたの蚀いたいこずなら、そうです。

  collectCoverage: true,
  collectCoverageFrom: [
    'src/**/*.ts',
    'src/**/*.tsx',
    'src/**/*.js',
    'src/**/*.jsx',
    '!src/themes/**',
    '!src/**/Styled*.tsx',
    '!src/**/Styled*.ts',
    '!src/**/*Actions.ts',
    '!src/mainStore.ts',
    '!src/App.tsx',
    '!src/AppView.tsx',
    '!src/AppError.tsx',
    '!src/StyledAppComponents.tsx',
    '!src/index.tsx',
    'src/utility/redux/*.ts',
    '!src/testingUtils/*',
    '!src/**/index.ts',
    '!docs/**/**',
  ],

私たちにもそれがあり、長さ/倀が非垞に䌌おいたす

@ Ancient123ええ、その通りです。 吊定されたパタヌンのマむクロマッチ回垰に関連しおいるようです。 ありがずう

吊定されたパタヌンのマむクロマッチ回垰に関連しおいるようです。 ありがずう

泚意しお、私はそれをできるだけ早く調べたす。

マむクロマッチのパフォヌマンス党䜓が少しばかげおいたす

パフォヌマンスの䜎䞋に぀いお申し蚳ありたせん。 グロブの正芏衚珟を生成するこずは、芋た目よりもはるかに困難です。 特に、吊定を凊理し、クロスプラットフォヌムにする必芁がある堎合。 私は今これを調べおいたす。

@jonschlinkertそれは

はい @SimenBが蚀ったこず。 ❀に他なりたせん

@EvHaus jsdomバヌゞョンずの倧きな違いを芋たように、Micromatchもダりングレヌドするこずで違いが芋られるかどうか、私は非垞に興味がありたす

私のpackage.json私は蚭定したした

"resolutions": {
    "micromatch": "^3.0.0"
}

npm install再実行しおから、手動でnode_modules/jest/micromatch削陀したしたバヌゞョン4でした。 次に、テストを再実行したした。

残念ながら、ただ倚くの「JavaScriptヒヌプのメモリ䞍足」゚ラヌが発生しおいたす。

ダりングレヌドは正しく行っおいたすか

resolutionsはyarn resolutionsが必芁ですが、 npmはただ実装されおいたせんv7のロヌドマップにありたすhttps//blog.npmjs.org/post/186983646370/npm- cli-roadmap-summer-2019

@EvHaus npm v7がhttps  //www.npmjs.com/package/npm-force-resolutions

遅れお申し蚳ありたせん。 npm-force-resolutions これは正しいこずをしおいたすを䜿甚しおmicromatchをv3にロックしたした。 残念ながら、ヒヌプ゚ラヌは解消されたせんでした。

だから私にずっおは、ここで述べられおいるように、それはただ[email protected]せいです https 

jsdomをthirteen解決するず、それが修正されたす。

25でパフォヌマンスの䜎䞋を経隓した人は、 jsdom @ 13たたはmicromatch @ 3を䜿甚しおも修正されない問題を抱えおいhttps// github.com/micromatch/micromatch/issues/179。

JSDOMの修正バヌゞョンがリリヌスされたした。 jest-environment-jsdom-sixteenむンストヌルするこずで䜿甚できたす。 @EvHausで問題が

@SimenB私の問題はおそらく関連しおいたせんが、デフォルトを䜿甚する堎合ず比べおjest-environment-jsdom-sixteenを詊したずころ、同じテストスむヌトの実行時間が20秒増加したした。

v15デフォルトでjestに付属しおいるものを䜿いすぎお、他の倉曎はありたせんか 16.1.0でもテストできたすかただし、メモリリヌクが発生するため、テストが難しい堎合がありたす。 JSDOMはカスタム芁玠のサポヌトを利甚しお着陞したばかりですが、そこに䜕らかのリグレッションがある可胜性がありたすか わからない

JSDOMの修正バヌゞョンがリリヌスされたした。jest-environment-jsdom-sixteenをむンストヌルするこずで䜿甚できたす。 @EvHausで問題が

残念ながら、ただjest-environment-jsdom-sixteenヒヌプ゚ラヌが発生したす。 私にずっおJSDomの最埌の安定した動䜜バヌゞョンはjest-environment-jsdom-thirteenです。

JSDOMの修正バヌゞョンがリリヌスされたした。 jest-environment-jsdom-sixteenむンストヌルするこずで䜿甚できたす。 @EvHausで問題が

環境はコヌドベヌスで動䜜したすが、実行時にほが100のリグレッションが発生しおいたす。 ちなみに、 jest-environment-jsdom-sixteenは、 25.1ず24.9を䜿甚した堎合にのみ、実行時のパフォヌマンスを10向䞊させるようです。

こんにちは@SimenB 、

ここで再珟可胜なケヌスを䜜成したしたhttps://github.com/olebedev/jest-perf-issue。 ご芧ください。 以䞋の結果を比范したす。 / cc @joscha

結果

ベンチマヌクはMBP 2019, 32Gb RAM, i9-8950HK CPU @ 2.90GHz実行されたした。

| ゞェストバヌゞョン| ブランチ| 時間|
|-------------- |------| ----------|
| 24.9.0 | master | 348.077s |
| 25.1.0 | jest25 | 591.33s |

私たちの堎合、jest v25.1はv24.9ず比范しお玄50遅くなりたしたが、最新のjest v25.2.0はv25.1ず比范しおさらに20遅くなっおいたす🙈

@olebedevうわヌ、それは痛いです😬

私はあなたに䌌た番号を取埗しおいたす。 実際のプロゞェクトに基づいおいる堎合は、v8カバレッゞを䜿甚するこずをお勧めしたす。 あなたの耇補では、私のマシンでは600秒から35秒のランタむムが必芁です。 倧きな違いの理由は、おそらく、カバヌされおいないファむルをv8カバレッゞでむンストルメント化しようずしないこずですv8で機胜するすべおのバむトがカバヌされおいないず蚀うだけです。

https://jestjs.io/docs/en/configuration#coverageprovider -string

なぜそんなに遅いのかわからない...私はそれを調べる時間を芋぀けようずしたすしかしすぐにはありたせん。 少なくずもv25ではv24よりも遅くならないようにする必芁がありたす

v8カバレッゞを䞀緒に䜿甚できるこずをドキュメントを正しく理解しおいたすか
...-sixteen環境で

也杯、
J

2020幎4月8日氎曜日、2233 Simen Bekkhus、 notifications @ github.comは次のように曞いおいたす。

@olebedev https://github.com/olebedevうわヌ、それは痛いです😬

私はあなたに䌌た番号を取埗しおいたす。 それが実際のプロゞェクトに基づいおいる堎合私は
v8カバレッゞの䜿甚をお勧めしたす。 私の堎合、ランタむムは600秒から35秒かかりたす
あなたの耇補の機械。 倧きな違いの理由はおそらくそれです
カバヌされおいないファむルをv8カバレッゞでむンストルメント化しようずはしたせん。

https://jestjs.io/docs/en/configuration#coverageprovider -string

なぜそんなに遅いのかわからない...私はそれを調べる時間を芋぀けようずしたす。
少なくずもv25ではv24よりも遅くならないようにする必芁がありたす

—
あなたが蚀及されたので、あなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/facebook/jest/issues/9457#issuecomment-610931770 、たたは
登録を解陀する
https://github.com/notifications/unsubscribe-auth/AABN5BW6R45SS5Z5GXGFGF3RLRVJLANCNFSM4KK67LOA
。

はい、 jest-environment-jsdom-sixteen 、たたはバンドルされたjest-environment-nodeです。 たた、ノヌド8ではなく、ノヌド10以降でのみサポヌトされおいるこずにも泚意しおください。

これはNode envでのみテストしたこずがありたすが、バグであるjsdom envで動䜜しない堎合は、別の問題を開いおください🙂

jest-environment-jsdom-sixteen + v8は、カバレッゞプロバむダヌずしお、jest 25.3.0、ノヌド12.16で玄20悪化したした。 たた、テストパフォヌマンスがjest 24から25に玄80悪化した理由をデバッグしようずしおいたす。

@joualマむクロマッチの回避策3.xぞのダりングレヌドを詊したしたか

ここでも同様の経隓があり、テスト時間カバレッゞなしはv25で35〜40秒から80〜90秒、堎合によっおはそれ以䞊に2倍になりたす。 v3でマむクロマッチをロックしおみたしたが、枬定可胜な違いはありたせん。 Fwiw、玄3kのテストがあり、そのうち58はスナップショットテストです。
jsdomをダりングレヌドしようずしたしたが、これは私たちが䜿甚しおいる最近の機胜のために倚くのテストの砎損をもたらすようです。 どうにかしおこれを回避しお報告できるかどうかを確認したす。

@SimenBよりきれいなプロゞェクトのカバレッゞ収集ゞョブも非垞に遅いです、あなたはそれをチェックできたすか https://github.com/prettier/prettier/runs/579497097 Node.js 12 on ubuntu-latestはカバレッゞを収集したすが、他のゞョブは収集したせん。

ここでも同様の経隓があり、テスト時間カバレッゞなしはv25で35〜40秒から80〜90秒、堎合によっおはそれ以䞊に2倍になりたす。 v3でマむクロマッチをロックしおみたしたが、枬定可胜な違いはありたせん。 Fwiw、玄3kのテストがあり、そのうち58はスナップショットテストです。
jsdomをダりングレヌドしようずしたしたが、これは私たちが䜿甚しおいる最近の機胜のために倚くのテストの砎損をもたらすようです。 どうにかしおこれを回避しお報告できるかどうかを確認したす。

今日、 jest @ 24 デフォルトではv11でさたざたなjsdomバヌゞョンを詊しおいたした。 v14たではすべおが正垞に機胜しおいるように芋えたすが、v15の時点では、テストの実行に䞀貫しお50〜60長くかかりたす。 v16でも同じ話。 jsdomをv14にダりングレヌドするこずで、 jest @ 25で同様のパフォヌマンスを取埗できるかどうかを確認したす。

[email protected]にはいく぀かのメモリ修正がありたすが、 @ EvHausで詊しおみおください。 Jest自身の--detect-leaksは以前のバヌゞョンでリヌクを怜出したしたが、16.2.2では怜出したせんでした。

シンボリックリンクがたくさんある堎合Windowsでは非垞に遅い、他にもいく぀かの改善点がありたす。したがっお、人々が[email protected]を詊しお玠晎らしいこずです🙂

@SimenBそれをテストする最も簡単な方法は䜕ですか [email protected]をdevDependencyずしお盎接远加するず、Jestはそれを無芖し、今日15.2.1であるjest-environment-jsdomバンドルされおいるものをすべお䜿甚したす。

npmをだたしお、必芁なjsdomバヌゞョンを䜿甚しおいるこずを確認するにはどうすればよいですか

jest-environment-jsdom-sixteenをむンストヌルし、それを䜿甚したすhttps://jestjs.io/docs/en/configuration#testenvironment -string

Alphaが公開されおいるので、 jest@next詊すこずができたす-すぐに䜿えるjsdom16が付属しおいたす

@SimenB申し蚳ありたせんが、 [email protected]ずその[email protected]はあたり運がありたせん。 ただこれらの゚ラヌの倚くを取埗しおいたす

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

そしお最終的にランナヌは死にたす。

私の詳现

> npx envinfo --preset jest

  System:
    OS: macOS 10.15.4
    CPU: (8) x64 Intel(R) Core(TM) i5-8279U CPU @ 2.40GHz
  Binaries:
    Node: 10.17.0 - ~/.nvm/versions/node/v10.17.0/bin/node
    Yarn: 1.22.4 - /usr/local/bin/yarn
    npm: 6.14.4 - ~/.nvm/versions/node/v10.17.0/bin/npm
  npmPackages:
    jest: ^26.0.0-alpha.0 => 26.0.0-alpha.0 

それらから返される完党なスタックのいく぀かを次に瀺したす。

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0x10003d041 node::Abort() [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 2: 0x10003d24b node::OnFatalError(char const*, char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 3: 0x1001b8e25 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 4: 0x100586d82 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 5: 0x100589855 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 6: 0x1005856ff v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 7: 0x1005838d4 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 8: 0x10059016c v8::internal::Heap::AllocateRawWithLigthRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 9: 0x1005901ef v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
10: 0x10055fb34 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
11: 0x1007e7e14 v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
12: 0x3f82f50dbe3d 
13: 0x3f82f5c630de 
14: 0x3f82f5c94431 
15: 0x3f82f5c7d3be 
16: 0x3f82f5c4e98b 
17: 0x3f82f5c3c38e 

<--- Last few GCs --->

[50818:0x102804000]   189738 ms: Mark-sweep 1288.8 (1450.6) -> 1280.2 (1454.1) MB, 890.1 / 0.1 ms  (average mu = 0.181, current mu = 0.061) allocation failure scavenge might not succeed
[50818:0x102804000]   190673 ms: Mark-sweep 1292.8 (1454.1) -> 1282.9 (1457.6) MB, 856.2 / 0.2 ms  (average mu = 0.136, current mu = 0.084) allocation failure scavenge might not succeed


<--- JS stacktrace --->

==== JS stack trace =========================================

    0: ExitFrame [pc: 0x3f82f50dbe3d]
Security context: 0x274d67c9e6e9 <JSObject>
    1: createImpl [0x274d6d9ba1b9] [/Users/evhaus/Git/zenhub/client/node_modules/jsdom/lib/jsdom/living/generated/HTMLInputElement.js:~47] [pc=0x3f82f5c630de](this=0x274d51911261 <Object map = 0x274dd51fe489>,globalObject=0x274d89d38609 <Window map = 0x274d2fe6c211>,constructorArgs=0x274d832134b1 <JSArray[0]>,privateData=0x274d832134d1 <Object map = 0x274d69...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0x10003d041 node::Abort() [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 2: 0x10003d24b node::OnFatalError(char const*, char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 3: 0x1001b8e25 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 4: 0x100586d82 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 5: 0x100589855 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 6: 0x1005856ff v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 7: 0x1005838d4 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 8: 0x10059016c v8::internal::Heap::AllocateRawWithLigthRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 9: 0x1005901ef v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
10: 0x10055fb34 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
11: 0x1007e7e14 v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
12: 0x2cea552dbe3d 
13: 0x2cea55937c04 
14: 0x2cea5592618b 

<--- Last few GCs --->

[51263:0x102804000]    34292 ms: Mark-sweep 1332.4 (1452.5) -> 1320.5 (1453.5) MB, 902.6 / 0.0 ms  (average mu = 0.149, current mu = 0.104) allocation failure scavenge might not succeed
[51263:0x102804000]    35480 ms: Mark-sweep 1332.6 (1453.5) -> 1323.6 (1457.5) MB, 1049.3 / 0.0 ms  (average mu = 0.131, current mu = 0.116) allocation failure scavenge might not succeed


<--- JS stacktrace --->

==== JS stack trace =========================================

    0: ExitFrame [pc: 0x2cea552dbe3d]
Security context: 0x1a4cb371e6e9 <JSObject>
    1: next [0x1a4ca627dcd1] [/Users/evhaus/Git/zenhub/client/node_modules/symbol-tree/lib/TreeIterator.js:~16] [pc=0x2cea55937c04](this=0x1a4c807c75b1 <TreeIterator map = 0x1a4c38b8a9c9>)
    2: shadowIncludingInclusiveDescendantsIterator(aka shadowIncludingInclusiveDescendantsIterator) [0x1a4ca627a641] [/Users/evhaus/Git/zenhub/client/node_modules/jsdom/li...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0x10003d041 node::Abort() [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 2: 0x10003d24b node::OnFatalError(char const*, char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 3: 0x1001b8e25 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 4: 0x100586d82 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 5: 0x100589855 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 6: 0x1005856ff v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 7: 0x1005838d4 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 8: 0x10059016c v8::internal::Heap::AllocateRawWithLigthRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 9: 0x1005901ef v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
10: 0x10055fb34 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
11: 0x1007e7e14 v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
12: 0x3e0d8aedbe3d 
13: 0x3e0d8b35eedc 

<--- Last few GCs --->

[51519:0x102804000]    28074 ms: Mark-sweep 1324.5 (1445.0) -> 1315.7 (1449.0) MB, 760.4 / 0.0 ms  (average mu = 0.182, current mu = 0.080) allocation failure scavenge might not succeed
[51519:0x102804000]    28906 ms: Mark-sweep 1328.5 (1449.0) -> 1317.7 (1452.0) MB, 770.4 / 0.0 ms  (average mu = 0.129, current mu = 0.074) allocation failure scavenge might not succeed


<--- JS stacktrace --->

==== JS stack trace =========================================

    0: ExitFrame [pc: 0x3e0d8aedbe3d]
Security context: 0x3611d141e6e9 <JSObject>
    1: queueMutationRecord(aka queueMutationRecord) [0x361185f32321] [/Users/evhaus/Git/zenhub/client/node_modules/jsdom/lib/jsdom/living/helpers/mutation-observers.js:~33] [pc=0x3e0d8b35eedc](this=0x361116e826f1 <undefined>,type=0x3611aa0a3681 <String[9]: childList>,target=0x36110b275a91 <EventTargetImpl map = 0x3611a254a2f1>,name=0x361116e822b1 <null>,name...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
 1: 0x10003d041 node::Abort() [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 2: 0x10003d24b node::OnFatalError(char const*, char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 3: 0x1001b8e25 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 4: 0x100586d82 v8::internal::Heap::FatalProcessOutOfMemory(char const*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 5: 0x100589855 v8::internal::Heap::CheckIneffectiveMarkCompact(unsigned long, double) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 6: 0x1005856ff v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 7: 0x1005838d4 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 8: 0x10059016c v8::internal::Heap::AllocateRawWithLigthRetry(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
 9: 0x1005901ef v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationSpace, v8::internal::AllocationAlignment) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
10: 0x10055fb34 v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationSpace) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
11: 0x1007e7e14 v8::internal::Runtime_AllocateInNewSpace(int, v8::internal::Object**, v8::internal::Isolate*) [/Users/evhaus/.nvm/versions/node/v10.17.0/bin/node]
12: 0x8d8aedbe3d 
<--- Last few GCs --->

[51526:0x102804000]    33125 ms: Mark-sweep 1318.6 (1425.0) -> 1317.7 (1424.0) MB, 874.8 / 0.0 ms  (average mu = 0.126, current mu = 0.038) allocation failure scavenge might not succeed
[51526:0x102804000]    33136 ms: Scavenge 1318.5 (1424.0) -> 1318.0 (1424.5) MB, 3.8 / 0.0 ms  (average mu = 0.126, current mu = 0.038) allocation failure 
[51526:0x102804000]    33148 ms: Scavenge 1318.7 (1424.5) -> 1318.2 (1425.0) MB, 4.2 / 0.0 ms  (average mu = 0.126, current mu = 0.038) allocation failure 


<--- JS stacktrace --->

==== JS stack trace =========================================

    0: ExitFrame [pc: 0x8d8aedbe3d]
    1: StubFrame [pc: 0x8d8ae8d40b]
    2: ConstructFrame [pc: 0x8d8ae8cfa3]
Security context: 0x3324ecd9e6e9 <JSObject>
    3: new NodeImpl(aka NodeImpl) [0x3324c2083e11] [/Users/evhaus/Git/zenhub/client/node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js:~125] [pc=0x8d8b357fd4](this=0x332437582801 <the_hole>,globalObject=0x3324b10f98e9 <Window map = 0x3324649cf0a1>,args=0x3324b1841471 <JSArray[0]>,...

ひどい😞それはカバレッゞの有無にかかわらずですか

それは報道なしでした。 明確にすべきだった。

かなり叀いバヌゞョンのNodev10を実行しおいるこずが、これに圱響するず思いたすか

新しいバヌゞョンを詊しおみるこずができたすが、それ以倖に興味深いデヌタポむントはありたせん。 他に詊すべきこずは、ヒヌプダンプが死ぬ盎前に䜜成するこずです。 ヒヌプには䜕がありたすか

micromatch @ 4が正芏衚珟をキャッシュしなくなったこずを誰も蚀及しおいないのは興味深いこずです https://github.com/micromatch/micromatch/pull/151およびhttps://github.com/facebook/jest/pull/10131を参照ゞェスト偎のキャッシング。

私にずっおは、 micromatch @ 3にダりングレヌドし、 jest-environment-jsdom-sixteenアップグレヌドするず、時間の50が節玄されたした。
しかし、jest 26ず組み蟌みのjsdomを䜿甚するず、私の堎合、-detectLeaksを指定しおjestを実行するず、リヌク゚ラヌが発生したす。 新鮮なレポを詊しおみたしたが、すべおうたくいきたした。

https://github.com/facebook/jest/pull/10131が統合されたした!! <3

26.1.0にリリヌスされ、人々に圹立぀かどうかを聞くこずに非垞に興味がありたす

@SimenBリリヌスありがずう

珟圚

os: osx
node: 12.6.1
jest: 24.9
-----------------
174 test suites
823 tests
322 snapshots
-----------------
done in 23.569s

24.9より高いすべおのバヌゞョンで

os: osx
node: 12.6.1
jest: 26.1.0
-----------------
174 test suites
823 tests
322 snapshots
-----------------
done in 133.763s

新しいキャッシュを䜿甚する堎合ず、すべおのノヌドモゞュヌルを完党に再むンストヌルした埌の䞡方。 手぀かずの構成。
りォッチモヌドでテストを実行するず、実行するテストを決定するために私のマシンで3分以䞊かかりたす。 再珟のために問題を特定するこずはできたせんが、䜕をテストするかに぀いおアドバむスをいただければ、非垞に興味がありたす。 あなたがそれに費やしたすべおの仕事に感謝したす

@SimenB

prettierプロゞェクトの堎合、カバレッゞを収集するずきにv24よりも䜎速です。

image

image

https://github.com/prettier/prettier/pull/8636

バヌゞョン25および26のパフォヌマンスがBitbucketPipelineで24よりも䜎いこずを確認できたす。 たた、カバレッゞを有効にするず速床が䜎䞋するこずにも気づきたした。 バヌゞョン25は26に比べおさらに悪化し、メモリの消費によりパむプラむンがクラッシュしたす。

@SimenB git bisectを実行しお、24.9ず25.1の間のパフォヌマンスの䜎䞋がどこで発生したかを調べたした。 24.9から26.1たで倉曎なしで実行されるため、よりきれいなテストを䜿甚したした。

jsサブセットの3回の実行の环積実行時間をしばらくの間安党にするために無効にしたキャッシュず比范したした。 より具䜓的には、私が䜿甚するコマンドは、ノヌド10.19の yarn run jest --no-cache tests/js/ 

結果

24.9.0-dev 3cdbd556948b4974b2cc23178977eb159d343df8 151.84s <- Good
25.1.0-dev 5dcc48075f22d581864f381f20bc8b257d2a73cd 223.29s <- Bad
24.9.0-dev bf6109591365a2b71c7b642fa33ed06d3db6cb26 122.58s
24.9.0-dev 77c3ceedfd61ddc841e11fec7b76e540924d3e60 120.42s
24.9.0-dev 30e08e9ae7d7d78f40df757c2ec4b49357285eda 221.28s
24.9.0-dev ad5377333daf6716af3465bba39f86b7db485e2b 222.33s
24.9.0-dev 8ddadfca76eb3fb979df81033d3d0ff564c415d6 120.32s
24.9.0-dev 966f22f2a08d9ac9300b6964ab91c4e75dba4761 120.46s
24.9.0-dev b9084101189639524863e15ef7557ea6bc6704b9 119.87s
24.9.0-dev 1d8245d77d47b4198d51e55da87893d7dfe1a759 129.93s

ad5377333daf6716af3465bba39f86b7db485e2b is the first bad commit
commit ad5377333daf6716af3465bba39f86b7db485e2b
Author: Simen Bekkhus <[email protected]>
Date:   Mon Dec 2 23:20:16 2019 +0100

    feat: add support for `compileFunction` allowing us to avoid the module wrapper (#9252)

compileFunctionが定矩されおいない堎合はフォヌルバックがあるため、ad5377333daf6716af3465bba39f86b7db485e2bからcompileFunctionブランチを削陀しお、パフォヌマンスを埩元したした。

26.1を芋るず、コヌドは少し移動しおいたすが、 compileFunctionずフォヌルバックはただありたす。 そう

26.1.0-dev 817d8b6aca845dd4fcfd7f8316293e69f3a116c5 242.99s <- with compileFunction
26.1.0-dev 817d8b6aca845dd4fcfd7f8316293e69f3a116c5 151.61s <- without compileFunction

぀たり、 compileFunctionブランチパッチを削陀するず、26.1が24.9のランタむムに戻りたす。 それが解決策ではないず確信しおいたすが、少なくずも私たちには䜕か取り組むべきこずがありたす。

別のデヌタポむントずしお、私たちのjestスむヌトは珟圚[email protected]で玄2767秒かかり、アップデヌトMRでは玄3497秒かかり、玄27増加したす。

玠晎らしい仕事をしおくれおありがずう、jestチヌム、 @ wurstbonbonの探偵スキルが、そのリグレッションの修正に圹立぀こずを願っおいたす

@wurstbonbon掘るのに時間をcompileFunctionが遅いのは非垞に興味深いこずです...぀たり、パッチを適甚する代わりに、カスタムテスト環境を䜿甚できるずいうこずです。

const NodeEnv = require('jest-environment-node');

class MyNodeEnv extends NodeEnv {}

delete MyNodeEnv.prototype.compileFunction;

module.exports = MyNodeEnv;

そしおjsdom envに぀いおも同じです。 確認できたすか


しかし、そのようなボトルネックであるこずは奇劙に聞こえたす-18か月前にノヌド自䜓がそれを䜿甚するように切り替えたした https  https://github.com/nodejs/node/issues/26229は非垞に興味深いものですが、おそらく私たちの偎でもう少しキャッシュを行う必芁がありたすか

@SimenB私はそのカスタム

ただし、jest 26でテストしおいるため、 MyNodeEnv.prototype.getVmContext = null;を実行する必芁がありたした。珟圚、 if (typeof this._environment.getVmContext === 'function') {チェックしおいるようです。 ただし、これが他の問題を匕き起こす可胜性があるかどうかはわかりたせん。

これらは、数回実行した埌に衚瀺される結果です。

Jest 26 w / testEnvironment "ノヌド" => 〜280s
Jest 26 w /カスタムテスト環境=> 〜210s
ゞェスト24 => 〜160秒

他の情報や䜕か他のこずを手䌝っおくれるかどうか教えおください

予想通り、カスタム環境はよりきれいなものず同じスピヌドアップをもたらしたす。

たた、コヌドベヌスで詊しおみたしたが、違いは玄270秒ず玄200秒であるため、玄25であり、40の削枛ではありたせん。 残念ながら、私たちはjest 24でテストを実行できたせん。これは、新しい最新のタむマヌのモックに䟝存しおいるためです。

䞊蚘の䟋でdeleteを逃したした、申し蚳ありたせん。


コンパむルされた関数を手動でキャッシュするだけで十分かどうか疑問に思いたす-このパッチを適甚しおみおください。 ここに含たれおいるトランスパむルされたJSずTS゜ヌスの䞡方

diff --git i/packages/jest-runtime/build/index.js w/packages/jest-runtime/build/index.js
index 1d094a6dc0..f6d059caa3 100644
--- i/packages/jest-runtime/build/index.js
+++ w/packages/jest-runtime/build/index.js
@@ -267,6 +267,7 @@ const getModuleNameMapper = config => {
 const unmockRegExpCache = new WeakMap();
 const EVAL_RESULT_VARIABLE = 'Object.<anonymous>';
 const runtimeSupportsVmModules = typeof _vm().SyntheticModule === 'function';
+const compiledFunctionCache = new Map();
 /* eslint-disable-next-line no-redeclare */

 class Runtime {
@@ -1169,23 +1170,30 @@ class Runtime {
       value: this._createRequireImplementation(localModule, options)
     });
     const transformedCode = this.transformFile(filename, options);
-    let compiledFunction = null; // Use this if available instead of deprecated `JestEnvironment.runScript`
+    let compiledFunction = undefined; // Use this if available instead of deprecated `JestEnvironment.runScript`

     if (typeof this._environment.getVmContext === 'function') {
       const vmContext = this._environment.getVmContext();

       if (vmContext) {
-        try {
-          compiledFunction = (0, _vm().compileFunction)(
-            transformedCode,
-            this.constructInjectedModuleParameters(),
-            {
-              filename,
-              parsingContext: vmContext
-            }
-          );
-        } catch (e) {
-          throw (0, _transform().handlePotentialSyntaxError)(e);
+        const params = this.constructInjectedModuleParameters();
+        const cacheKey = transformedCode + params;
+        compiledFunction = compiledFunctionCache.get(cacheKey);
+
+        if (!compiledFunction) {
+          try {
+            compiledFunction = (0, _vm().compileFunction)(
+              transformedCode,
+              params,
+              {
+                filename,
+                parsingContext: vmContext
+              }
+            );
+            compiledFunctionCache.set(cacheKey, compiledFunction);
+          } catch (e) {
+            throw (0, _transform().handlePotentialSyntaxError)(e);
+          }
         }
       }
     } else {
@@ -1194,13 +1202,13 @@ class Runtime {
       const runScript = this._environment.runScript(script);

       if (runScript === null) {
-        compiledFunction = null;
+        compiledFunction = undefined;
       } else {
         compiledFunction = runScript[EVAL_RESULT_VARIABLE];
       }
     }

-    if (compiledFunction === null) {
+    if (!compiledFunction) {
       this._logFormattedReferenceError(
         'You are trying to `import` a file after the Jest environment has been torn down.'
       );
diff --git i/packages/jest-runtime/src/index.ts w/packages/jest-runtime/src/index.ts
index 522adabd1e..8958a4cef8 100644
--- i/packages/jest-runtime/src/index.ts
+++ w/packages/jest-runtime/src/index.ts
@@ -137,6 +137,8 @@ type RunScriptEvalResult = {[EVAL_RESULT_VARIABLE]: ModuleWrapper};

 const runtimeSupportsVmModules = typeof SyntheticModule === 'function';

+const compiledFunctionCache = new Map<string, ModuleWrapper>();
+
 /* eslint-disable-next-line no-redeclare */
 class Runtime {
   private _cacheFS: StringMap;
@@ -1000,24 +1002,29 @@ class Runtime {

     const transformedCode = this.transformFile(filename, options);

-    let compiledFunction: ModuleWrapper | null = null;
+    let compiledFunction: ModuleWrapper | undefined = undefined;

     // Use this if available instead of deprecated `JestEnvironment.runScript`
     if (typeof this._environment.getVmContext === 'function') {
       const vmContext = this._environment.getVmContext();

       if (vmContext) {
-        try {
-          compiledFunction = compileFunction(
-            transformedCode,
-            this.constructInjectedModuleParameters(),
-            {
+        const params = this.constructInjectedModuleParameters();
+
+        const cacheKey = transformedCode + params;
+
+        compiledFunction = compiledFunctionCache.get(cacheKey);
+
+        if (!compiledFunction) {
+          try {
+            compiledFunction = compileFunction(transformedCode, params, {
               filename,
               parsingContext: vmContext,
-            },
-          ) as ModuleWrapper;
-        } catch (e) {
-          throw handlePotentialSyntaxError(e);
+            }) as ModuleWrapper;
+            compiledFunctionCache.set(cacheKey, compiledFunction);
+          } catch (e) {
+            throw handlePotentialSyntaxError(e);
+          }
         }
       }
     } else {
@@ -1028,13 +1035,13 @@ class Runtime {
       );

       if (runScript === null) {
-        compiledFunction = null;
+        compiledFunction = undefined;
       } else {
         compiledFunction = runScript[EVAL_RESULT_VARIABLE];
       }
     }

-    if (compiledFunction === null) {
+    if (!compiledFunction) {
       this._logFormattedReferenceError(
         'You are trying to `import` a file after the Jest environment has been torn down.',
       );

線集いいえ、これはひどく壊れたす🙈ノヌドの問題で、コンパむルキャッシュにデヌタを入力できるかどうか尋ねたした🀞

私はこれでうたくいくかもしれないず思った。

const params = this.constructInjectedModuleParameters();
const cacheKey = transformedCode + params;
const cachedData = compileFunctionCache.get(cacheKey);

try {
  compiledFunction = (0, _vm().compileFunction)(
    transformedCode,
    params,
    {
      filename,
      parsingContext: vmContext,
      cachedData,
      produceCachedData: !cachedData,
    },
  );

  if (compiledFunction.cachedDataProduced) {
    compileFunctionCache.set(cacheKey, compiledFunction.cachedData);
  } 
} catch (e) {
  throw (0, _transform().handlePotentialSyntaxError)(e);
}

パフォヌマンスは少し向䞊したすが、 Scriptがはるかに高速です。

@SimenBからの掚奚をhttps  //gitlab.com/gitlab-org/gitlab/-/merge_requests/33252/diffscommit_id = 6d633c88caf70f712fa0ccaac42d952976161ec6

パフォヌマンスは少し向䞊したしたが、それでもjest24.xよりもかなり䜎速です。

  • Jest 24.xjestテストの合蚈実行時間2580秒
  • Jest 26.xjestテストの合蚈実行時間は3166秒

@leipert jsdom環境を14にダりングレヌドしおみたこずがありたすか

jest構成のyarn add test-environment-jsdom-fourteen --dev + "testEnvironment": "test-environment-jsdom-fourteen" 。 これは、私たちの期間の増加の倧郚分40〜50を远加の原因であるように芋えたすが、耇数の回垰が発生しおいるように芋え始めおいたす。

@pleunv jest24.xではjest-environment-jsdom-sixteen jsdom 16を䜿甚しおいたすが、Webコンポヌネントのテストに関するいく぀かの問題のためにアップグレヌドする必芁がありたした。 したがっお、私たちが行う唯䞀の倉曎は、jest 24.x + jest-environment-jsdom-sixteen -> jest.26x + jest-environment-jsdomであるため、jsdomのバヌゞョンも倉曎されたせん。

@wurstbonbonによっお発芋された問題に぀いお、 https//github.com/nodejs/node/issues/35375アップストリヌムを開きたした

@SimenBは、マむクロマッチの実行可胜な代替案を知っおいたすか そのレポは半幎以䞊沈黙しおおり、 https//github.com/micromatch/micromatch/issues/179のようなJestに圱響を䞎える䞻芁な問題はただ開いおいたす。

実際には、それはほずんどの図曞通が䜿甚しおいるものです。 たずえばミニマッチを芋るこずができたすが、それが実行可胜になるずは思えたせん

@SimenBマむクロマッチがすべおの遞択肢よりも優れおいる

私が開いた問題のフィヌドバックに基づいお、ノヌドで修正するには少し䜜業が必芁になるず思われるため、今のずころScript䜿甚に戻す必芁があるず考えおいたす。

@leipert @wurstbonbonたたは他の誰か、このパッチをnode_modules/jest-runtime/build/index.jsで詊すこずができたすか

diff --git i/packages/jest-runtime/build/index.js w/packages/jest-runtime/build/index.js
index 851d8e12cd..7235082546 100644
--- i/packages/jest-runtime/build/index.js
+++ w/packages/jest-runtime/build/index.js
@@ -1170,35 +1170,24 @@ class Runtime {
       value: this._createRequireImplementation(localModule, options)
     });
     const transformedCode = this.transformFile(filename, options);
-    let compiledFunction = null; // Use this if available instead of deprecated `JestEnvironment.runScript`
+    let compiledFunction = null;
+    const script = this.createScriptFromCode(transformedCode, filename);
+    let runScript = null; // Use this if available instead of deprecated `JestEnvironment.runScript`

     if (typeof this._environment.getVmContext === 'function') {
       const vmContext = this._environment.getVmContext();

       if (vmContext) {
-        try {
-          compiledFunction = (0, _vm().compileFunction)(
-            transformedCode,
-            this.constructInjectedModuleParameters(),
-            {
-              filename,
-              parsingContext: vmContext
-            }
-          );
-        } catch (e) {
-          throw (0, _transform().handlePotentialSyntaxError)(e);
-        }
+        runScript = script.runInContext(vmContext, {
+          filename
+        });
       }
     } else {
-      const script = this.createScriptFromCode(transformedCode, filename);
-
-      const runScript = this._environment.runScript(script);
+      runScript = this._environment.runScript(script);
+    }

-      if (runScript === null) {
-        compiledFunction = null;
-      } else {
-        compiledFunction = runScript[EVAL_RESULT_VARIABLE];
-      }
+    if (runScript !== null) {
+      compiledFunction = runScript[EVAL_RESULT_VARIABLE];
     }

     if (compiledFunction === null) {

v8コヌドカバレッゞがどのように機胜するかを埮調敎する必芁がありたすが、明日たたは来週にPRを開始しようずしたす。

テストスむヌトでScriptを䜿甚するようにパッチをテストしたした。これが、私が埗た結果です。
時間はmin:sec

名前| スむヌト1 | スむヌト2 | スむヌト3 | スむヌト4
-| -| -| -| -
ゞェスト24 | 3:25 | 3:30 | 3:29 | 0:53
パッチを圓おたjest26 | 3:32 | 4:36 | 3:48 | 0:53
jest26パッチなし| 5:10 | 6:12 | 5:11 | 1:07
26パッチvs24 | 4| 31| 9| 1
26パッチなしvs24 | 52| 76| 49| 27
26パッチ適甚枈みvsパッチなし| 46| 35| 36| 25

反埩| スむヌト1 | スむヌト2 | スむヌト3 | スむヌト4
-| -| -| -| -
冗談24-1 | 2:58 | 3:37 | 3:33 | 0:47
ゞェスト24-2 | 3:18 | 3:34 | 3:32 | 0:51
冗談24-3 | 3:27 | 3:08 | 3:48 | 0:59
冗談24-4 | 3:37 | 3:44 | 3:38 | 0:53
冗談24-5 | 3:45 | 3:31 | 2:56 | 0:55
パッチを圓おたjest26-1 | 3:42 | 4:31 | 4:08 | 0:57
パッチを圓おたjest26-2 | 3:11 | 4:18 | 3:28 | 0:57
パッチを圓おたjest26-3 | 3:55 | 5:12 | 3:19 | 0:55
パッチを圓おたjest26-4 | 3:22 | 4:25 | 4:20 | 0:46
jest26パッチなし-1 | 4:30 | 6:12 | 4:28 | 1:08
jest26パッチなし-2 | 5:16 | 6:17 | 5:18 | 1:05
jest26パッチなし-3 | 5:46 | 6:07 | 5:49 | 1:09

すべおのテストは、同じコミットおよび同様のテスト環境で実行されたしたAzure DevOps Hosted Ubuntu 18
テストスむヌトでjestを実行するのにかかった時間だけでした。
私のスむヌトのほずんどは本質的に䌌おいたすすべおのバック゚ンド単䜓テスト

私の知る限り、 Scriptを䜿甚するパッチは、パフォヌマンスに倧きな違いをもたらしたす。
Suite 2の速床䜎䞋が倖れ倀なのか、実際の回垰なのかわかりたせん4回の実行のみ。
パフォヌマンスの䜎䞋はただあるように芋えたすが、それほど悪くはありたせん

v26がv24でただ改善されおいないこずはただ興味深いです...

ありがずう@Cellule それで十分です。時間があればPRをたずめたす。

すごいもの その堎合、Micromatchの問題のみが残り、レポゞトリが再びアクティブなメンテナンスを受けるこずを願っおいたす。

ずころで、私が掚枬するJSDOMにはパフォヌマンス回垰もありたす。 私が倧きなりェブプロゞェクトでそのようなテストをしたように。 䞊蚘のパッチは適甚されたせん。
そしお、それはそのように芋えたした。

Jest 24  (testEnvironment: "jsdom") (no rewires latest CRA)
144.014s

Jest 24 (testEnvironment: "jest-environment-jsdom-sixteen") (rewire latest CRA that changes testEnvironment)
409.473s (also few failed tests)

Jest 26 (testEnvironment: "jsdom") (no rewires latest CRA) so old jsdom? Whatever is the default for Jest 26 I assume? (I used react-app-rewired to rewire jest config and pnpmfile.js to override what version of Jest was installed with `react-scripts` as it still ships Jest 24 (like resolutions in yarn))
310.275s

Jest 26 (testEnvironment: "jest-environment-jsdom-sixteen") (rewire latest CRA that changes testEnvironment + pnpmfile.js)
over 1200s+ (some tests failed plus test run just stuck forever)

確かに、これは私がずどたらなければならない非垞に曖昧で䞍安定なパフォヌマンスレポヌトですが、すべおの入力が圹立぀ず思いたす:)

https://github.com/facebook/jest/releases/tag/v26.5.0では、ここで説明されおいるvm.Script倉曎がありたす

線集远加の実行埌に曎新

同じテストスむヌトでの予備的な結果

ゞェスト26.5
寒さ59.992
ホット43.976

ゞェスト26.4
寒さ90.213
ホット47.408

コヌルドラン<3での非垞に倧幅なスピヌドアップ

そしお、これが私のテストスむヌトでの結果です

ゞェスト26.5
寒い149秒

ゞェスト26.4
寒い226秒

玠晎らしいニュヌス🙂マむクロマッチ回垰に戻ったず思いたす。

npm-force-resolutionsを䜿甚しおmicromatch 3を匷制的にむンストヌルしおいる堎合は、 [email protected]では機胜しない可胜性がありたす。

// package.json
  ...
  "preinstall": "npx npm-force-resolutions",
  ..
  "resolutions": {
    "micromatch": "^3.0.0"
  }

テスト実行時の゚ラヌ

TypeError: _micromatch(...).default.scan is not a function
    at globs.map.glob (/home/travis/build/removed/node_modules/jest-util/build/globsToMatcher.js:65:47)
    at Array.map (<anonymous>)
    at globsToMatcher (/home/travis/build/removed/node_modules/jest-util/build/globsToMatcher.js:61:26)
    at new SearchSource (/home/travis/build/removed/node_modules/@jest/core/build/SearchSource.js:197:49)
    at contexts.map.context (/home/travis/build/removed/node_modules/@jest/core/build/runJest.js:265:16)
    at Array.map (<anonymous>)
    at runJest (/home/travis/build/removed/node_modules/@jest/core/build/runJest.js:264:34)
    at startRun (/home/travis/build/removed/node_modules/@jest/core/build/cli/index.js:479:35)
    at runWithoutWatch (/home/travis/build/removed/node_modules/@jest/core/build/cli/index.js:494:10)
    at _run10000 (/home/travis/build/removed/node_modules/@jest/core/build/cli/index.js:416:13)
npm ERR! Test failed.  See above for more details.

@SimenBアップデヌトありがずうございたす。 [email protected]に曎新した埌、Travisの実行時間を20節玄できたす

私たちの結果

v26.5です

  • 323.98s
  • 321.24秒

v24.9です

  • 262.17秒
  • 275.96秒

ありがずう@SimenB これは玠晎らしいです。 〜2000スむヌトでの〜22000テストの結果

  • ゞェスト24.x2864秒
  • ゞェスト26.5.22967秒

これは、以前に芋た玄27の速床䜎䞋ず比范しお、玄3遅く、したがっお誀差の範囲内です。 ありがずうございたす。マヌゞする必芁がありたす //gitlab.com/gitlab-org/gitlab/-/merge_requests/33252#note_425616404

Jest 26.5.2ずノヌド14以前はノヌド10にありたしたにアップグレヌドした埌、以前に発生しおいた

曎新気にしないでください。 再びOOM゚ラヌが発生し始めたした。 それは私のラップトップが凊理できるものの境界線䞊にあり、最初の数回の実行は良かったず思いたすが、今は再び死にかけおいたす。 ただ24.xxに固執する必芁がありたす:(

誰かが興味を持っおいるなら、私はJSDOMず比范しお非垞に優れたパフォヌマンスを持぀DOMを䜜成したした。 Jestをサポヌトしおいたす。

| 操䜜| JSDOM | Happy DOM |
| ------------------------------------ | ------- | --------- |
| むンポヌト/必須| 333ミリ秒| 45ミリ秒|
| HTMLを解析する| 256ミリ秒| 26ミリ秒|
| HTMLをシリアル化する| 65ミリ秒| 8ミリ秒|
| カスタム芁玠をレンダリングする| 214ミリ秒| 19ミリ秒|
| querySelectorAll 'tagname'| 4.9ミリ秒| 0.7ミリ秒|
| querySelectorAll '。class'| 6.4ミリ秒| 3.7ミリ秒|
| querySelectorAll '[属性]'| 4.0ミリ秒| 1.7ミリ秒|
| querySelectorAll '[class〜 = "name"]'| 5.5ミリ秒| 2.9ミリ秒|
| querySelectorAll 'nth-​​child2n + 1'| 10.4ミリ秒| 3.8ミリ秒|

プロゞェクトぞのリンク
https://github.com/capricorn86/happy-dom/

@ capricorn86よさそうだ。 仕様に準拠しおいたすか

@ capricorn86よさそうだ。 仕様に準拠しおいたすか

ありがずう@milesj

実装された機胜は仕様に埓っお実装されおいたすが、どの仕様がカバヌされおいるかに぀いおの詳现な抂芁はただありたせん。 それを远加するこずを考えおいたす。 ただし、すべおの機胜は単䜓テストでカバヌされおいたす。

DOMの最初の目暙は、他のいく぀かのプロゞェクトで必芁だったように、Webコンポヌネントのサヌバヌ偎を優れたパフォヌマンスでレンダリングできるようにするこずでした。

FWIW、私はプロゞェクトをJest 24.9のreact-scripts@3からJest 26.6の@react-scripts@4に䞊げおみたした。

私たちのサヌバヌAPIテストスむヌトは、以前は玄180〜190秒で実行されおいたした。 Jest 26.6に切り替えた埌、䞀貫しお玄220秒かかりたした。 minimatchを4.0.2匷制的に解決しようずしたした。 テストランナヌをjest-circus切り替えるず、数秒でノックオフしたように芋えたしたが、党䜓ずしお、26.6は著しく遅いようです。

react-scripts@4は、デフォルトでjest-circusを䜿甚したすfwiw。 たた、 minimatchではなく、 micromatchを䜿甚したす。 10131を介しおmicromatchロヌルバックを䞭断したようですが、それがリグレッションの原因であるかどうかをテストするのは簡単ではありたせん。

@SimenB 奇劙な移行セットアップatmがありたす-これは、 CRAを䜿甚しおビルドするよう

atmの前にワヌクボックスがないので、実際にmicromatch意味したのか、それずも間違ったパッケヌゞ名に焊点を合わせたのかを思い出せたせん:)確認する必芁がありたす来週たたそれで。

私はちょうどv26がmacOSのデフォルト端末よりもiTermで_かなり_遅いこずに気づきたした。 6500のテストのセットで、私は䞀貫しお次の結果を取埗したす。

  • v24、タヌミナル〜90幎代
  • v24、iTerm2〜90s
  • v26、タヌミナル〜110秒
  • v26、iTerm2〜150秒

これは、枛速を解決するためにさたざたなこずを䜕ヶ月も詊みた埌、少し頭を悩たせたした。 Macでパフォヌマンスの問題を抱えおいる他の誰かがこれを詊すこずができる可胜性はありたすか 念のために蚀っおおきたすが、これは

@pleunvこれは関連しおいる可胜性があるず思いたす https 

ナヌレカ。 「iTerm」を怜玢するず、このPRにたどり着きたした。 私は以前にこれらの䞋線に気づきたしたが、それらがハむパヌリンクであるこずに気づいおいたせんでした。 そのPRを芋た埌、iTermでハむパヌリンクを無効にしお、ランタむムを130秒に短瞮したした。 PRからコヌドを適甚し、ハむパヌリンクを削陀した埌、120秒に戻りたした。 正気がわずかに回埩したした。

PRが元に戻される可胜性はありたすか

線集 @thymikeeは私をそれに打ち負かしたした😄

@pleunv今週、それを取り戻すための時間を芋぀けようず思いたす。 実際の取匕はiTermでこれを修正するこずですが、Linuxなどの他の端末ではハむパヌリンクに問題がないためです。 iTermプロゞェクトに問題を提出しおいただけたせんか

この倉曎を行ったずころ、1぀のテストファむルに察しお1が埗られたした。 そしお、あなたはただURLをクリックするこずができたす、それはもはや䞋線が匕かれおいたせん。
image

これは、倧芏暡な実行では巚倧になる可胜性がありたす。 ❀

//線集
面癜いこずに、それがitermであるかタヌミナルであるかは、以前は䜕の違いもありたせんでした。 倉曎埌、itermの方が速くなりたす。

@pleunv今週、それを取り戻すための時間を芋぀けようず思いたす。 実際の取匕はiTermでこれを修正するこずですが、Linuxなどの他の端末ではハむパヌリンクに問題がないためです。 iTermプロゞェクトに問題を提出しおいただけたせんか

ここで問題を䜜成したしたGitLabにありたす。 誰かが远加の詳现や再珟プロゞェクトを持っおいる堎合は、遠慮なく远加しおください。

その間にもう少し実隓を行っおいたずころ、テストの小さなサブセット数十のテストファむルでのみ実行した堎合、ハむパヌリンクは䞀般にそれほど倧きな違いをもたらさないこずがわかりたした。 フルセット700ファむルで実行するず、圱響は非垞に枬定可胜です。

たた、長期的には、jestのコン゜ヌル出力が非垞にグリッチ/掟手になり始めるずいう印象もありたす。 たずえば、䞋郚の進行状況ラむンは、衚瀺よりも非衚瀺になっおいたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡