Ember.js: バヌゞョン2.Xず3.Xの間のパフォヌマンスの䜎䞋

䜜成日 2020幎05月14日  Â·  28コメント  Â·  ゜ヌス: emberjs/ember.js

バヌゞョン2.Xず3.Xの間で60のパフォヌマンス䜎䞋がありたす。 さたざたなバヌゞョンの以䞋のフィドルのレンダリング時間ログを参照しおください。 スタむリングや蚈算を行わずに玔粋なレンダリングパフォヌマンスを瀺すために簡略化された䟋。

2.18フィドルレンダリング時間〜500ms
3.18フィドルレンダリング時間〜800ms

Bug Regression Rendering

最も参考になるコメント

これに぀いお簡単な曎新をしたかっただけです

私たちは、ず蚭定@runspired 1に類䌌TracerBenchテスト走っemberobserver.comいかなるがあったかどうかを確認するために私たちの通垞のテストアプリケヌションの䞀぀である、カ゚ル沞隰のバヌゞョンから重芁ではなかった䟋えば、小さなパフォヌマンスの倉化を発生しおいたしたバヌゞョンですが、合蚈するず倧きなシフトになりたす。 そのテストの結果は次のずおりです。

ember-observer-2.18-3.18.pdf

これらの結果から、2぀のかなり決定的なゞャンプがあるこずがわかりたす。

  1. Ember3.0からEmber3.1
  2. Ember3.16からEmber3.17

3.17でのリグレッションは、Glimmer VMのアップグレヌドによるものです。これはかなり最近のものであり、LTSサむクルで間もなく曎新されるアプリケヌションに圱響を及がし始める可胜性があるため、珟圚、これを枛らすこずに重点を眮いおいたす。

3.1でのリグレッションは、コアチヌムずの話し合いの結果、圓時実際に知られおいたした。 これは、䞀郚、ネむティブゲッタヌを有効にし、 Object.definePropertyを䜿甚したこずが原因

䞀般に、この問題の冒頭で提起された{{each}}シナリオは、emberobserver.comよりもさたざたな方法で埌退したようです。 3.17回垰を掘り䞋げたら、 {{each}}最適化に焊点を圓おお、そこで䞀般的に䜕を改善できるかを確認したす。

お埅ちいただき、ありがずうございたす。

党おのコメント28件

私のマシンのChrome81で数回実行した埌、次のようになりたした。

2.18ベストタむム283ms
3.18ベストタむム471ms

それは、DevToolsを閉じた状態で実行しおいたした。

次に、次の方法で3.18twiddleをEmberOctaneに倉換したした。

  • コンポヌネントずコントロヌラヌにネむティブクラスを䜿甚する。
  • @trackedを䜿甚し、 @computedを䜿甚しない。
  • t-rコンポヌネントは、バッキングクラスを必芁ずしないため、テンプレヌトのみのコンポヌネントに倉換したす。
  • コンポヌネントを呌び出すずきに山かっこ構文を䜿甚する。
  • テンプレヌトで適切な堎合は、名前付き匕数ずthis.したす。

その埌、3.18.1から埗たベストタむムは276msだったので、2.18の数倀に沿っお有意矩な改善が芋られたした。

ただし、これらのパフォヌマンステストは特に科孊的なものではなく、パフォヌマンスの芳点からどの倉曎が最も重芁であるかに぀いおは調査しおいたせん。

ひねりでのプロファむリングはかなり゚ラヌが発生しやすいですが、プロファむリングするために通垞のember-cliアプリリポゞトリに移怍できたすか2぀のバヌゞョンのそれぞれにブランチを䜿甚

@rwjblue通垞のember-cliアプリでも同じ結果が埗られたす。 ここでテストでき

@ richard-viney考慮すべき改善点があるかもしれたせんが、問題は、䞡方のバヌゞョンで非掚奚のコヌドが䜿甚されおおらず、パフォヌマンスの䜎䞋が蚱容できないように芋えるこずです。

  • template-only-componentを䜿甚するずパフォヌマンスが向䞊する可胜性がありたすが、trには、いく぀かの内郚スタむルを蚈算するためのバッキングクラスが必芁です。 問題を瀺すために䟋を簡略化したした。
  • すべおのリファクタリングを䜿甚するず、2.18に察しお2283ms-> 276msのパフォヌマンス向䞊が埗られたす。 3.Xにアップグレヌドする既存の2.18アプリに぀いお考えおみたす。 2のブヌストを埗るためだけにすべおのコンポヌネントをリファクタリングするこずは、絶察に実行可胜ではありたせん。

@barisnisanci同意したした。アップグレヌド時にパフォヌマンスが倧幅に䜎䞋するのを防ぐために、この皮のリファクタリングが必芁であるこずを瀺唆する

介圚するLTSバヌゞョン、぀たり3.4、3.8、3.12、および3.16もテストするこずにより、どのEmberリリヌスがパフォヌマンス回垰を導入したかを知るこずは興味深いでしょう。

@barisnisanci Ember Twiddleずember serveは、デフォルトで開発モヌドで実行されたす。 開発䞭に、パフォヌマンスを倧幅に䜎䞋させる可胜性のある倚くの远加ツヌルが有効になりたす。 開発者の人間工孊に圱響を䞎えるほど悪い堎合を陀いお、通垞、これをリグレッションや問題ずは芋なしたせん。 したがっお、最初に、䞡方のバヌゞョンを本番モヌドで実行しおいるこずを再確認したす。

私はあなたの䟋をダりンロヌドし、本番モヌドで2.8ず3.18の䞡方を䞊べお提䟛したした。 私が芋぀けたのは、あなたが正しいように思われるずいうこずでした。平均しお、2぀のヘルパヌ操䜜ここで枬定されおいるもの間のタむミングは、2.8よりも3.18の方が倧きいようです。 これは、倚くのコントロヌルを䜿甚せずに仕事甚のラップトップでいく぀かのサンプルを取埗したこずに基づいおいるため、確実に蚀うのは難しいですが、目を芋匵るず、わずかな倉曎になる可胜性がありたす。

ただし、他のより意味のあるメトリックを芋るず、倉化は芋られたせん。 特にコンテンツをレンダリングするための党䜓的な時間を芋るず、それらは䞀般的にほが同じように芋えたす。 たずえば、最初のペむントたでの時間はほが同じです。

Screen Shot 2020-05-18 at 11 10 15 AM

倚くの䜜業が倚くの堎所に分散しおいるこずを芚えおおくこずが重芁です。倉曎を加えるず、その䜜業は動き回っおも、_党䜓の_メトリックには圱響したせん。 これが、 TracerBenchを䜿甚しおパフォヌマンスの倉化をチェックする理由です。これは、レンダリングの党䜓的なフェヌズを考慮し、ヘルパヌの実行間のタむミングなど、_micro_レベルではなく_macro_レベルですべおの倉曎を考慮するように蚭蚈されおいるためです。

これらの結果を怜蚌し、䞀般的にスリップしおいないこずを確認するために、TracerBenchテストをより長い期間にわたっおすぐに実行する必芁がありたす通垞、朜圚的なリグレッションが予想される小さな倉曎に䜿甚したす。 たた、トレンドラむンを確認できるように、定期的に実行するようにしおください。

@pzuraqリポゞトリをrowsCount:300曎新したずころ、 columnsCount:20違いがより目立぀ようになりたした。 どちらも--environment production

  • 3.18最初のペむント3489ミリ秒
    3 18
  • 2.18最初のペむント2814ミリ秒
    2 18

たた、JSヒヌプは3.18でリリヌスされなかったが、GCで運が悪かった可胜性があるこずにも気づいた。

カりントを増やす代わりに、スタむルバむンディング、サヌビスむンゞェクション、コンポヌネントのより重い蚈算を远加できたすが、根本的な問題を隠す可胜性がありたす。

あなたが蚀ったように、党䜓的な枬定基準は小さな倉曎よりもはるかに重芁です。 ただし、この堎合、わずかな違いがパフォヌマンスの倧幅な䜎䞋に぀ながりたす。 3.18にアップグレヌドした埌、商甚アプリケヌションの初期レンダリング時間が15秒から20秒に増加したした。 わずかなミリ秒の倉化ではなく、パヌセンテヌゞの芳点から回垰を怜蚎するこずを願っおいたす。

圓瀟はこの問題に苊しんでいたす。 残り火バヌゞョンを2.18から3.16に曎新したした。 その埌、レンダリング時間は「50」パヌセントより長くなりたした。 耇雑な構造を䜿甚するず、わずかなミリ秒の倉化ではなく、レンダリング時間の違いがより明癜になりたした。 この問題に関する曎新はありたすか レンダリング時間の50の増加を瀺すベンチマヌクがありたす。 ずりあえず2.18を保持するこずにしたした。 倧幅なリファクタリングが必芁な堎合は、フレヌムワヌクの切り替えを怜蚎する堎合がありたす。

@ Caglayan06プロダクションフラグを䜿甚しおいるこずを確認できたすか 数字がアップルトゥアップルであるこずを確認したいだけです

@ Caglayan06-これが単䞀のものである可胜性は䜎いです。 @barisnisanciが提䟛した耇補は、アプリケヌションプロファむルが瀺すものず䞀臎しない堎合がありたす。 アプリの䞀般的な問題の再珟を提䟛できたすかたたは、 @ barisnisanciの䞊蚘のリポゞトリの䟋が䜿甚シナリオ/プロファむル出力を衚しおいるこずを確認しおください

このスレッドでの@barisnisanciの最新の投皿に぀いおコメントはありたすか
2.18から3.16にアップグレヌドした埌、同様のパフォヌマンスの問題が発生したした。 パフォヌマンスが40䜎䞋したした。 3.12にダりングレヌドしたしたが、その損倱の20しか節玄できず、2.18ほどではありたせんでした。 前に述べた方法のリファクタリングは、フレヌムワヌクの切り替えずほが同じくらいの時間がかかりたす。 この問題に察する䜕らかの行動を期埅したすか

最近、ember 3.16.8にアップグレヌドしたしたが、perfテストケヌスはなく、パフォヌマンスの明らかな問題は今のずころ芋぀かりたせん。
しかし、私はパフォヌマンスの問題をすぐに解決しお解決するこずを楜しみにしおいたす。
>>

PSie11で䜿甚されるより倚くのメモリずCPU。 時々それはie11クラッシュを匕き起こしたす。

@ Caglayan06-これが単䞀のものである可胜性は䜎いです。 @barisnisanciが提䟛した耇補は、アプリケヌションプロファむルが瀺すものず䞀臎しない堎合がありたす。 アプリの䞀般的な問題の再珟を提䟛できたすかたたは、 @ barisnisanciの䞊蚘のリポゞトリの䟋が䜿甚シナリオ/プロファむル出力を衚しおいるこずを確認しおください

@rwjblue @barisnisanciの䟋は、 @ barisnisanciの蚀い方ず同じように

@ Caglayan06プロダクションフラグを䜿甚しおいるこずを確認できたすか 数字がアップルトゥアップルであるこずを確認したいだけです

@scottmessingerはい、本番フラグを䜿甚しおいたす。 @barisnisanci 'の結果ず

コヌド構造を改善したした。 パフォヌマンスは向䞊したしたが、それでもember2.18バヌゞョンほど高速ではありたせん。 2.18でその倉曎を行うず、最良の結果が埗られたした。

コヌドシステムをオヌバヌホヌルしお3.16コヌド構文ず新機胜を倉曎するこずはできたせん。 私たちのプロゞェクトは巚倧であるため、これは私たちにずっおコストがかかりすぎたす。 おそらく、すべおのプロゞェクトをリファクタリングするこずは、フレヌムワヌクを倉曎するよりもコストがかかりたす。 この問題に察しお䜕らかの措眮が取られたすか

この問題に察しお䜕らかの措眮が取られたすか

はい、もちろん プロファむルを䜜成し、䜕が起こっおいるのかを理解する時間を芋぀ける必芁がありたす。 しかし、それは本圓に誰かを埅぀必芁はありたせんが、あなたは掘り䞋げたす😞

@rwjblue @barisnisanciの䟋は、 @ barisnisanciの蚀い方ず同じように

@ Caglayan06-うヌん、それは私が実際に尋ねたものではありたせん。 @barisnisanciの䟋が機胜するこずはわかっおいたす。それを確認し、プロファむルを䜜成し、パフォヌマンス特性をアプリケヌションず比范しお、䟋が機胜するそしお遅い_way_がアプリケヌションず䞀臎するかどうかを

@ Caglayan06-うヌん、それは私が実際に尋ねたものではありたせん。 @barisnisanciの䟋が機胜するこずはわかっおいたす。それを確認し、プロファむルを䜜成し、パフォヌマンス特性をアプリケヌションず比范しお、䟋が機胜するそしお遅い_way_がアプリケヌションず䞀臎するかどうかを

私は統合@rwjblueの@barisnisanciレポ我々のアプリケヌションには、それは同様の結果が埗られたした。 バヌゞョンを3.16から3.12に倉曎するず、パフォヌマンスが向䞊したした。
しかし、それでも2.18バヌゞョンほど高速ではありたせん。

いく぀かの䟋のアプリケヌションでは
2977

結果ずしお
コヌド構造、合蚈平均レンダリング時間を改善したした。
2.18レンダリング時間1x秒
3.16レンダリング時間1.6x秒。
3.12レンダリング時間1.4x秒。

3.20にはVMアップグレヌドがあるので、それがここで圹立぀かどうか疑問に思いたす

@NullVoxPopuliは3.20.0-beta.2FPで運がなかった3.4秒3.18ず同じ

3.12の方が良い結果が埗られるので、自動远跡で問題が発生する可胜性があるず思いたす。 たた、18225は、 @ Caglayan06の3.12-> 3.16ベンチマヌクでのアプリケヌション党䜓のパフォヌマンスの䜎䞋を考慮しお関連しおいる可胜性がありたす。

うヌん。 埌方互換性のものはどれくらいのオヌバヌヘッドがあるのだろうか

いく぀かの䞀般的な質問

  • 非同期オブザヌバヌのオプション機胜フラグの倀は䜕ですか
  • 問題のアプリはQPを䜿甚しおいたすか
  • 負の速床はすべおのルヌトに圱響したすか、それずも䞀郚にのみ圱響したすか

いく぀かの䞀般的な質問

  • 非同期オブザヌバヌのオプション機胜フラグの倀は䜕ですか
  • 問題のアプリはQPを䜿甚しおいたすか
  • 負の速床はすべおのルヌトに圱響したすか、それずも䞀郚にのみ圱響したすか

@rwjblue

  1. 非同期オブザヌバヌフラグを䜿甚しない3.12ではデフォルトはfalseだず思いたす。 3.16では、䞡方でテストしおも倧きな違いはありたせん。
  2. 䞻芁ルヌトで広く䜿甚されおいるQP。 ただし、パフォヌマンスの䜎䞋は䜕も芳察されたせんでした。
  3. すべおのルヌトが圱響を受けたす

たた、サンプルリポゞトリは䞊蚘のいずれも䜿甚しおいたせんが、3.Xではさらに䜎速です。 マむナヌバヌゞョンごずにレンダリング時間が埐々に長くなる可胜性があるため、正確な問題を特定するこずはできたせん。

Tracerbenchのレポヌトによるず、2.18から3.18は、このシナリオでは最倧17回垰したすが、グリマヌコンポヌネントぞの倉換が行われるず、回垰ではなく最倧18向䞊したす。

2.18から3.18その他の倉曎なし
2.18から3.18+オクタン+グリマヌコンポヌネント

このための自動ランナヌを远加した独自のフォヌクを持っおおり、バヌゞョン/コミットですばやく絞り蟌んでリグレッションが発生した堎所を芋぀けるこずができるように、ランナヌの改善に取り組んでいたす。 https://github.com/runspired/version-performance/runs/801596557

これらのテストを蚭定しおくれた@runspiredに倧いに感謝したす 回垰を確実に枬定するための確実な蚭定ができたので、これらの問題の修正に向けお反埩するこずができたす。

コンテキストずしお、 @ krisseldenはTracerBenchを、特に党䜓的な方法でパフォヌマンスをテストするためのツヌルずしお開発し、デコレヌタの自動远跡/改蚂远跡など、内郚の䞻芁なリファクタリングに䜿甚しおいたす。 LinkedInでは、Emberをアップグレヌドするたびにアプリケヌションをテストするために䜿甚しおいたすが、このレベルのリグレッションは芋られたせん。

しかし、それは間違いなく私たちが芋逃したものかもしれたせん。 最埌に、特定のナヌスケヌスず動䜜を持぀特定のアプリをテストしおいたす。 これは、テストケヌスアプリが@barisnisanciの耇補など、回垰した機胜を䜿甚しおいなかったために怜出できなかった問題である可胜性がありたす。 たた、その耇補の問題を修正しおも、他の問題を修正できない可胜性もありたす。そのため、リグレッションが発生しおいる堎合は、ナヌスケヌスの耇補をぜひお勧めしたす。 TracerBenchのセットアップを䜿いやすくしお、ロヌカルでテストし、 @ runspiredのような予定です。

正確な問題が䜕であるかを理解し、解決策を芋぀けるために掘り䞋げおいきたす。 最も重芁なこずは、このレベルのリグレッションは、Octaneでスピヌドアップが芋られたずしおも、_any_APIでは受け入れられ

今埌のアップデヌトにご期埅ください。状況がわかり次第お知らせしたす。

@runspiredの邪悪なクヌルなhttps://github.com/TracerBench/tracerbench-compare-actionに感謝し

これに぀いお簡単な曎新をしたかっただけです

私たちは、ず蚭定@runspired 1に類䌌TracerBenchテスト走っemberobserver.comいかなるがあったかどうかを確認するために私たちの通垞のテストアプリケヌションの䞀぀である、カ゚ル沞隰のバヌゞョンから重芁ではなかった䟋えば、小さなパフォヌマンスの倉化を発生しおいたしたバヌゞョンですが、合蚈するず倧きなシフトになりたす。 そのテストの結果は次のずおりです。

ember-observer-2.18-3.18.pdf

これらの結果から、2぀のかなり決定的なゞャンプがあるこずがわかりたす。

  1. Ember3.0からEmber3.1
  2. Ember3.16からEmber3.17

3.17でのリグレッションは、Glimmer VMのアップグレヌドによるものです。これはかなり最近のものであり、LTSサむクルで間もなく曎新されるアプリケヌションに圱響を及がし始める可胜性があるため、珟圚、これを枛らすこずに重点を眮いおいたす。

3.1でのリグレッションは、コアチヌムずの話し合いの結果、圓時実際に知られおいたした。 これは、䞀郚、ネむティブゲッタヌを有効にし、 Object.definePropertyを䜿甚したこずが原因

䞀般に、この問題の冒頭で提起された{{each}}シナリオは、emberobserver.comよりもさたざたな方法で埌退したようです。 3.17回垰を掘り䞋げたら、 {{each}}最適化に焊点を圓おお、そこで䞀般的に䜕を改善できるかを確認したす。

お埅ちいただき、ありがずうございたす。

この問題に関する最新情報を入手できたすか 箄2ヶ月になりたす。

はい 2か月が経ちたしたが、私たちはこの問題に懞呜に取り組んでおり、GlimmerVMでリファクタリングを継続しおいたす。

前に述べたように、私たちは2぀の別々の修正セットに焊点を合わせおいたした。

  1. 次のLTSにアップグレヌドしようずしおいる人々のために、3.20LTSリリヌスに着陞するための䜎リスクリファクタリング
  2. 長期的にパフォヌマンスを向䞊させるために、マスタヌに着陞するための倧芏暡なリファクタリング

最初の䞀連の修正では、最も圱響を受けたコヌドであるため、かなりの量の埓来のEmberコヌドをリファクタリングしたした。 LinkedInの内郚アプリケヌションでのテストに基づいお、この方法で党䜓的なパフォヌマンスの䜎䞋を3.16〜3.20から統蚈的に有意でない量たで枛らすこずができたした。 残念ながら、Ember Observerに察しおテストを実行する機䌚はありたせんでしたが、通垞はかなり密接に远跡しおいるため、同様の結果になるず思いたす。

2番目の修正セットでは、次のような倚くの修正が非垞に倧きかったため、比范的最近になりたした。

  • 内郚で完党に自動远跡されるようにVMを曎新し、䜙分なタグを取り陀きたす
  • 非垞に耇雑な倚くの実装ではなく、単䞀の単盞参照クラスを䜿甚するようにVMをリファクタリングする
  • 未䜿甚のAoTコンパむルモヌドの削陀

結果はかなり玠晎らしいです

results.pdf

これは、Emberの珟圚のマスタヌをEmber 2.18ず比范しおおり、䞊蚘の@barisnisanciからの耇補です。 さお、前述のように、これは非垞に特殊なナヌスケヌスのベンチマヌクであり、これも非垞に単玔です。 実際のアプリのベンチマヌクでこのような劇的な改善は芋られたせんでしたが、党䜓的にははるかに控えめでした。 うたくいけば、これが@barisnisanciや他のアプリケヌションに圹立぀こずを

残り火のマスタヌブランチで䞊蚘のレポをテストしたした。 それでも最初のペむント3035.7ミリ秒は2.182752.3ミリ秒よりも倧きいようです

たた、さたざたな残り火バヌゞョンを䜿甚しお本番環境でテストしたした。 マスタヌブランチは、アプリの3.12よりも25から40遅いようです。 以䞋の結果では、倧幅なリファクタリングなしでemberをアップグレヌドするこずはできたせん。

perf

@barisnisanci申し蚳ありたせんが、そうです このスレッドで前述したように、A。問題を確認し、B。党䜓ずしお改善ずより良い解決策に向けお反埩できるようにするには、これらの結果を統蚈的に適切な方法で再珟する必芁がありたす。 これらのベンチマヌクを自分で実行できるようにTracerBenchをアプリケヌションに远加するか、 master問題を瀺す別の耇補を䜜成するこずをお勧めしたす。

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