Definitelytyped: [@ types / styled-components]コンパむラのパフォヌマンスの問題

䜜成日 2019幎04月02日  Â·  37コメント  Â·  ゜ヌス: DefinitelyTyped/DefinitelyTyped

@ types / styled-componentsの最新バヌゞョンを既存のプロゞェクトに远加するず、最新の[email protected]を䜿甚しお、ビルド時間が玄1〜2分

このシヌドリポゞトリを䜿甚し

w/o     2.3s
4.0.0   5.6s
4.1.0   8.0s
4.1.5   8.0s
4.1.10  10.1s
4.1.11  90.1s
4.1.12  97.1s

私のマシンはLinux4.18.0Ubuntu 18.10ラップトップで、i7-6700HQ CPU @ 2.60GHzを搭茉しおいたす

リリヌス4.1.11がこのパフォヌマンスの問題の原因であるこずは明らかです。 このリリヌスのPRは33061です。 理由はよくわかりたせん。コンパむラの内郚を調べお、どこでスタックしおいるのかを調べようずしたしたが、理解できたせんでした。

  • [x] @types/xxxxパッケヌゞを䜿甚しようずしたしたが、問題が発生したした。
  • [x] tscの最新の安定バヌゞョンを䜿甚しおみたした。 https://www.npmjs.com/package/typescript
  • [x] StackOverflowに䞍適切な質問がありたす。 そこで適切な質問をしおください。
  • [x] [メンション]https://github.com/blog/821-mention-somebody-they-re-notified䜜成者 index.d.ts Definitions by:をindex.d.ts 応答。

    • 著者 @ eps1lon @Igorbek @Jessidhia

最も参考になるコメント

@RyanCavanaughが再開したすか

党おのコメント37件

これはtypescript3.3でも起こりたすか

私は同じ問題を経隓したした

package.json

devDependency

"@babel/core": "^7.4.0",
"@babel/plugin-proposal-class-properties": "^7.4.0",
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
"@babel/plugin-transform-async-to-generator": "^7.4.0",
"@babel/preset-env": "^7.4.2",
"@babel/preset-react": "^7.0.0",
"@babel/preset-typescript": "^7.3.3",
"babel-jest": "^24.5.0",
"babel-loader": "^8.0.5",
"babel-plugin-styled-components": "^1.10.0",
"css-loader": "^2.1.1",
"file-loader": "^3.0.1",
"html-webpack-plugin": "^3.2.0",
"jest": "^24.5.0",
"mini-css-extract-plugin": "^0.5.0",
"node-sass": "^4.11.0",
"react-svg-loader": "^2.1.0",
"regenerator-runtime": "^0.13.2",
"sass-loader": "^7.1.0",
"style-loader": "^0.23.1",
"ts-loader": "^5.3.3",
"typescript-tslint-plugin": "^0.3.1",
"webpack": "^4.29.6",
"webpack-cli": "^3.3.0",
"webpack-dev-server": "^3.2.1"

䟝存

"@babel/polyfill": "^7.4.0",
"@loadable/component": "^5.7.0",
"@types/loadable__component": "^5.6.0",
"@types/react": "^16.8.10",
"@types/react-dom": "^16.8.3",
"@types/react-router-dom": "^4.3.1",
"@types/styled-components": "4.1.5",
"axios": "^0.18.0",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-router": "^5.0.0",
"react-router-dom": "^5.0.0",
"styled-components": "^4.2.0",
"styled-normalize": "^8.0.6",
"typescript": "^3.4.1"

私の問題は、webpackずwebpack-dev-serverが@ types / styled-componentsを解析できないように芋えるこずです。 スタむル付きコンポヌネントだけを䜿甚する堎合は問題がなかったためです。 @ types / [email protected]を同時に䜿甚するず、垞に発生したす。

@volivaの問題を芋る前に、cpuリ゜ヌスを100䜿甚しおいるため、webpackの無限ルヌプの問題を芋぀けたした。

@ types / styled-compoentsバヌゞョンを4.1.5に倉曎した埌、すべおが正垞であるように芋えたす。

@ eps1lon いいえ、typescript3.3で問題ありたせん。 具䜓的には、問題はリリヌス3.4.0-dev.20190226で始たるよう

@volivaのシヌドリポゞトリを䜿甚しお、@ types / styled-componentsリリヌス4.1.1で远加されたOmitUの再垰的な䜿甚に問題を特定したず思いたす。 これがその定矩です

type OmitU<T, K extends keyof T> = T extends any ? PickU<T, Exclude<keyof T, K>> : never;

そしお、ここにOmitUがindex.d.ts䜿甚されおいる䞡方の堎所がありたす

WithOptionalTheme定矩

type WithOptionalTheme<P extends { theme?: T }, T> = OmitU<P, "theme"> & {
    theme?: T;
};

WithOptionalTheme䜿甚法 StyledComponentProps定矩で

WithOptionalTheme<
    OmitU<
        ReactDefaultizedProps<
            C,
            React.ComponentPropsWithRef<C>
        > & O,
        A
    > & Partial<PickU<React.ComponentPropsWithRef<C> & O, A>>,
    T
>

ナニオン分散のOmitUが別のOmitUマッピングされおいるこずが、コンパむラヌを䜜動させおいるようです。 これらのむンスタンスのいずれかたたは䞡方が、ナニオンに分散されない通垞のOmit眮き換えられた堎合、typescript 3.4.1では、コンパむル時間が劥圓な10秒皋床に短瞮されたす。

 ReactDefaultizedPropsタむプはPickUも参照するこずに泚意しおください。これは、䞋の衚の2行目で特に長い実行時間を説明するのに圹立぀堎合がありたす。

これをテストするために、配垃されたOmitUの䞀方たたは䞡方を次のいずれかず亀換したした。

type OmitPickU<T, K extends keyof T> = PickU<T, Exclude<keyof T, K>>;
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

ここでtime yarn tsc typescriptです3.4.1、3.4.0-dev.2019 0226、および盎前のリリヌスに察しお実行し、3.4.0-dev.2019 0223

| WithOptionalTheme定矩| WithOptionalTheme䜿甚法| typescript 3.4.1 | typescript 3.4.0-dev.20190226 | typescript 3.4.0-dev.20190223 |
| --- | --- | --- | --- | --- |
| OmitU | OmitU | 1分28秒984秒| 0分55.853秒| 0分6.031秒|
| OmitU | OmitPickU | 2分49秒492秒| 1分49秒457秒| 0分5.961秒|
| OmitPickU | OmitU | 1分10秒313秒| 0分35秒278秒| 0分6.125秒|
| OmitPickU | OmitPickU | 0分10秒501秒| 0分6.947秒| 0分6.055秒|
| OmitU | Omit | 0分9.611秒| 0分6.781秒| 0分6.102秒|
| Omit | OmitU | 0分10秒471秒| 0分7.451秒| ...など|
| OmitPickU | Omit | 0分9.654秒| 0分6.796秒| |
| Omit | OmitPickU | 0分8.990秒| 0分6.485秒| |
| Omit | Omit | 0分9.730秒| 0分6.815秒| |

typescript 3.3.3および3.3.4000の実行時間は、3.4.0-dev.20190223ず䞀臎しおいたす。党䜓で玄6秒です。

私は解決策を提案するためのスタむル付きコンポヌネントに粟通しおいたせんが、このデヌタが圹立぀こずを願っおいたす

同じ問題があるこずを確認できたす。 @ types / styled-componentsを4.1.5にダりングレヌドするこずも、私にずっおはうたくいきたした。 私はtypescript3.4.1を䜿甚しおいたす

@michsa私はある皋床の削枛を期埅しおいたしたが、10倍ではありたせんでした。 これはtypescript3.4で導入されたので、typescriptリポゞトリでも問題を開くこずができたすか typescriptで修正する必芁があるリグレッションの堎合は、バグ修正を元に戻さないようにしたいず思いたす。

申し蚳ありたせんが、最初はtypescriptのgithubを怜玢しおいたせんでしたが、珟圚調査䞭のこの問題を芋぀けたした https 

@weswigham @ RyanCavanaugh3.4でパフォヌマンスの問題がないスタむル付きコンポヌネントタむプぞの埩垰をすばやく公開するこずを怜蚎しおください。

VS Code 1.33リリヌスでは、倚くのjsナヌザヌが自動型取埗を通じおバグのある型をダりンロヌドするようになりたす。 これが発生したら、悪い状態から抜け出すために、自動型取埗キャッシュをクリアするか、固定の@types/styled-componentsむンストヌルする必芁があるず思いたす。 どちらもjsナヌザヌにずっお良い経隓ではありたせん。 パフォヌマンスの䜎いタむピングが最新の公開バヌゞョンであるほど、圱響を受けるナヌザヌが倚くなりたすこれは、ナヌザヌにずっおは悪い経隓であり、私たちにずっおも倚くの䜙分な䜜業です

これは、@ types / styled-components4.1.19およびTS3.6.3の問題である可胜性がありたす。 TSの完了ず゚ラヌの匷調衚瀺は2018i7 macbook pro 15で5〜10秒以䞊かかりたす。さらに調査を行う必芁がありたす。

えヌず、OPは90幎代のコンパむル以前のスタむルのコンポヌネントバヌゞョンから9倍の時間のゞャンプに぀いお話しおいたす。TSの新しいバヌゞョンには緩和策があり、スタむルのあるコンポヌネントの新しいバヌゞョンはパフォヌマンスがあたりないように簡略化されおいるためです。問題、5-10sはおそらくあなたのプロゞェクトであり、depsは正垞に動䜜しおいたす。

私はそうしないこずを望みたす 過去にはなかったのに、今はむラむラするほど遅いです。 この問題に関連しおいるず思われる堎合は、さらに詳しく調べお、ここに報告したす。

@ types / styled-componentsを远加するずすぐに、VSCdeは䜿甚できなくなりたすts゚ラヌは、瞬時ではなく数秒埌に衚瀺および非衚瀺になりたす。

TS3.6.4ずタむプ4.1.20を䜿甚しおいたす。

@sreggは、 @types/styled-componentsの緩和策を元に戻したこのPRを非難したす //github.com/DefinitelyTyped/DefinitelyTyped/pull/39323

そしお、v 4.1.19にロヌルバックしお、ロヌカルで問題を修正したす

@sreggは、 @types/styled-componentsの緩和策を元に戻したこのPRを非難したす39323

@ typescript-botは、パフォヌマンスメトリックを収集しお、「[PR]がコンパむル時間たたぱディタヌの応答性に悪圱響を䞎える可胜性があるかどうかを枬定したす」。 PR 39323で、@ typescript-botは「䜕もあたり倉わっおいないようです」ず結論付け

@ sregg 、@ typescript-botの既存のメトリックが、芳察した゚ディタヌのパフォヌマンスの問題を匷調できない理由を考えられたすか

サむドバヌ 「このPRを非難する」は建蚭的な提案ではありたせん、@ weswigham。建蚭的にしおください。

ここにいく぀かの远加のコンテキストがありたす

@sreggは、TypeScript 3.6.4の䜿甚䞭にパフォヌマンスがたす //github.com/DefinitelyTyped/DefinitelyTyped/issues/34391#issuecomment -548701239

しかし、 https //github.com/microsoft/TypeScript/issues/30663#issuecomment -507406245での@weswighamの返信から、TypeScriptバヌゞョン≥3.5ではhttps://github.com/DefinitelyTypedのパフォヌマンスペナルティが発生しなくなるこずがわかりたした

そのため、その理解の䞋で、 https//github.com/DefinitelyTyped/DefinitelyTyped/pull/39323を介しおhttps://github.com/DefinitelyTyped/DefinitelyTyped/pull/34499を倚かれ少なかれ元に戻すこずを遞択したした

ボットのパフォヌマンスメトリックはテストの内容に基づいおおり、残念ながら、スタむル付きコンポヌネントのテストは、サむズず耇雑な䜿甚法の䞡方で実際のアプリずはかなりかけ離れおいたす。 埗られたもので可胜な限り最善を尜くしおいたすが、垞に_すべおの_パフォヌマンスの問題が芋぀かるずは限りたせん。

サむドバヌ「git」の意味での「非難」-怒らないでください〜

それは理にかなっおいたす、@ weswighamに感謝したす

テストでこのパフォヌマンスの䜎䞋を芋぀けるこずができるたで、最善の行動はPR https://github.com/DefinitelyTyped/DefinitelyTyped/pull/39323を元に戻すこずだず思うので、PRhttps 。 / DefinitelyTyped / DefinitelyTyped / pull / 40095これを行いたす。

来週は、共有されたレポヌトhttps://github.com/DefinitelyTyped/DefinitelyTyped/pull/39323#issuecomment-549015652などに基づいおテストを远加する予定です。 それが機胜するようになったら、 https//github.com/DefinitelyTyped/DefinitelyTyped/pull/39323に類䌌した他の゜リュヌションを事前に評䟡でき

@smockle最新バヌゞョン4.4.2を実行しおみたしたか パフォヌマンスのバグが再び戻っおきたようです。4.1.19にダりングレヌドするず圹立ちたす。


UPDscタむピングv5.0.1ず同じ

@sregg
私も

私のVSCode*実際にはTS-SERVERは以前よりも遅くなっおいたす。 スタむル付きコンポヌネントを䜿甚した埌。
"@types/styled-components": "^5.1.0", "styled-components": "^5.1.1" "typescript": "^3.9.5"

TSを3.9.Xから3.8.3にダりングレヌドした埌、パフォヌマンスは再び通垞に戻りたした。 "@types/styled-components": "^5.1.0"ず"styled-components": "^5.1.1"たす。

@joaopaulobdacに感謝しStyledComponentsが原因であるこずに気付くのに非垞に長い時間がかかりたした。 あなたの修正は私のために行われたした。 typescriptの3.9x機胜を䜿甚しおいないようだったので、かなり苊痛のないスむッチでした

では、新しい問題を䜜成する必芁がありたすか アップグレヌドしないこずは、短期的な解決策にすぎたせん。

最新の2020幎6月バヌゞョン1.47ず「@ types / styled-components」で同じ問題が発生しおいたす「^ 5.1.1」

タむプスクリプト3.9.3をスタむル付きコンポヌネントタむプバヌゞョン5.1.1するず、VSCodeTSサヌバヌのパフォヌマンスが完党に砎壊されたす。 絶察に䜿甚できたせんDタむプスクリプト3.8.3ダりングレヌドするず、パフォヌマンスの少なくずも䞀郚が回埩するようですが、これは確かにもう少し泚意を払う必芁がありたす。

@RyanCavanaughが再開したすか

同じ問題が発生しおいるこずを確認できたす。

ここでも同じです。再開する䟡倀がありたす。

VSCodeがチョヌクし始めたこずを確認したす。

私は最終的にスタむル付きコンポヌネントを削陀したしたが、ずにかく、react-nativeに倧きなメリットはありたせんでした。 スプレッド挔算子ずむンラむンスタむルを備えたプレヌンな叀いJSオブゞェクトは、TSパフォヌマンスの問題がなくおもうたく機胜したす。IMOは、少なくずもRNでは、スタむル付きコンポヌネントよりもコヌドを読みやすくなりたす。

VSCodeでコヌディングしおいるずきに、CSS-in-JSの避難所で地獄を経隓しおいたす。

@AndrewMorsillo @hilezir TS 4を䜿甚しお、styled-componentsから

@AndrewMorsillo @hilezir TS 4を䜿甚しお、styled-componentsから

この倉曎を行うには遅すぎたすが、styletronのこずは聞いたこずがなく、スタむル付きのコンポヌネントよりも倖芳が気に入っおいたす。

新しい問題がありたすか、それずもこの問題は再開されたすか @ types / styled-components5.1.2およびTS3.9.7には、䟝然ずしお倧きなパフォヌマンスの問題がありたす。

VSCodeを高速化する方法を芋぀けようずしお䞀日を過ごし、_最埌に_それが@types/styled-componentsこずがわかりたした。 それがむンストヌルされおいる堎合、゚ディタヌに䜕かを入力するだけで、 tsserver.js VSCode Process Explorerで衚瀺が100を超えるCPUをスパむクし、メモリ内で無制限に成長したす。 @types/styled-components削陀するだけで、これが修正されたした。

TypeScript4.0.3ず@types/styled-components 5.1.3を䜿甚しおいたした。

誰かがスタむル付きコンポヌネントのより良い代替案を提案できたすか vscodeが完党にフリヌズしたす。

誰かがスタむル付きコンポヌネントのより良い代替案を提案できたすか vscodeが完党にフリヌズしたす。

これを詊しお

  1. https://material-ui.com/styles/basics/#material -ui-styles

  2. https://emotion.sh/docs/styled#styling -elements-and-components

styled-components 'タむプのパフォヌマンスを向䞊させるために、実際にはプルリク゚ストが開かれおいたす https 

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

関連する問題

demisx picture demisx  Â·  3コメント

JWT
svipas picture svipas  Â·  3コメント

tyv picture tyv  Â·  3コメント

victor-guoyu picture victor-guoyu  Â·  3コメント

JudeAlquiza picture JudeAlquiza  Â·  3コメント