Material-ui: パフりãƒŧマãƒŗ゚を向上させるためãĢã‚ŋイピãƒŗグをį°Ąį•Ĩ化できぞすかīŧŸ

äŊœæˆæ—Ĩ 2020åš´01月07æ—Ĩ  Âˇ  70ã‚ŗãƒĄãƒŗト  Âˇ  ã‚Ŋãƒŧã‚š: mui-org/material-ui

īŧƒ18128ぎ@ eps1lonã§ææĄˆã•ã‚ŒãĻいるようãĢã€ã“ãŽå•éĄŒã¯ã€Material-UIぎ型指厚と、į‰šãĢįˇ¨é›†ä¸­ãĢそれらをチェックする時間をįŸ­į¸Žã™ã‚‹ãŸã‚ãĢį°Ąį•ĨåŒ–ã§ãã‚‹ã‹ãŠã†ã‹ã‚’č­°čĢ–する場所としãĻäŊœæˆã—ãĻいぞす。

最もæ­ŖįĸēãĒ型īŧˆæœ€éĢ˜ãŽã‚¨ãƒŠãƒŧとエデã‚Ŗã‚ŋãƒŧぎ厌äē†ã‚’提䞛するīŧ‰ã¨éĢ˜é€ŸãĒ型チェックīŧˆã‚šãƒšã‚¯ãƒˆãƒĢぎ遠įĢ¯ãŒany īŧ‰ã‚’持つことぎ間ãĢは常ãĢįˇŠåŧĩé–ĸäŋ‚がありぞす。
https://github.com/microsoft/TypeScript/issues/34801ぎようãĒå•éĄŒã¯ã€Material-UIがパフりãƒŧマãƒŗ゚を取りæˆģすためãĢ、æ­ŖįĸēさをįˇŠå’Œã™ã‚‹ã“とで恊æĩを受ける可čƒŊ性があることをį¤ē唆しãĻい

これぞでãĢčĒŋæŸģした再įžã‹ã‚‰ã€å¤šããŽé€ŸåēĻäŊŽä¸‹ã¯ã€å¤šæ•°ãŽCSSプロパテã‚Ŗ名ãĢčĩˇå› ã—ãĻいるようですīŧˆhttps://github.com/mui-org/material-ui/blob/master/packages/を参į…§īŧ‰ã€‚ Material-ui-styles / src / withStyles / withStyles.d.tsīŧ‰ã€‚ į§č‡ĒčēĢはã‚ĸクテã‚ŖブãĒCSSãƒĻãƒŧã‚ļãƒŧではãĒいぎで、いくつかぎį´ æœ´ãĒčŗĒ問がありぞす。

1īŧ‰ã‚ˆãįŸĨられãĻいるCSSプロパテã‚ŖごとãĢ名前とã‚ŋã‚¤ãƒ—ã‚’č¨­åŽšã™ã‚‹ã“ã¨ã¯éžå¸¸ãĢäžĄå€¤ãŒã‚ã‚Šã€ã‚ãã‚‰ã‚ã‚‹ã“ã¨ã¯ã§ããĒいと思いčžŧんでいぞすかīŧŸ
2īŧ‰ CSSPropertiesã‚ŋイプは、「į–‘äŧŧã‚ģãƒŦクã‚ŋãƒŧã¨ãƒĄãƒ‡ã‚Ŗã‚ĸクエãƒĒ」をã‚ĩポãƒŧトするためãĢ存在するようです。これは、į§ãŽé™ã‚‰ã‚ŒãŸčĒ­ãŋæ–šãĢよれば、čŋŊ加ぎCSSプロパテã‚Ŗぎバッグとå‘ŧばれãĻいるようです。
aīŧ‰ã“れらぎバッグč‡ĒäŊ“は再帰įš„ですか、それともčŋŊ加ぎãƒŦイヤãƒŧが1つだけですかīŧŸ つぞり、 widthからfoo.widthか、それともfoo.bar.widthãĢį§ģ動しぞすかīŧŸ ãƒŦベãƒĢが1つしかãĒい場合は、ã‚ŋイプを単į´”化すると、ロãƒŧã‚ĢãƒĢ再įžãŒ4.6į§’から3.6į§’ãĢįŸ­į¸Žã•ã‚Œãžã™īŧˆã¤ãžã‚Šã€å¤§ããĒ勝刊īŧ‰ã€‚
bīŧ‰č‡Ē分でã‚ŋイプをいじãŖãĻãŋãĻ、 BaseCSSProperties[keyof BaseCSSProperties]ã‚ˆã‚Šč‰¯ã„ã‚‚ãŽã‚’æ€ã„äģ˜ãã“とができぞせんanyよりわずかãĢč‰¯ã„ã ã‘ã§ã™ã€‚
3īŧ‰ StyleRules 、プロパテã‚ŖがãĒい場合は、 CSSPropertiesぞたは() => CSSProperties īŧˆã“れを「ã‚ĩãƒŗクされたCSSProperties」とå‘ŧãļことãĢしぞすīŧ‰ãŽã„ずれかを取垗しぞす。これはį†ãĢかãĒãŖãĻいぞす- CSSPropertiesは怠惰かもしれぞせん。 プロパテã‚Ŗがある場合は、意å‘ŗぎあるCreateCSSProperties<Props> īŧˆ CSSProperties計įŽ—ãĢPropsがåŋ…čĻãĢãĒる場合がありぞすīŧ‰ãžãŸã¯(props: Props) => CreateCSSProperties<Props>いずれかを取垗しぞす。äē‹åŽŸä¸Šãƒ€ãƒ–ãƒĢãƒŦイジãƒŧãĒぎでį†č§Ŗできぞせん。 Props一åēĻæ¸Ąã—ãĻCreateCSSPropertiesを取垗し、æŦĄãĢもう一åēĻæ¸Ąã—ãĻ個々ぎプロパテã‚Ŗを取垗しぞす。 ãĒぜ「ダブãƒĢã‚ĩãƒŗク」ãĒぎですかīŧŸ

それとはåˆĨãĢ、į§ã¯į–‘ãŖãĻいぞすが、 IsEmptyInterfaceがそれが提䞛する刊į›ŠãĢ寞しãĻéĢ˜ã™ãŽã‚‹ã“とをぞだč¨ŧ明しãĻいぞせん。 ãŸã ã—ã€ãƒĄãƒĒットがよくわからãĒい可čƒŊ性もあるぎで、もãŖã¨čžã„ãĻãŋãĻください。

į˛žåēĻとパフりãƒŧマãƒŗ゚ぎ遊切ãĒバナãƒŗã‚šã‚’čĻ‹ã¤ã‘るためãĢ協力できぞすかīŧŸ īŧˆæŗ¨īŧšã€Œã‚ŗãƒŗパイナãƒŧをéĢ˜é€ŸåŒ–する」ことは明らかãĢåŽŸčĄŒå¯čƒŊãĒæˆĻį•Ĩですが、最遊化する前ãĢã‚ŋイピãƒŗグを遊切ãĒ場所ãĢ配įŊŽã—たいと思いぞす。īŧ‰ã‚りがとうございぞす。

performance typescript

æœ€ã‚‚å‚č€ƒãĢãĒるã‚ŗãƒĄãƒŗト

äģŠæ—Ĩ、プロジェクトãĢMaterial UIīŧˆ 4.9.4 īŧ‰ã‚’čŋŊ加し始めぞしたが、速åēĻが非常ãĢ遅いため、プロジェクトでäŊŋį”¨ã™ã‚‹ã“とすらできãĒいと思いぞす。 withStyles()をäŊŋį”¨ã—ãĻã‚Ģã‚šã‚ŋマイã‚ēされた単į´”ãĒ<Slider/>ã‚ŗãƒŗポãƒŧネãƒŗトをčŋŊ加しぞした。

į§ãŸãĄã¯ã€IDEでぎåŗ時ぎTypeScriptフã‚Ŗãƒŧドバックから、時々5〜10į§’ぎようãĢ感じるもぎãĢį§ģčĄŒã™ã‚‹ã“ã¨ã‚’čŠąã—ãĻいるīŧˆįžåœ¨ã€Material UIとį›¸äē’äŊœį”¨ã—ãĻいãĒいã‚ŗãƒŧドぎ部分ãĢついãĻは、äŊŋį”¨ã™ã‚‹ãƒ•ã‚Ąã‚¤ãƒĢでぎ厌全ãĒTypeScriptぎ速åēĻäŊŽä¸‹īŧ‰ã‚ŗãƒŗポãƒŧネãƒŗトīŧ‰ã€‚ これらぎã‚ŋイプīŧˆãžãŸã¯ã€éžå¸¸ãĢ複雑ãĒã‚ŋイプīŧ‰ãĢは、äŊ•ã‹ãŒå¤§åš…ãĢ間違ãŖãĻいるåŋ…čĻãŒã‚りぞす。 @ amcaseyがいくつかぎ遊切ãĒčĒŋæŸģã‚’čĄŒãŖãĻいるようです。そぎ

少ãĒくともäģŠãŽã¨ã“ろ@material-uiすずãĻぎTypeScriptぎもぎを除外できる斚æŗ•ã‚’čĻ‹ã¤ã‘ようとしãĻいぞすīŧˆåŸēæœŦįš„ãĢãƒĸジãƒĨãƒŧãƒĢ全äŊ“ã‚’any īŧ‰-しかし、TypeScriptはそれを十分ãĢį°Ąå˜ãĢできãĒいようです。

全ãĻぎã‚ŗãƒĄãƒŗト70äģļ

į§ã¯material-uiã‚ŋイプãĢį˛žé€šã—ãĻいぞせんが、これらぎčŗĒ問ãĢį­”えようとしぞす。

  1. はい、原際ぎWeb標æē–でåŽŖč¨€ã•ã‚ŒãĻいるすずãĻぎcssプロパテã‚Ŗぎ厌全ãĒã‚ĩポãƒŧトはäžŋ刊です。
  2. aīŧ‰į§ãŸãĄãŽå ´åˆã€2をčļ…ãˆã‚‹æˇąã•ã‚’äŊŋį”¨ã™ã‚‹ã“とはありぞせんが、こぎようãĒ場合はかãĒり可čƒŊです。
    `` `typescript
    const styles =īŧˆãƒ†ãƒŧマīŧšãƒ†ãƒŧマīŧ‰=>
    createStylesīŧˆ{
    somedivīŧš{
    'īŧ†īŧšãƒ›ãƒãƒŧボã‚ŋãƒŗ'īŧš{
    可čĻ–性īŧš '可čĻ–'、
    不透明åēĻīŧš1、
                ':after': {
                    content: 'x',

                    [theme.breakpoints.up('lg')]: {
                        content: 'close',
                    },
                }
            },
        }
    });
```
b) I do not understand why `BaseCSSProperties[keyof BaseCSSProperties]` is needed there

  1. (props: Props) => CreateCSSProperties<Props>はåŋ…čĻãĒいと思いぞす。こぎã‚ŋイプは、į§ãŸãĄãŽãƒãƒŧジョãƒŗぎmaterial-uiã‚ŋイプから除外しぞしたが、æ‚ĒいことはäŊ•ã‚‚čĩˇã“りぞせんでした。

バãƒŧジョãƒŗ3.9.3でぎ型ぎ原čŖ…ã‚’æ¤œč¨Žã™ã‚‹äžĄå€¤ãŒã‚ã‚‹ã‹ã‚‚ã—ã‚Œãžã›ã‚“ã€‚ã“ãŽãƒãƒŧジョãƒŗでは、型チェックが十分ãĢéĢ˜é€Ÿã§ã€åž‹äģ˜ã‘がå„ĒれãĻいたためです。

ぞず、これãĢæ‰‹ã‚’åˇŽã—äŧ¸ãšãĻčĒŋæŸģしãĻいただきありがとうございぞす。 ã‚ŋイプぎおぎ部分が遅いかおうかをčĒ°ã‹ãĢベãƒŗチマãƒŧクしãĻもらうと、非常ãĢåŊšįĢ‹ãĄãžã™ã€‚

  1. よくįŸĨられãĻいるCSSプロパテã‚ŖごとãĢ名前とã‚ŋã‚¤ãƒ—ã‚’č¨­åŽšã™ã‚‹ã“ã¨ã¯éžå¸¸ãĢäžĄå€¤ãŒã‚ã‚Šã€ã‚ãã‚‰ã‚ã‚‹ã“ã¨ã¯ã§ããĒいと思いčžŧんでいぞすかīŧŸ

ここで偏čĻ‹ã‚’持たせることは不可čƒŊです。 よりåēƒã„į”Ÿæ…‹įŗģをčĻ‹ãĻも、あきらめることはできãĒいと思いぞす。 Chrome devtoolsãĢはこぎ抟čƒŊがあり、 styleプロップをCSSPropertiesãĒおとå…Ĩ力しぞす。IDEからブナã‚Ļã‚ļãĢ切りæ›ŋえãĻ、テキ゚トčŖ…éŖžã‹ãƒ•ã‚ŠãƒŗトčŖ…éŖžã‹ã‚’įĸēčĒã§ããžã›ã‚“。テキ゚ト変換。

  1. [...]
    これらぎバッグč‡ĒäŊ“は再帰įš„ですか、それともčŋŊ加ぎãƒŦイヤãƒŧが1つだけですかīŧŸ

äŊŋį”¨ã—ãĻいるCSS-in-JSã‚ŊãƒĒãƒĨãƒŧã‚ˇãƒ§ãƒŗをįĸēčĒã™ã‚‹åŋ…čĻãŒã‚りぞす。 æŠ€čĄ“įš„ãĢは、CSSãŽãƒĄãƒ‡ã‚Ŗã‚ĸクエãƒĒは再帰įš„ãĢãĒる可čƒŊ性がありぞす。 į§ã¯ã“ぎ再帰性を削減し、ãƒŦポãƒŧトを受け取るかおうかをįĸēčĒã—たいと思いぞす。 æŠ€čĄ“įš„ãĢãƒã‚šãƒˆã•ã‚ŒãŸãƒĄãƒ‡ã‚Ŗã‚ĸクエãƒĒは、 andæŧ”įŽ—子をäŊŋį”¨ã—ãĻフナット化できぞす。 ただし、2つぎãƒŦベãƒĢãĢåˆļ限するåŋ…čĻãŒã‚りぞす。1ã¤ã¯ãƒĄãƒ‡ã‚Ŗã‚ĸクエãƒĒį”¨ã§ã€ã‚‚う1つはį–‘äŧŧã‚ģãƒŦクã‚ŋãƒŧį”¨ã§ã™ã€‚ これはぞだã‚ŋイプチェックされたIMOであるåŋ…čĻãŒã‚りぞすīŧš

const styles = {
  root: {
    '<strong i="18">@media</strong> (max-width: 12cm)': {
      ':hover': {}
    }    
  }
}

これはあãĒたが@oliviertassinariを書いãĻいるぎをčĻ‹ãŸã‚‚ぎですかīŧŸ

  1. [...]
    CSSProperties-ぞたはīŧˆpropsīŧšPropsīŧ‰=> CreateCSSProperties、これはäē‹åŽŸä¸Šãƒ€ãƒ–ãƒĢãƒŦイジãƒŧであるためį†č§Ŗできぞせんでした。プロップを1å›žæ¸Ąã—ãĻ、CreateCSSPropertiesを取垗しãĻから、もう一åēĻ個々ぎプロパテã‚Ŗを取垗するåŋ…čĻãŒã‚りぞす。 ãĒぜ「ダブãƒĢã‚ĩãƒŗク」ãĒぎですかīŧŸ

åŧ•æ•°č‡ĒäŊ“がプロパテã‚ŖバッグではãĒくé–ĸ数である場合は、テãƒŧマがåŋ…čĻã§ã™ã€‚ ã‚šã‚ŋイãƒĢは、2つぎį•°ãĒるį¨ŽéĄžãŽãƒ—ロパテã‚ŖバッグãĢ䞝存する可čƒŊ性がありぞす。テãƒŧマīŧˆReactぎã‚ŗãƒŗテキ゚トAPIをäģ‹ã—ãĻ刊į”¨å¯čƒŊīŧ‰ãžãŸã¯å°é“å…ˇīŧˆã‚ŗãƒŗポãƒŧネãƒŗトãĢį›´æŽĨæ¸Ąã•ã‚Œã‚‹īŧ‰īŧš

makeStyles({ root: { color: 'blue' }}); // A
makeStyles(theme => ({ root: { color: theme.color } })); // B
makeStyles({ root: props => ({ color: props.color})}); // C
makeStyles({ root: { color: props => props.color } }); // D: same as C, only exists for dev ergonomics
makeStyles(theme => ({ root: props => ({ color: props.color || theme.color }) })); // E: what you called "double-lazy"

パフりãƒŧマãƒŗ゚を攚善するためぎ遅åģļčŠ•äžĄã§ã¯ãĒく、ã‚ŗãƒŗãƒ†ã‚­ã‚šãƒˆã¨å°é“å…ˇãŒåˆŠį”¨å¯čƒŊãĢãĒるぎを垅つåŋ…čĻãŒã‚りぞす。

これとはåˆĨãĢ、į§ã¯į–‘ãŖãĻいぞすが、IsEmptyInterfaceãŒæäž›ã™ã‚‹ãƒĄãƒĒットãĢ寞しãĻéĢ˜ã™ãŽã‚‹ã“とをぞだ原č¨ŧしãĻいぞせん。 ãŸã ã—ã€ãƒĄãƒĒットがよくわからãĒい可čƒŊ性もあるぎで、もãŖã¨čžã„ãĻãŋãĻください。

これがäŊŋį”¨ã•ã‚Œã‚‹1ã¤ãŽã‚ąãƒŧ゚がありぞすīŧš

æ¤œč¨Ž

const useStaticStyles = makeStyles({ root: { color: 'blue' } });
const useDynamicStyles= makeStyles({ root: { color: props =>  props.color } })
function Component() {
  const staticClasses = useStaticStyles(); // No error
  const throwingClasses = useDynamicStyles(); // $ExpectError
  const dynamicClasses = useDynamicStyles({ color: 'blue' });
}

makeStylesからčŋ”されたé–ĸ数ぎå‘ŧãŗå‡ēã—ã‚ˇã‚°ãƒãƒãƒŖを推æ¸Ŧしぞすīŧˆã¤ãžã‚Šã€ useSomeStylesようãĒ名前ぎフックīŧ‰ã€‚ makeStylesおぎようãĒã‚šã‚ŋイãƒĢãŽãƒãƒƒã‚°ãŒæ¸Ąã•ã‚Œã‚‹ã‹ã‚’įĸēčĒã™ã‚‹åŋ…čĻãŒã‚りぞす。 ã‚šã‚ŋイãƒĢバッグでäŊŋį”¨ã•ã‚ŒãĻã„ã‚‹å°é“å…ˇãŽį¨ŽéĄžã‚’推æ¸ŦするためぎヘãƒĢパãƒŧがすでãĢいぞす。 ã‚šã‚ŋイãƒĢバッグが静įš„である場合、つぞりTSが{}ã‚ŋイプを推æ¸Ŧする場合。 æŦĄãĢ、 IsEmptyInterfaceをäŊŋį”¨ã—ãĻå°é“å…ˇãŽæŽ¨åŽšã‚ŋイプをįĸēčĒã—、一斚ぎブナãƒŗチãĢは0ãƒ‘ãƒŠãƒĄãƒŧã‚ŋãƒŧぎå‘ŧãŗå‡ēしįŊ˛åã‚’äŊŋį”¨ã—、もう一斚ぎブナãƒŗチãĢã¯ã€æŽ¨åŽšå°é“å…ˇã‚ŋイプãĢį­‰ã—い1ãƒ‘ãƒŠãƒĄãƒŧã‚ŋãƒŧぎå‘ŧãŗå‡ēしįŊ˛åã‚’äŊŋį”¨ã—ぞすīŧˆ StylesRequirePropsおよãŗStylesHook参į…§ã—ãĻください。

つぞり、 useStaticStyles({})ぞたはuseStaticStyles(null as any)と書くåŋ…čĻã¯ã‚ã‚ŠuseStaticStyles({}) 。 https://github.com/mui-org/material-ui/issues/14018を閉じるためãĢhttps://github.com/mui-org/material-ui/pull/14019で導å…Ĩされぞした

こぎ「抟čƒŊã€ãŽå•éĄŒã¯ã€ä¸Šį´šãƒĻãƒŧã‚ļãƒŧがį†į”ąã‚’į†č§ŖしãĻいれば、 null as anyをäŊŋį”¨ã—ãĻã‚‚å•éĄŒãŒãĒいことです。 たãļん、įŠēぎã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’æ¸Ąã™ã“ã¨ã•ãˆã€åŋ…čĻã§ã¯ãĒいぎãĢ大丈å¤Ģです。 ただし、Material-UIぞたはTypeScriptãĢæ…ŖれãĻいãĒい場合は、非常ãĢæˇˇäšąã—ã€ã‚¤ãƒŠã‚¤ãƒŠã—ãžã™ã€‚ į‰šãĢã‚šã‚ŋイãƒĒãƒŗグぎãģとんおはとãĢã‹ãå°é“å…ˇãĢåŸēãĨいãĻいãĒいぎで。

ãģとんおぎ場合、ã‚ŋイプチェッã‚Ģãƒŧぱã‚ŋイãƒĒãƒŗグã‚ŊãƒĒãƒĨãƒŧã‚ˇãƒ§ãƒŗで占められãĻいるようですかīŧŸ ã‚ŗãƒŗポãƒŧネãƒŗトぎå‘ŧãŗå‡ēしįŊ˛åã€ã¤ãžã‚Šã€ãģとんおぎ場合ãĢãŠãŽå°é“å…ˇã‚’äŊŋį”¨ã§ãã‚‹ã‹ã‚’期垅しãĻいぞした。

より多くぎãƒĒポジトãƒĒをクロãƒŧãƒĢしãĻ、 withStylesぞたはmakeStylesäŊŋį”¨įŠļæŗã‚’å…ˇäŊ“įš„ãĢčĒŋずることができぞす。 ã“ã‚Œãžã§ãŽã¨ã“ã‚ã€å°é“å…ˇãŽäŊŋį”¨æŗ•ã ã‘ã‚’čĻ‹ãĻきぞした。

これはあãĒたが@oliviertassinariを書いãĻいるぎをčĻ‹ãŸã‚‚ぎですかīŧŸ

@ eps1lonã‚ŗãƒŧドベãƒŧã‚šãĢこぎネ゚トがいくつかį™ēį”Ÿã—ãĻいぞすīŧˆãŸã¨ãˆã°ã€ <strong i="8">@media</strong> (hover: none) īŧ‰ã€‚ ただし、ã‚ŗã‚ĸã‚ŗãƒŗポãƒŧネãƒŗトではそれãģおé ģįšã§ã¯ã‚りぞせん。 同じãƒĻãƒŧã‚ļãƒŧナãƒŗドだと思いぞす。 それは間違いãĒくトãƒŦãƒŧドã‚Ēフぎ一部である可čƒŊ性がありぞす。

@beholderrk

  1. į§ã¯åŒã˜ãã‚‰ã„č€ƒãˆãžã—ãŸã€ã—ã‹ã—į§ãŒå°‹ã­ãŸãģうがよいと思いぞした。
  2. aīŧ‰æˇąã•2ã¯čĄ¨įžå¯čƒŊであるåŋ…čĻãŒã‚りぞす-æˇąã•1ã‚ˆã‚Šã‚‚å°‘ã—ã ã‘é‡č¤‡ãŒã‚ã‚Šãžã™ã€‚
    bīŧ‰é ­ã‚’悊ぞせるぎãĢかãĒりぎ時間がかかりぞした。テキ゚トではãĒく、į›´æŽĨčĒŦ明できればと思いぞす。 åŸēæœŦįš„ãĢ、イãƒŗãƒ‡ãƒƒã‚¯ã‚šã‚ˇã‚°ãƒãƒãƒŖは、すずãĻぎプロパテã‚Ŗが同じã‚ŋイプであることをį¤ēしãĻいぞす。 これは、それらすずãĻで抟čƒŊするã‚ŋイプを指厚しãĻいる場合ãĢぎãŋ抟čƒŊしぞす。 ã“ã‚Œã‚’čĄŒã†1つぎ斚æŗ•ã¯ã€ã™ãšãĻぎプロパテã‚Ŗã‚ŋイプぎ和集合BaseCSSProperties[keyof BaseCSSProperties]することです。そうすると、すずãĻぎプロパテã‚ŖãĢäē’換性ぎあるã‚ŋイプがあることはäē‹åŽŸã§ã™ã€‚ たとえば、CSSでäŊŋį”¨ã§ãã‚‹ãƒ—ロパテã‚Ŗがname: stringとwidth: numberぞす。 ä¸Ąæ–šãŽãƒ—ãƒ­ãƒ‘ãƒ†ã‚Ŗで抟čƒŊするイãƒŗデック゚įŊ˛åã‚’指厚する1つぎ斚æŗ•ã¯ã€ã™ãšãĻぎプロパテã‚Ŗがstring | numberã‚ã‚‹ã¨č¨€ã†ã“ã¨ã§ã™ã€‚ それはį´ æ™´ã‚‰ã—いことではありぞせん- nameがnumber widthãĒることはãĒく、 stringãĒることもありぞせん-しかし、それは抟čƒŊしぞす。 æœŦåŊ“ãŽå•éĄŒã¯ã€ã‚ãĒたが望むもぎを原際ãĢ襨įžã§ããĒいことですīŧˆå°‘ãĒくとも、į§ãŸãĄãŒåˆ¤æ–­ã§ããŸé™ã‚Šã§ã¯ã€ãã‚Œã‚’čĄŒã†ã€Œåˇ§åĻ™ãĒ」ハックがあるかもしれぞせんīŧ‰ã€‚ あãĒたは原際ãĢあãĒたぎã‚ŋイプがname: string 、 width: numberぞたはx: CSSPropertiesåĢã‚“ã§ã„ã‚‹ã¨č¨€ã„ãŸã„ã§ã™ã€ã“ã“ã§xはnameぞたはwidth -æŦ ã‘ãĻいるぎは「äģĨ外ぎもぎ」です。 それがもう少し明įĸēãĢãĒã‚‹ã“ã¨ã‚’éĄ˜ãŖãĻいぞす。
  3. @ eps1lonがこれãĢついãĻäŊ•ã‹č¨€ã„たいことがあるようãĢčžã“ãˆãžã—ãŸãŒã€į§ã¯ãžã åŊŧぎåŋœį­”ã‚’č§Ŗ析しãĻいぞす。

æ­Ŗ常ãĒベãƒŧ゚ナイãƒŗは非常ãĢåŊšįĢ‹ãĄãžã™ã€‚ あãĒたはたぞたぞãƒĒãƒŗクを持ãŖãĻいぞすかīŧŸ
įˇ¨é›†īŧšãã‚Œã‚’čĻ‹ã¤ã‘ぞした。

@ eps1lonäŧščŠąãĢ参加

  1. ã“ã“ã§ã¯č­°čĢ–はありぞせん-äŧščŠąå…¨äŊ“がįŸ­įĩĄã—ãĻしぞうぎで、旊めãĢčŗĒ問すると思いぞした。
  2. 2つぎãƒŦイヤãƒŧã¯åŽŸčĄŒå¯čƒŊぎようですīŧˆã‚ŋイプはぞだãģとんおåŊšãĢįĢ‹ãŸãĒいというæŗ¨į›Žã™ãšãč­Ļ告がありぞすīŧ‰ã€‚ äŊ•ã‹ã‚’ドナフトできるかおうかįĸēčĒã—ぞす。
  3. į§ãŽæ–‡č„ˆãŽæŦ åĻ‚で、テãƒŧãƒžã¨å°é“å…ˇãŒį•°ãĒãŖãĻいることは明らかではありぞせんでした。 もしそうãĒら、そぎ構造はį†ãĢかãĒãŖãĻいぞす。 明įĸēãĢしãĻいただきありがとうございぞす。

isEmptyInterfaceãĢé–ĸしãĻ、プロパテã‚Ŗãƒ‘ãƒŠãƒĄãƒŧã‚ŋをīŧˆãŸã¨ãˆã°īŧ‰ useStaticStylesã‚Ēãƒ—ã‚ˇãƒ§ãƒŗãĢすることはできぞすかīŧŸ į™ēäŋĄč€…が期垅おおりãĢそれらをįœį•Ĩできるという意å‘ŗでは、それãģおæ­Ŗįĸēではありぞせんが、ã‚ŋイプチェックぎ斚がはるかãĢåŽ‰äžĄã§ã™ã€‚ į§ãŒč¨€ãŖたようãĢ、į§ã¯ã‚ãĒたぎためãĢ数字やäŊ•ã‹ã‚’持ãŖãĻいぞせん-それはį§ãŽå´ãŽå˜ãĒるæ†ļæ¸Ŧです。

2īŧˆbīŧ‰ãĢついãĻおう思いぞすかīŧŸ そぎã‚ŋイプは、åŸēæœŦįš„ãĢすずãĻぎプロパテã‚Ŗ名が受けå…Ĩれられ、æˆģりã‚ŋイプは多くぎもぎぎ1つãĢãĒる可čƒŊ性があることをį¤ēしãĻã„ã‚‹ãŸã‚ã€ã‚ãžã‚ŠäžĄå€¤ãŒãĒいようです。

isEmptyInterfaceãĢé–ĸしãĻは、プロパテã‚Ŗãƒ‘ãƒŠãƒĄãƒŧã‚ŋをīŧˆãŸã¨ãˆã°īŧ‰useStaticStylesをã‚Ēãƒ—ã‚ˇãƒ§ãƒŗãĢすることができぞすかīŧŸ

最初ãĢå‘ŧãŗå‡ēã—ã‚ˇã‚°ãƒãƒãƒŖをã‚ĒãƒŧバãƒŧロãƒŧドしãĻ原験し、これがåŊąéŸŋを与えるかおうかをįĸēčĒã—たいと思いぞす。 æŦĄãĢ、常ãĢã‚Ēãƒ—ã‚ˇãƒ§ãƒŗãĢすることで、éŸŗを少ãĒくしãĻãŋぞす。 ãģとんおすずãĻぎãƒĻãƒŧã‚šã‚ąãƒŧ゚で1回しかå‘ŧãŗå‡ēされãĒいため、通常よりもéŸŗを少ãĒくする斚が厉全だと思われぞす。そぎため、間違いを1å›žã ã‘čĄŒã†å¯čƒŊ性がéĢ˜ãã€ã™ããĢ襨į¤ēされぞす。 それがį§ãŸãĄãĢ多くぎパフりãƒŧマãƒŗ゚をもたらさãĒければ、それをåŖ˛ã‚‹ãŽã¯é›Ŗしいでしょう。 å…ƒãŽå•éĄŒį”¨ãĢäŊœæˆã•ã‚ŒãŸãƒĒポジトãƒĒīŧˆhttps://github.com/microsoft/TypeScript/issues/34801#issue-514055289īŧ‰ã‚’äŊŋį”¨ã—ぞす。

2īŧˆbīŧ‰ãĢついãĻおう思いぞすかīŧŸ そぎã‚ŋイプは、åŸēæœŦįš„ãĢすずãĻぎプロパテã‚Ŗ名が受けå…Ĩれられ、æˆģりã‚ŋイプは多くぎもぎぎ1つãĢãĒる可čƒŊ性があることをį¤ēしãĻã„ã‚‹ãŸã‚ã€ã‚ãžã‚ŠäžĄå€¤ãŒãĒいようです。

čĒ¤ãŖãĻ゚キップしぞした。 IsEmptyInterfaceぎ原験ぎ垌でそれをčĻ‹ãĻいきぞす。

@ eps1lon厌全ãĢ同意しぞす-それを排除することが原čŗĒįš„ãĒパフりãƒŧマãƒŗ゚ぎ勝刊ではãĒい場合は、 isEmptyInterfaceįļ­æŒã—ぞす。

īŧƒ19320では、é–ĸ数ぎã‚Ēãƒŧバãƒŧロãƒŧãƒ‰ãŒåŒã˜ã“ã¨ã‚’é”æˆã—ãŸã„ãã¤ã‹ãŽč¤‡é›‘ãĒæĄäģļ型を取り除きぞしたīŧˆ IsEmptyInterfaceとブãƒŧãƒĢčĢ–į†åž‹ã‚’削除しぞしたīŧ‰ã€‚ ã‚ŗãƒŧドが少ãĒいäģĨ外ãĢ、あぞり垗られãĒかãŖたようですが。

įžåœ¨ã€TS3.2.4と3.7.4ãŽé–“ã‚’čĄŒãŖたりæĨたりしãĻいることをäģ˜ã‘加えたいと思いぞす。 į§ãŸãĄãŽã‚ŋイプぎテ゚ト゚イãƒŧトは、3.2.4と比čŧƒã—ãĻ3.7.4で50īŧ…é…ãåŽŸčĄŒã•ã‚Œãžã™īŧˆã€œ90s寞50sīŧ‰ã€‚

CSSPropertiesãŽæˇąã•ã‚’åˆļé™ã—ã€ãƒĄãƒ‡ã‚Ŗã‚ĸクエãƒĒとį–‘äŧŧã‚ģãƒŦクã‚ŋãƒŧぎã‚ĩポãƒŧトを厌全ãĢ削除できるかおうかをåŧ•ãįļšãčĒŋæŸģしぞす。 ただし、å…Ĩ力しãĒいもぎをäŊŋį”¨ã™ã‚‹ã“とは原際ãĢはã‚Ēãƒ—ã‚ˇãƒ§ãƒŗではありぞせん。 ã‚ŋイプチェッã‚Ģãƒŧは、åĻĨåŊ“ãĒ時間内ãĢそれらをチェックできるåŋ…čĻãŒã‚りぞす。

ã‚ŋイプチェッã‚Ģãƒŧが原際ぎボトãƒĢネックである可čƒŊ性がありぞす。 たãļん、おぎバãƒŧジョãƒŗぎパフりãƒŧマãƒŗ゚がヒットしたかをčĒŋずることができぞす。

3.2.4およãŗ3.7.4ã§åŽŸčĄŒã—ãĻいるã‚ŗマãƒŗドを送ãŖãĻいただければ、ロãƒŧã‚ĢãƒĢã§ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢをäŊœæˆã§ããžã™ã€‚ ただし、įĩŒé¨“ãĢよれば、原因はおそらくčŋŊ加であり、3.2.4äģĨ降ãĢčŋŊ加された望ぞしいチェックであることが判明しぞす。 īŧˆãã—ãĻ、「0s」はã‚ŋイプミ゚だと思いぞす-おそらく「40s」ぞたは「50s」īŧŸīŧ‰

CSSPropertiesãĢé–ĸしãĻは、プロパテã‚Ŗぎ名前とã‚ŋイプをäŋæŒã™ã‚‹ã“とが非常ãĢ重čĻã§ã‚ることãĢ同意しぞす。 ただし、åĻĨåŊ“ãĒ時間内ãĢãƒã‚§ãƒƒã‚¯ã™ã‚‹ã ã‘ã§ã¯ä¸ååˆ†ã ã¨æ€ã„ãžã™ã€‚æœ€åˆãŽå•éĄŒã¯ã€åž‹ã‚ˇã‚šãƒ†ãƒ ãŒåŽŸéš›ãĢ希望ぎåŊĸįŠļã‚’čĄ¨įžã§ããĒいことです。 į§ãŸãĄã¯ãŠãã‚‰ãå•éĄŒãŽä¸€čˆŦįš„ãĒč§Ŗæąēį­–ãĢ取りįĩ„むことãĢ時間をč˛ģやすだろうと思いぞす-あãĒãŸãŒããŽč­°čĢ–ãĢ参加することãĢ興å‘ŗがあると思いぞすかīŧŸ

ã‚ŗãƒŗãƒ‘ã‚¤ãƒŠãŽč¤‡æ•°ãŽãƒãƒŧジョãƒŗを比čŧƒã™ã‚‹ãŸã‚ãŽã‚šã‚¯ãƒĒãƒ—ãƒˆãŒã‚ã‚‹ãŽã§ã€åŽŸčĄŒã—ãŸã„ã‹ãĒり厉厚したテ゚トをį‰šåŽšã§ãã‚Œã°ã€æ™‚間ぎįĩŒéŽãĢäŧ´ã†é€ŸåēĻäŊŽä¸‹ã‚’グナフ化できぞす。

īŧˆãã—ãĻ、「0s」はã‚ŋイプミ゚だと思いぞす-おそらく「40s」ぞたは「50s」īŧŸīŧ‰

すãŋぞせん、50äģŖです。

3.2.4およãŗ3.7.4ã§åŽŸčĄŒã—ãĻいるã‚ŗマãƒŗドを送ãŖãĻいただければ、ロãƒŧã‚ĢãƒĢã§ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĢをäŊœæˆã§ããžã™ã€‚

それを原čŖ…するすずãĻぎワãƒŧク゚ペãƒŧ゚で同じã‚ŗマãƒŗãƒ‰ã‚’åŽŸčĄŒã™ã‚‹ãŽã¯ã€ãƒĢãƒŧトぎyarn typescriptだけです。 たとえば、 yarn workspace @material-ui/styles run typescript 、 tslintとdtslintぎ$ExpectErrorãĻ型をテ゚トしぞす。 3.7.4では、いくつかぎ障åŽŗがį™ēį”Ÿã—、テ゚トをčĒŋ整するåŋ…čĻãŒã‚りぞしたīŧˆīŧƒ19242を参į…§īŧ‰

æœ€åˆãŽå•éĄŒã¯ã€åž‹ã‚ˇã‚šãƒ†ãƒ ãŒåŽŸéš›ãĢ希望するåŊĸįŠļã‚’čĄ¨įžã§ããĒいことです。

į§ã¯åŒã˜ãã‚‰ã„į–‘ãŖた。 ã€Œå…ˇäŊ“įš„ãĒ」åŊĸįŠļをイãƒŗデック゚įŊ˛åãŽã‚ã‚‹ã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã¨æˇˇåˆã™ã‚‹æ–šæŗ•ã¯ã€å˜ãĒる回éŋį­–ぎようです。

あãĒãŸãŒããŽč­°čĢ–ãĢ参加することãĢ興å‘ŗがあると思いぞすかīŧŸ

間違いãĒく。 非再帰įš„ãĒCSSPropertiesãĢもう少し時間をč˛ģやしãĻから、これらぎã‚ŋイプでäŊ•ã‚’æŽĸしãĻいるかをį¤ēすためãĢã‚‚ã†å°‘ã—ãƒ†ã‚šãƒˆã‚’č¨˜čŋ°ã—ぞす。 äģ–ぎcss-in-jsã‚šã‚ŋイãƒĒãƒŗグã‚ŊãƒĒãƒĨãƒŧã‚ˇãƒ§ãƒŗも同様ぎパフりãƒŧマãƒŗ゚ぎボトãƒĢネックãĢãĒãŖãĻいると思いぞす。

明æ—Ĩ、これらぎã‚ŗマãƒŗドをčŠĻしãĻãŋぞすīŧˆå¤Ēåšŗ洋時間ãĢいることをäŧãˆã€įąŗå›Ŋぎäŧ‘æ—ĨをčĻŗ察するåŋ…čĻãŒã‚ると思いぞすīŧ‰ã€‚

ã€Œå…ˇäŊ“įš„ãĒ」åŊĸįŠļをイãƒŗデック゚įŊ˛åãŽã‚ã‚‹ã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã¨æˇˇåˆã™ã‚‹æ–šæŗ•ã¯ã€å˜ãĒる回éŋį­–ぎようです。

おかげで、į§ã¯ãã‚Œã‚’おぎようãĢ襨įžã™ã‚‹ãŽãŒæœ€å–„かとč‹Ļ労しãĻきぞした。 はい、あãĒたはイãƒŗデック゚įŊ˛åãŒã‚ãĒたが望むことをしãĻいãĒいということはæ­Ŗしいです。 可čƒŊ性ぎあるバãƒĒã‚ĸãƒŗトãĢついãĻã„ãã¤ã‹č€ƒãˆãĻいぞすが、パフりãƒŧマãƒŗ゚へぎåŊąéŸŋをčĒŋæŸģするåŋ…čĻãŒã‚りぞす。

äģ–ぎcss-in-jsã‚šã‚ŋイãƒĒãƒŗグã‚ŊãƒĒãƒĨãƒŧã‚ˇãƒ§ãƒŗも同様ぎパフりãƒŧマãƒŗ゚ぎボトãƒĢネックãĢãĒãŖãĻいると思いぞす。

ぞさãĢそぎ通り。 į§ãŸãĄã¯ã€ã‚ãĒたぎためãĢį§ãŸãĄãŒčĄŒã†ã“とはすずãĻ、エã‚ŗã‚ˇã‚šãƒ†ãƒ å…¨äŊ“を攚善するためãĢ一čˆŦ化できることを望んでいぞす。

明らかãĒäŊ•ã‹ãŒæŦ ã‘ãĻいるようãĒ気がしぞすが、įžåœ¨ã¯čĄŒãčŠ°ãžãŖãĻいぞす。 ぞず、į§ã¯Windowsをあきらめぞした。Linuxぎ斚がうぞくいくようです。 あãĒたがそれを掘り下げたいかおうかį§ãĢįŸĨらせãĻください。 æŦĄãĢ、 yarn typescriptã‚’åŽŸčĄŒã™ã‚‹ã“ã¨ãŒã§ããžã™īŧˆį§ãŒįŸĨる限り、きれいãĢåŽŸčĄŒã§ããžã™īŧ‰ãŒã€į´”į˛‹ãĒtscではãĒくtslintã‚’åŽŸčĄŒã—ãĻいるようãĢčĻ‹ãˆãžã™ã€‚ 同じtsconfig.jsonでtscã‚’åŽŸčĄŒã™ã‚‹ã¨īŧˆį‰šãĢã‚šã‚ŋイãƒĢでテ゚トしãĻいぞすīŧ‰ã€æœ€å¤§40ぎエナãƒŧがį™ēį”Ÿã—ぞす。 į§ã¯äŊ•ãŒé–“違ãŖãĻいるぎですかīŧŸ ãƒ—ãƒ­ãƒ•ã‚Ąã‚¤ãƒĒãƒŗグぎį›Žįš„で、再įžã‚’1回ぎtscå‘ŧãŗå‡ēしãĢぞで下げることは非常ãĢåŊšįĢ‹ãĄãžã™ã€‚

@amcasey yarn typescriptはã‚ŗãƒŗパイãƒĢではãĒく、型ぎテ゚トです。 DefinitelyTypedãƒĒポジトãƒĒでäŊŋį”¨ã•ã‚ŒãĻã„ã‚‹ã‚‚ãŽã¨åŒæ§˜ãŽč¨­åŽšã‚’äŊŋį”¨ã—ãĻいぞす。 packages/*内ぎTypeScriptãƒ•ã‚Ąã‚¤ãƒĢは、ãģとんおぎ場合、合æ ŧぞたは不合æ ŧぎいずれかである゚テãƒŧãƒˆãƒĄãƒŗトぎ集ぞりであり、 $ExpectErrorキãƒŖッチしぞす。

skipLibCheck: trueとnoEmit: trueを./docs/tsconfig.jsončŋŊ加した垌、 yarn workspace docs run tsc -p tsconfig.jsonをäģ‹ã—ãĻドキãƒĨãƒĄãƒŗトでtscをäŊŋį”¨ã™ã‚‹ãŽãŒæœ€č‰¯ãŽã€ŒåŽŸéš›ãŽã€ãƒ†ã‚šãƒˆã‚ąãƒŧ゚だと思いぞす。 ./docs/tsconfig.json īŧš

--- a/docs/tsconfig.json
+++ b/docs/tsconfig.json
@@ -3,6 +3,8 @@
   "include": ["types", "src/pages/**/*"],
   "compilerOptions": {
     "allowJs": false,
-    "noUnusedLocals": true
+    "noUnusedLocals": true,
+    "noEmit": true,
+    "skipLibCheck": true
   }
 }

@ eps1lon明įĸēãĢしãĻくれãĻありがとう。 tslintが遅くãĒãŖたことãĢわくわくしãĻいぞせんが、一åēĻãĢ1つぎ変数ãĢį„Ļį‚šã‚’åŊ“ãĻたいと思いぞす。 ææĄˆã—ãŸãƒ‰ã‚­ãƒĨãƒĄãƒŗトビãƒĢドをさぞざぞãĒバãƒŧジョãƒŗぎtypescriptã§åŽŸčĄŒã—ã€äŊ•ã‹ãŒéŖ›ãŗå‡ēすかおうかをįĸēčĒã—ぞす。 ありがとうīŧ

ã“ãŽč¨­åŽšã¯åŽŒį’§ã§ã™ã€‚ チェック時間が3.3と3.4ぎ間で2倍ãĢãĒãŖãĻいぞす。

| バãƒŧジョãƒŗ| 時間をįĸēčĒã™ã‚‹|
|-|-|
| 3.2 | 16.71į§’|
| 3.3 | 16.79s |
| 3.4 | 35.25į§’|
| 3.5 | 21.40į§’|
| 3.6 | 23.10į§’|
| 3.7 | 27.39į§’|

ã‚‚ã†å°‘ã—æŽ˜ã‚Šä¸‹ã’ãžã™ãŒã€æĄäģļ型ぎ3.3ぎ原čŖ…は不厌全で、3.4ぎ原čŖ…は遅く、3.5ぎ原čŖ…ã¯č‰¯ã„ã¨č¨€ã‚ã‚ŒãĻいぞす。 したがãŖãĻ、掋åŋĩãĒがら、これはおそらくäēˆæƒŗされぞす。

å…ˇäŊ“įš„ãĢは、こぎ変更ãĢより、こぎバグでčĒŦ明されãĻいるようãĢ速åēĻがäŊŽä¸‹ã—たと思われぞす。

3.5から3.7ãŽé–“ã§ã€ãƒã‚§ãƒƒã‚¯ãŽåŽŸčĄŒãĢかかる時間が6į§’é•ˇããĒãŖたことがわかりぞした。 それはかãĒり充原しãĻいるようãĢčĻ‹ãˆãžã™ã€‚

@embeddedtこれらぎ数値は、各バãƒŧジョãƒŗでぎ1å›žãŽåŽŸčĄŒãĢよるもぎであるため、おそらくかãĒりぎノイã‚ēがありぞす。 しかし、į§ã¯æŽ˜ã‚Šä¸‹ã’ãĻ、äŊ•ã‹ã‚’čĻ‹ã¤ã‘ることができるかおうかをįĸēčĒã—ぞす。

Linux VMでやりį›´ã—たところ、3.7は3.5よりも一č˛ĢしãĻ20〜25īŧ…遅くãĒりぞした。

同じビãƒĢドぎé€ŖįļšåŽŸčĄŒã¯į´„5īŧ…変動し、3.5と3.6ぎ間ぞたは3.6と3.7ãŽé–“ãŽåˇŽã¯ã‚ãšã‹į´„10īŧ…であるため、これをäēŒåˆ†ã™ã‚‹ãŽã¯éžå¸¸ãĢé›Ŗしいことがč¨ŧ明されãĻいぞす。

į§ãŒæ°—äģ˜ã„たį–‘わしいことぎ1つは、 styled-componentsがTS> = 3.7ãĢ寞しãĻ個åˆĨぎ.d.tsãƒ•ã‚Ąã‚¤ãƒĢを提䞛するため、比čŧƒãŒãƒĒãƒŗゴとãƒĒãƒŗゴではãĒい可čƒŊ性があることです。

銚いたことãĢ、新しいstyled-componentsã‚ŋイプぎ斚がéĢ˜é€Ÿã§ã‚るようãĢčĻ‹ãˆãžã™ã€‚ ただし、ãƒĒãƒŗゴとãƒĒãƒŗゴを比čŧƒã™ã‚‹ã¨ã€čĒŋæŸģが厚易ãĢãĒりぞす。

čŗĸいč§Ŗæąēį­–が思いつかãĒかãŖたぎで、マãƒŧジãĢよるã‚ŗãƒŗパイãƒĢ時ぎマãƒŧジをプロットしãĻ、゚パイクをæŽĸしぞす。 明æ—Ĩは数字がæŦ˛ã—いです。

@amcaseyこれをčĒŋæŸģするためãĢあãĒたぎåŠĒ力ãĢ感čŦã—ぞすīŧ TSチãƒŧãƒ ãŽãƒĄãƒŗバãƒŧとマテãƒĒã‚ĸãƒĢUIが一įˇ’ãĢ抟čƒŊしãĻいるぎをčĻ‹ã‚‹ãŽã¯æœŦåŊ“ãĢį´ æ™´ã‚‰ã—いです。 į§ã¯ã“ぎGithubãŽå•éĄŒãĢ遭遇し、Material UIでぎエデã‚Ŗã‚ŋãƒŧぎエク゚ペãƒĒエãƒŗ゚が非常ãĢ遅いį†į”ąã‚’į†č§Ŗしようとしぞしたīŧˆ2つぎプロジェクトでäŊŋį”¨ã—ãĻいぞすīŧ‰ã€‚ VsCode内ぎイãƒŗテãƒĒã‚ģãƒŗ゚とãƒĻãƒŧã‚ļビãƒĒテã‚ŖãĢかãĒり大きãĒåŊąéŸŋがčĻ‹ã‚‰ã‚ŒãĻいることを明įĸēãĢįĸēčĒã§ããžã™ã€‚

こぎ時į‚šã§ã€JSSぎ型厉全性を少しäē¤æ›ã—ãĻ、ナイブナãƒĒぎ掋りぎ部分ぎčŋ…速ãĒフã‚Ŗãƒŧドバックを垗ることができぞす。 Typescriptã‚ĩãƒŧバãƒŧがã‚ŗãƒŧドぎ変更ãĢčŋŊいつくぞでãĢ8〜10į§’かかる場合がありぞす

3回ぎåšŗ均でも、デãƒŧã‚ŋは非常ãĢノイã‚ēが多くãĒりぞす。 ただし、 httpsīŧš//github.com/microsoft/TypeScript/commit/ad322a561a301ae357da051b9221b2222c13be36ではナãƒŗã‚ŋã‚¤ãƒ ãŒč‘—ã—ãäŊŽä¸‹ã—ãĻいるようですīŧˆãģãŧ前ぎãƒŦベãƒĢãĢæˆģãŖãĻいぞすīŧ‰ https://github.com/microsoft/TypeScript / commit / 480b73915fdd805952fd355e4cf3e1bc803e0878と、そぎ垌ぎ一čˆŦįš„ãĒ上昇傞向īŧˆãŸã ã—、į§ãĢは均一すぎるようãĢčĻ‹ãˆã€į’°åĸƒčĻå› ãŒį–‘われぞすīŧ‰ãĢは、 httpsīŧš//github.com/microsoft/TypeScript/commit/c5e6d95e930048a033868d72440a9296904a33ecでぎį‰šåŽšãŽã‚šãƒ‘イクがåĢぞれ

上昇傞向はį˛žæŸģãĢč€ãˆãĻおり、äŊ•ãŒãã‚Œã‚’åŧ•ãčĩˇã“す可čƒŊ性があるぎか​​į§ãĢはわかりぞせん。 たãļん、é›ĸæ•Ŗįš„ãĒ減速は非常ãĢæŽĨčŋ‘しãĻいるぎで、ノイã‚ēãŒãã‚Œã‚‰ã‚’å˜ä¸€ãŽæ›˛įˇšãŽã‚ˆã†ãĢčĻ‹ã›ãžã™ã€‚

ã‚ŗミットごとãĢ最大10å›žãŽåŽŸčĄŒãĢãļつかりぞしたが、傞斜領域ãĢは4つぎį•°ãĒる回帰がありぞす。 īŧšįŦ‘饔īŧš

https://github.com/microsoft/TypeScript/commit/26caa3793e310e271ddee8adc1804486e5b0749fīŧˆã€œ700ms īŧ‰
https://github.com/microsoft/TypeScript/commit/250d5a8229e17342f36fe52545bb68140db96a2eīŧˆã€œ500ms īŧ‰
https://github.com/microsoft/TypeScript/commit/7ce793c5b8c621af5ce50af0ca3958c7bd6541bfīŧˆã€œ1300ms īŧ‰
https://github.com/microsoft/TypeScript/commit/28050d5c47c6cd7627555f12cf13b1062f80322aīŧˆã€œ400ms īŧ‰

īŧˆå›žå¸°ãŒé–‹å§‹ã•ã‚Œã‚‹ãžã§ãŽåˆč¨ˆæ™‚間はį´„33į§’でした。īŧ‰

æœŸåž…ã‚’å°‘ã—å’Œã‚‰ã’ã‚‹ã ã‘ã§ã™ã€‚ã“ã‚Œã‚‰ãŽå›žå¸°ãŽã„ãã¤ã‹ã¯ã€äžĄå€¤ãŽã‚ã‚‹čŋŊ加ぎチェックであることが判明する可čƒŊ性が非常ãĢéĢ˜ãã€ã“れらぎチェックをすずãĻį„Ąæ–™ã§å–垗できたとしãĻも、20īŧ…ãŽå‰˛åŧ•ã—か受けられぞせん。 "。

įˇ¨é›†īŧšãƒĒãƒŗクを更新しぞした。 į§ã¯æ™‚é–“ã‚’éĄãŖãĻã„ãŸãŽã§ã€æˇˇäšąã—ã€å„å›žå¸°ãŽ_前_ãĢマãƒŧジぎフナグをįĢ‹ãĻぞした。

@ eps1lonこぎ@ts-ignoreを削除するとåŊšįĢ‹ã¤ã‹ã‚‚しれãĒã„ã¨ææĄˆã—ãžã—ãŸã€‚ åŸēæœŦįš„ãĢ、エナãƒŧが検å‡ēされた場合、ãƒĻãƒŧã‚ļãƒŧぎ最å„Ē先äē‹é …はエナãƒŧãĢé–ĸする遊切ãĒæƒ…å ąã‚’å–åž—ã™ã‚‹ã“ã¨ã§ã‚ã‚‹ã¨æƒŗ厚されるため、多くぎčŋŊ加äŊœæĨ­ãŒčĄŒã‚ã‚Œã‚‹å¯čƒŊ性がありぞす。 ããŽåžŒã€ããŽæƒ…å ąãŒå‰Šé™¤ã•ã‚ŒãŸå ´åˆīŧˆ @ts-ignore īŧ‰ã€ããŽæ™‚間はį„Ąé§„ãĢãĒりぞす。 īŧˆæŽ‹åŋĩãĒがら、エナãƒŧを検å‡ēするåŋ…čĻãŒãĒいことを検å‡ēするぎはį°Ąå˜ã§ã¯ã‚りぞせん。īŧ‰åˆĨぎæˆĻį•Ĩは、ã‚ŗãƒŗパイナが文åĨã‚’č¨€ã†ãŽã‚’ã‚„ã‚ã‚‹ãžã§ã€æ˜Žį¤ēįš„ãĒ型ã‚ĸã‚ĩãƒŧã‚ˇãƒ§ãƒŗīŧˆ anyをåĢむīŧ‰ã‚’čŋŊ加することです。

@ eps1lonこぎ@ts-ignoreを削除するとåŊšįĢ‹ã¤ã‹ã‚‚しれãĒã„ã¨ææĄˆã—ãžã—ãŸã€‚

docs/äŊŋį”¨ã¯docs/ 。 åŋĩぎためãĢとãĢかく削除しぞしたīŧšīŧƒ19504

æ­Ŗį›´ãĒところ、そぎ場合、 @ts-ignoreはã‚ĸãƒŗチパã‚ŋãƒŧãƒŗぎようãĢčžã“ãˆãžã™ã€‚ 有į”¨ãĒæƒ…å ąã€ã¤ãžã‚ŠãŠãŽã‚ˆã†ãĒエナãƒŧがį™ēį”Ÿã™ã‚‹ã‹ã‚’į¤ēすだけでãĒく、パフりãƒŧマãƒŗ゚ぎボトãƒĢネックãĢもãĒりぞす。

į§ãŒįŸĨる限り、 @ts-ignoreは、ã‚ŋイプチェックされãĻいる.jsãƒ•ã‚Ąã‚¤ãƒĢでぎãŋåŊšįĢ‹ãĄãžã™ã€‚

うãƒŧん、それはãģãŧ間違いãĒく、エナãƒŧãƒĄãƒƒã‚ģãƒŧジを攚善するPRがパフりãƒŧマãƒŗã‚šã‚’äŊŽä¸‹ã•ã›ãŸį†į”ąã‚’čĒŦ明しãĻいぞせん。 įĸēかãĢ攚善ぎようãĢčĻ‹ãˆãžã™ã€‚ 😄

パフりãƒŧマãƒŗã‚šã‚’äŊŽä¸‹ã•ã›ã‚‹å¤‰æ›´ãŽãƒã‚°īŧš
https://github.com/microsoft/TypeScript/issues/36562
https://github.com/microsoft/TypeScript/issues/36564
https://github.com/microsoft/TypeScript/issues/36565
https://github.com/microsoft/TypeScript/issues/36566
https://github.com/microsoft/TypeScript/issues/36567

å…Ŧæ­ŖãĒč­Ļ告īŧšã“ã‚Œã‚‰ãŽã„ãã¤ã‹ã¯äžĄå€¤ãŒã‚ã‚‹ã¨åˆ¤æ–­ã•ã‚Œã‚‹å¯čƒŊ性がありぞす。

į§ã¯TypeScriptぎ世į•Œã€į‰šãĢJSã‚ŊãƒĒãƒĨãƒŧã‚ˇãƒ§ãƒŗぎ゚ã‚ŋイãƒĒãƒŗグãĢé–ĸしãĻはぞãŖたく新しいですが、先月こぎ゚ãƒŦッドを静かãĢフりロãƒŧしãĻいãĻ、æŊœåœ¨įš„ãĒ回éŋį­–ãĢついãĻぎäēēã€…ãŽč€ƒãˆã‚’čžã„ãĻ興å‘ŗがありぞした。少ãĒくともįŸ­æœŸįš„ãĢは。

一部ぎãƒĻãƒŧã‚ļãƒŧīŧˆį§č‡ĒčēĢも1äēēīŧ‰ã¯ã€įĩ„ãŋčžŧãŋぎ゚ã‚ŋイãƒĒãƒŗã‚°ã‚ˇã‚šãƒ†ãƒ ã‚’å¤šį”¨ã—ãĒいか、厌全ãĢ回éŋしãĻいると思いぞす。 これはä¸ģãĢ、プãƒŦãƒŧãƒŗãĒCSSぞたはSassãĢį˛žé€šã—ãĻいãĻ、JSã‚šã‚ŋイãƒĒãƒŗã‚°ã‚ˇã‚šãƒ†ãƒ ã‚’åŠšæžœįš„ãĢäŊŋį”¨ã™ã‚‹æ–šæŗ•ã‚’掘り下げる時間があぞりãĒいためです。 į§ã¯č‡Ē分ぎクナ゚名をäŊœæˆã—、åˆĨぎ゚ã‚ŋイãƒĢã‚ˇãƒŧãƒˆãƒ•ã‚Ąã‚¤ãƒĢをäŊœæˆã—、Reactã‚ŗãƒŗポãƒŧネãƒŗト内でクナ゚名をäŊŋį”¨ã—ãĻįļščĄŒã™ã‚‹ã“とをåĨŊãŋぞす。 åŸēæœŦįš„ãĢ、į§ã¯ãƒ—ãƒŦãƒŧãƒŗHTMLを書いãĻいるかぎようãĢã‚šã‚ŋイãƒĢã‚’č¨­åŽšã—ãžã™ã€‚

ãã†ã¯č¨€ãŖãĻも、゚ã‚ŋイãƒĒãƒŗã‚°ã‚ˇã‚šãƒ†ãƒ ãŽéĢ˜äžĄãĒ部分ぎ型チェックをã‚ĒフãĢするフナグをčŋŊ加することは可čƒŊ/原į”¨įš„ですかīŧˆãŠãã‚‰ãtype CSSProperties = anyようãĒã“ã¨ã‚’æĄäģļäģ˜ãã§čĄŒã†ã“とãĢよãŖãĻīŧ‰īŧŸ ã‚šã‚ŋイãƒĢã‚ˇã‚šãƒ†ãƒ ã‚’äŊŋį”¨ã—ãĻいるäēēとäŊŋį”¨ã—ãĻいãĒいäēēぎ数ぎįĩąč¨ˆã¯ã‚ã‹ã‚Šãžã›ã‚“が、原際ãĢはそれãģおåŽŗはãĒいと思いぞすīŧˆããŽãƒ•ãƒŠã‚°ãŒč¨­åŽšã•ã‚ŒãŸã‚ŋイピãƒŗグをテ゚トするためãĢチェックがčŋŊ加された場合īŧ‰ 、そしãĻそれはãƒĻãƒŧã‚ļãƒŧぎ少ãĒくとも1つぎã‚ģã‚°ãƒĄãƒŗトぎパフりãƒŧマãƒŗ゚を攚善するためぎčŋ…速ãĒæ–šæŗ•ã§ã™ã€‚

一čˆŦįš„ãĒč€ƒãˆæ–šãĢč¨€åŠã—ãŸã‹ãŖただけです。 お気čģŊãĢ撃åĸœã—ãĻください。 īŧšslightly_smiling_faceīŧš

@embeddedt一čˆŦįš„ãĢ、äŊ•ã‹ã‚’anyとしãĻ明į¤ēįš„ãĢマãƒŧã‚¯ã™ã‚‹ã“ã¨ã¯ã€ããŽã‚ˇãƒŗボãƒĢぎ型チェックをį„ĄåŠšãĢã™ã‚‹č‰¯ã„æ–šæŗ•ã§ã™ã€‚ ãã†ã¯č¨€ãŖãĻも、前ぎåŽŖč¨€ã‚’å˜ãĢåŖŠã™ã“とができるぎか、それとも、あãĒたがį¤ē唆するようãĢã€é‡č¤‡ã—ãŸåŽŖč¨€ãŽå•éĄŒã‚’å›žéŋするためãĢã‚ŗãƒŗパイナぎã‚ĩポãƒŧトがåŋ…čĻãĒぎかを思いå‡ēせぞせん。

新しい数値īŧˆį•°ãĒã‚‹ãƒžã‚ˇãƒŗ、į•°ãĒã‚‹æ™‚é–“ãƒĄãƒˆãƒĒックīŧ‰īŧš

| バãƒŧジョãƒŗ| åˆč¨ˆæ™‚é–“|
|-|-|
| 3.5.3 | 32.5į§’|
| 3.7.5 | 35.9į§’|
| マ゚ã‚ŋãƒŧ| 29.9į§’|

ä¸Šč¨˜ã§æŠ•į¨ŋã—ãŸå•éĄŒãŽã„ãã¤ã‹ã¯ãžã æœĒč§Ŗæąēですが、åŸēæœŦįš„ãĢ3.5パフりãƒŧマãƒŗã‚šãĢæˆģãŖãĻいぞすīŧˆã“ぎベãƒŗチマãƒŧクぎ場合īŧ‰ã€‚ 明らかãĢ、それでもį§ãŸãĄãŒæœ›ã‚€ã‚ˆã‚Šã‚‚はるかãĢ遅いですが、æŦĄãŽå¤‰æ›´ãŽãƒãƒƒãƒã¯ãƒžãƒ†ãƒĒã‚ĸãƒĢUIå´ã§čĄŒã‚ã‚Œã‚‹å¯čƒŊ性がありぞす。

テ゚ト゚イãƒŧトで3.8.1をテ゚トしぞしたが、3.2.4をäŊŋį”¨ã—たäģĨ前ぎテ゚ト゚イãƒŧトと同じくらいéĢ˜é€Ÿã§ã‚るようですīŧˆ3.7は大嚅ãĢäŊŽé€Ÿã§ã—たīŧ‰ã€‚

įŽ‡į›´ãĢ言ãŖãĻ、新しい抟čƒŊを攞æŖ„せずãĢおれだけぎパフりãƒŧマãƒŗ゚を取りæˆģすことができたかはäŋĄã˜ã‚‰ã‚Œãžã›ã‚“。 īŧšsmileīŧšã‚‚う少しäŊ™čŖ•ãŒã‚るかもしれãĒいと思いぞすがīŧˆäž‹īŧšhttpsīŧš//github.com/microsoft/TypeScript/pull/36754īŧ‰ã€ãã‚Œã§ã‚‚最もåŊąéŸŋ力ぎある変更はCSSPropertiesã‚ŋイプぎ単į´”化だと思いぞす。 それらをいじくり回す抟äŧšã¯ã‚りぞしたかīŧŸ 少ãĒくとも一部ぎãƒĻãƒŧã‚ļãƒŧīŧˆ@embeddedtãĒおīŧ‰ã¯ã€ãƒ‘フりãƒŧマãƒŗ゚ぎ向上とåŧ•ãæ›ãˆãĢ、ã‚ŋイプチェックをあきらめãĻ喜んでいるようです。

少ãĒくとも一部ぎãƒĻãƒŧã‚ļãƒŧīŧˆ@embeddedtãĒおīŧ‰ã¯ã€ãƒ‘フりãƒŧマãƒŗ゚ぎ向上とåŧ•ãæ›ãˆãĢ、ã‚ŋイプチェックをあきらめãĻ喜んでいるようです。

最čŋ‘、TSチãƒŧムぎčĒ°ã‹ãŒã€ã‚ˆã‚ŠåŽŗ密ãĒã‚ŋイプをåŋ…čĻã¨ã™ã‚‹ã™ãšãĻぎãƒĻãƒŧã‚ļãƒŧãĢ寞しãĻ、よりįˇŠã„ã‚ŋイプをåŋ…čĻã¨ã™ã‚‹ãƒĻãƒŧã‚ļãƒŧがいるとツイãƒŧトしãĻいぞせんかīŧŸ īŧšįŦ‘饔īŧš

į§ãĢとãŖãĻ、それは原際ãĢは型チェックãĢついãĻではありぞせんīŧˆãƒ–ナã‚Ļã‚ļãƒŧdevtoolsはCSSをチェックするはるかãĢå„Ēれた抟čƒŊを備えãĻいぞすīŧ‰ã€‚ ã‚Ēãƒŧトã‚ŗãƒŗプãƒĒãƒŧトを刊į”¨ã§ãã‚‹ã‚ˆã†ãĢすることが重čĻã§ã™ã€‚

さぞざぞãĒ「バãƒŧジョãƒŗ」をčŠĻしãĻ、それらがおぎようãĢ抟čƒŊするかをįĸēčĒã—ぞす。

@amcasey CSSPropertiesīŧˆstyled-componentsではCSSObjectとå‘ŧばれぞすīŧ‰ãŽå†å¸°įš„ãĒ性čŗĒがä¸ģãĒå•éĄŒã§ã¯ãĒいと思いぞす。 そうでãĒければ、åŊŧらぎパフりãƒŧマãƒŗ゚はį§ãŸãĄã¨åŒã˜ãã‚‰ã„æ‚Ēいでしょう。 https://github.com/eps1lon/mui-types-perf/pull/6およãŗベãƒŗチマãƒŧクログを参į…§ã—ãĻください。

それは、į§ãŸãĄãŒčĄŒã†ã€Œã‚Ēãƒŧバãƒŧロãƒŧド」ぎ量ãĢé–ĸã™ã‚‹å•éĄŒã§ã‚ã‚‹å¯čƒŊ性がありぞす。 styled-componentsは静įš„ã‚Ēブジェクトぎãŋã‚’č¨ąå¯ã—ãžã™ãŒã€ã‚ĩãƒŗクされたバãƒŧジョãƒŗと各プロパテã‚Ŗはã‚ĩãƒŗクãĢãĒりぞす。 でもわかりぞせん。

型įŊ˛åã‚’単į´”化したいと思いぞすがīŧˆã“れは開į™ē者ãĢとãŖãĻもIMOであるためīŧ‰ã€JSSぎ原čŖ…ã¨ä¸€č‡´ã™ã‚‹ã‚ˆã†ãĢ明į¤ēįš„ãĢæą‚ã‚ã‚‰ã‚Œãžã—ãŸã€‚ ã‚ĩポãƒŧトしãĻいるぎで、į°Ąå˜ãĢロãƒŧãƒĢバックすることはできぞせん。 į‰šãĢã‚˛ã‚¤ãƒŗが20īŧ…ぎ領域ãĢある場合。 それがį ´æã‚’æ­ŖåŊ“化するとは思わãĒい。

ã‚ŋã‚¤ãƒ—ã‚’æĄäģļäģ˜ãã§īŧˆãƒĻãƒŧã‚ļãƒŧč¨­åŽšãĢåŸēãĨいãĻīŧ‰į˛žåēĻを下げることはできぞすかīŧŸ これãĢより、æ—ĸ存ぎã‚ŗãƒŧドがį ´æã™ã‚‹ã“とはãĒくīŧˆč¨­åŽšã¯ãƒ‡ãƒ•ã‚ŠãƒĢトでã‚ĒフãĢãĒãŖãĻいる可čƒŊ性があるためīŧ‰ã€č¤‡é›‘ãĒ型をåŋ…čĻã¨ã—ãĒいį§ãŽã‚ˆã†ãĒãƒĻãƒŧã‚ļãƒŧは、パフりãƒŧマãƒŗ゚ぎ向上をすばやくįĸēčĒã§ããžã™ã€‚

複雑ãĒã‚ŋイプをåŋ…čĻã¨ã—ãĒいį§ãŽã‚ˆã†ãĒãƒĻãƒŧã‚ļãƒŧは、パフりãƒŧマãƒŗ゚ぎ向上をすぐãĢįĸēčĒã§ããžã™ã€‚

į›ŽįĢ‹ãŖた違いがå‡ēるかおうかさえįĸēčĒã•ã‚ŒãĻいぞせん。 į§ã¯15īŧ…ぎパフりãƒŧマãƒŗ゚ぎ勝刊をčĻ‹ãĻきぞしたが、これがčĒč­˜ã§ãã‚‹ã‹ãŠã†ã‹ã¯į–‘わしいです。

į§ãŒčĻ‹ã‚‹ã“とができた「ãƒĻãƒŧã‚ļãƒŧč¨­åŽšã€ã¯ã€ã‚¤ãƒŗ゚トãƒŧãƒĢ時ãĢãƒ‘ãƒƒã‚ąãƒŧジãĢパッチを遊į”¨ã—ãĻいぞす。 č¤‡æ•°ãŽãƒãƒŧジョãƒŗぎã‚ŋイピãƒŗグをįļ­æŒã™ã‚‹ãŸã‚ãŽå¸¯åŸŸåš…がありぞせん。

@ eps1lonį”ŗしč¨ŗありぞせんが、į§ãŽčŗĒ問は不明įĸēだãŖたと思いぞす。 CSSPropertiesã¯å•éĄŒãĒいと思いぞすīŧˆãŸã ã—、もãŖと小さければもãŖと速いぎは明らかですがīŧ‰ -httpsīŧš//github.com/mui-orgぎã‚ĩブã‚ŋイプを単į´”化するäŊ™åœ°ãŒã‚るぎではãĒいかと原際ãĢ望んでいぞしたこぎã‚ŋイプをany変更した場合、厌äē†æ•°ã¯å°‘ãĒくãĒりぞすかīŧŸ

įˇ¨é›†īŧšį§ãŽãƒœãƒƒã‚¯ã‚šã§ã¯ã€ã“ã‚ŒãĢよりdocsプロジェクトぎã‚ŗãƒŗパイãƒĢが15īŧ…éĢ˜é€ŸãĢãĒりぞすīŧˆ29.7į§’から25.5į§’īŧ‰ãŒã€įˇ¨é›†ã‚¨ã‚¯ã‚šãƒšãƒĒエãƒŗ゚へぎåŊąéŸŋはわかりぞせん。
įˇ¨é›†2īŧšåŽŸéš›ã€åž‹ãŽå†å¸°éƒ¨åˆ†ã§ãŽæŠ˜ã‚ŠãŸãŸãŋをあきらめたら、 BaseCreateCSSPropertiesをäŊŋį”¨ã™ã‚‹ã ã‘で、äģ–ぎプロパテã‚Ŗぎ型はany īŧˆã¤ãžã‚Šã€äŋæŒã™ã‚‹ã“とができぞすīŧ‰ CSSプロパテã‚Ŗぎ原際ぎã‚ŋイプīŧ‰ã€‚
įˇ¨é›†3īŧšéŽå‰°ãĒプロパテã‚Ŗチェックぎため、įˇ¨é›†2は抟čƒŊしぞせんīŧˆã¤ãžã‚Šã€ã‚ĒブジェクトãƒĒテナãƒĢでäģģ意ぎプロパテã‚Ŗ名をäŊŋį”¨ã™ã‚‹ã“とはできぞせんīŧ‰ã€‚

一部ぎã‚ŋイプäŊœæˆč€…がそぎようãĢ感じるかもしれãĒいというäģŽčĒŦがあãŖたぎで、厌äē†ã¨ã‚ŋイプチェックãĢついãĻぎあãĒたぎポイãƒŗトは非常ãĢ興å‘ŗæˇąã„ã‚‚ãŽã§ã—ãŸã€‚ @DanielRosenwasserパã‚ŋãƒŧãƒŗ"a" | "b" | stringãĢ寞åŋœã™ã‚‹ãŸã‚ãĢ、こぎようãĒã“ã¨ã‚’æ¤œč¨Žã—ãŸã¨æ€ã„ãžã™-それはおこãĢã§ã‚‚čĄŒããžã—ãŸã‹īŧŸ

ぞた、 styled-componentsは、密æŽĨãĢé–ĸé€Ŗするチェッã‚Ģãƒŧぎパフりãƒŧマãƒŗã‚šãŽå•éĄŒãŒã‚ã‚‹ã“ã¨ãĢæŗ¨æ„ã—ãĻください。

ã‚ŋイプをよりæ­ŖįĸēãĢ指厚できるようãĢすることãĢé–ĸしãĻ、į§ã¯https://github.com/microsoft/TypeScript/issues/36782を提å‡ēしぞした

emotionが同じボãƒŧトãĢ乗ãŖãĻいるようです。

äģŠæ—Ĩ、プロジェクトãĢMaterial UIīŧˆ 4.9.4 īŧ‰ã‚’čŋŊ加し始めぞしたが、速åēĻが非常ãĢ遅いため、プロジェクトでäŊŋį”¨ã™ã‚‹ã“とすらできãĒいと思いぞす。 withStyles()をäŊŋį”¨ã—ãĻã‚Ģã‚šã‚ŋマイã‚ēされた単į´”ãĒ<Slider/>ã‚ŗãƒŗポãƒŧネãƒŗトをčŋŊ加しぞした。

į§ãŸãĄã¯ã€IDEでぎåŗ時ぎTypeScriptフã‚Ŗãƒŧドバックから、時々5〜10į§’ぎようãĢ感じるもぎãĢį§ģčĄŒã™ã‚‹ã“ã¨ã‚’čŠąã—ãĻいるīŧˆįžåœ¨ã€Material UIとį›¸äē’äŊœį”¨ã—ãĻいãĒいã‚ŗãƒŧドぎ部分ãĢついãĻは、äŊŋį”¨ã™ã‚‹ãƒ•ã‚Ąã‚¤ãƒĢでぎ厌全ãĒTypeScriptぎ速åēĻäŊŽä¸‹īŧ‰ã‚ŗãƒŗポãƒŧネãƒŗトīŧ‰ã€‚ これらぎã‚ŋイプīŧˆãžãŸã¯ã€éžå¸¸ãĢ複雑ãĒã‚ŋイプīŧ‰ãĢは、äŊ•ã‹ãŒå¤§åš…ãĢ間違ãŖãĻいるåŋ…čĻãŒã‚りぞす。 @ amcaseyがいくつかぎ遊切ãĒčĒŋæŸģã‚’čĄŒãŖãĻいるようです。そぎ

少ãĒくともäģŠãŽã¨ã“ろ@material-uiすずãĻぎTypeScriptぎもぎを除外できる斚æŗ•ã‚’čĻ‹ã¤ã‘ようとしãĻいぞすīŧˆåŸēæœŦįš„ãĢãƒĸジãƒĨãƒŧãƒĢ全äŊ“ã‚’any īŧ‰-しかし、TypeScriptはそれを十分ãĢį°Ąå˜ãĢできãĒいようです。

@lostpebble withStylesäģĨ外ぎもぎをäŊŋį”¨ã—ãĻ゚ナイダãƒŧをã‚Ģã‚šã‚ŋマイã‚ēしãĻも同じことがčĩˇã“りぞすかīŧŸCSSãƒĸジãƒĨãƒŧãƒĢãĒおですかīŧŸ

@lostpebbleįžåœ¨ã€į‰šåŽšãŽã‚ŋイプぎã‚ģットを除外するためぎã‚ĩポãƒŧトされãĻいる斚æŗ•ã¯ã‚りぞせん。 æœŦåŊ“ãĢ、æœŦåŊ“ãĢやりたいぎであれば、原験するぎはパ゚マッピãƒŗグです。 "@material-ui/*": ["simplemui"]ようãĒパ゚マッピãƒŗグをčŠĻしãĻから、æŦĄã‚’åĢむsimplemui.d.tsをäŊœæˆã§ããžã™ã€‚

declare const x: any;
export = x;

これãĢより、すずãĻぎマテãƒĒã‚ĸãƒĢUIã‚ŋイプが劚果įš„ãĢanyぞす。 これは間違いãĒくハックであり、į§ãŒãŠå‹§ã‚ã§ãã‚‹ã‚‚ぎではありぞせんが、įˇ¨é›†ã‚¨ã‚¯ã‚šãƒšãƒĒエãƒŗ゚ぎブロックをč§Ŗ除する可čƒŊ性がありぞす。

ã„ãã¤ã‹ãŽč‰¯ã„æ”šå–„īŧˆ30īŧ…ぎ領域ぎおこかīŧ‰ã‚’čĄŒãŖたと思いぞすが、äģŠã§ãã‚‹ã“とはã‚ŋイピãƒŗグをįˇŠãã™ã‚‹ã“とだけぎようです。

これãĢã¯ã€å…ˇäŊ“įš„ãĒææĄˆãŒįĩļ寞ãĢåŋ…čĻã§ã™ã€‚たとえば、ã‚ŋイプチェッã‚ĢãƒŧãĢ受けå…ĨれられるぎãĢおぎ間違ãŖたã‚ŗãƒŧドでもかぞいぞせん。 æŦĄãĢ、ベãƒŗチマãƒŧã‚¯ã‚’čĄŒã„ã€ã“ã‚ŒãŒæ„å‘ŗぎあるへこãŋãĢãĒるかおうかをįĸēčĒã™ã‚‹åŋ…čĻãŒã‚りぞす。

意å›ŗįš„ãĢ導å…Ĩされた回帰は、å›ŗ書館ぎ刊į”¨č€…ãĢčĒŦ明するåŋ…čĻãŒã‚り、全äŊ“įš„ãĢ非常ãĢ゚トãƒŦã‚šãŒã‹ã‹ã‚‹ãŸã‚ã€ãƒĄãƒŗテナãĢとãŖãĻ多くぎäŊœæĨ­ãŒčŋŊ加されることをį†č§Ŗするåŋ…čĻãŒã‚りぞす。

ですから、čĒ°ã‹ãŒåŽŸčĄŒå¯čƒŊãĒæƒ…å ąã‚’æŒãŖãĻいãĒい限り、これはįžæ™‚į‚šã§ã¯į§ãĢとãŖãĻå„Ē先äē‹é …ではありぞせん。 そうでãĒければ、į§ã¯éžå¸¸ãĢ少ãĒいãƒĒã‚ŋãƒŧãƒŗãĢあぞりãĢも多くぎ時間をč˛ģやすåŋ…čĻãŒã‚りぞす。

į§ãŽå ´åˆã€ makeStyles(theme => createStyles(...))場合、 Record<ClassKey, any>からcreateStyles(...)ãģãŧ半分〜čŋ”しぞすīŧˆį§ãŽã‚ŗãƒŧドとã‚ŗãƒŗピãƒĨãƒŧã‚ŋãƒŧでは、į´„1200ms-> 750ms〜1400ms→1100msīŧ‰ encodedSemanticClassifications-full: elapsed time tsserverログãĢ

export default function createStyles<ClassKey extends string, Props extends {}>(
  styles: StyleRules<Props, ClassKey>,
): Record<ClassKey, any>;

createStyles(...)ぱã‚ŋイãƒĢ構造をチェックするため、makeStylesぎargument-type-of-massive-unionとcreateStylesぎreturn-type-of-massive-unionぎ型チェックを゚キップできぞす。

〜īŧˆãã—ãĻmakeStylesã‚ŗãƒŧド全äŊ“ã‚’ã‚ŗãƒĄãƒŗトã‚ĸã‚Ļトするīŧš650msīŧ‰ã€œ

@ypresto createStylesは、 constã‚ĸã‚ĩãƒŧã‚ˇãƒ§ãƒŗぎãĒいtypescriptバãƒŧジョãƒŗãĢぎãŋåŋ…čĻã§ã™ã€‚ ã‚ŗãƒŧドベãƒŧ゚で{ display: 'block' as const }をäŊŋį”¨ã§ãã‚‹å ´åˆīŧˆts> = 3.4īŧ‰ã€ createStylesをčļ…えãĻäŊŋį”¨ã—ぞす。

@ eps1lonそれãĢ気ãĨき、 docs切りæ›ŋえをčŠĻãŋぞしたが、įĩæžœã¯å°čąĄįš„ではありぞせんでした。

@ eps1lonãĢconstあり、 createStylesがãĒい場合、IntelliSenseはã‚ŗãƒŗテキ゚トčĒč­˜å€™čŖœã‚’襨į¤ēしãĒくãĒりぞすīŧšcryīŧš

@yprestoそうすずきです。 ã‚ĩãƒŗプãƒĢぎã‚ŗãƒŧド゚ニペットはありぞすかīŧŸ

@amcasey

as constを外部ã‚Ēブジェクトぞたはプロパテã‚ŖãĢčŋŊ加すると、äē‹åŽŸä¸Šãã‚ŒãŒåŧˇåˆļįĩ‚äē†ã•ã‚Œãžã™ã€‚ すずãĻぎį‰ŠäģļãĢ配įŊŽã—たくありぞせん。

const useStyles = makeStyles(theme => ({
  root: {
    // no IntelliSense
  }
} as const))

ぞた、createStylesがãĒいと、文字列ぎčŖœåŽŒãĢ小さãĒåˆļ限がありぞす。

const useStyles = makeStyles(theme => ({
  root: {
    direction: '|', // no IntelliSense at | (works with createStyles)
    direction: | // IntelliSense works at |
  }
}))

@ypresto 「æŽēす」とは、「 createStylesと同じようãĢ抟čƒŊさせる」という意å‘ŗですかīŧŸ

おこãĢでもįŊŽããŽã¯ãƒ‰ãƒŠãƒƒã‚°ã§ã™ãŒã€ createStylesおこãĢでもįŊŽããŽã¨åŒã˜ãã‚‰ã„ドナッグです。

@amacleayį§ã¯kills IntelliSenseを意å‘ŗしぞしたīŧšįĨˆã‚‹īŧšã€‚

į”ŗしč¨ŗありぞせんが、ã‚ŗãƒĄãƒŗトを逃しぞした。 それをčŠĻしãĻãŋぞす。

į†į”ąã¯ã‚ã‹ã‚Šãžã›ã‚“ãŒã€čˆˆå‘ŗæˇąã„ã“ã¨ãĢ、これは1100ms→750msです。

 export const DropArea: React.FC<CardProps & {
   active?: boolean
   description: string
   icon?: React.ReactNode
-}> = ({ active, description, icon, children, ...props }) => {
+}> = ({ children, ...props }) => {
   const classes = useStyles()
+  const active = false
+  const icon: React.ReactNode = null
+  const description = ''
   return (
     <Card {...props} className={clsx(classes.root)} variant="outlined">

FCからCardProps &を削除しãĻも、ãģãŧ同じįĩæžœãĢãĒりぞす。 おそらく、CardPropsがPaperPropsã‚’æ‹Ąåŧĩし、PaperPropsが大きãĒHTMLAttributesã‚’æ‹Ąåŧĩするためです。

更新と重čĻīŧš CardPropsをHTMLAttributes<HTMLDivElement>įŊŽãæ›ãˆã‚‹ã¨ã€æ™‚é–“ã‚‚įŸ­į¸Žã•ã‚Œã‚‹ã“とがわかりぞしたīŧˆæ¸Ŧ厚されãĻいぞせんīŧ‰ã€‚

最垌ãĢ、最大ぎもぎ、750ms→130msをčĻ‹ã¤ã‘ぞした。

2つぎã‚ŋイポグナフã‚Ŗからstyle={...}を削除しぞす。

-<Typography variant="subtitle2" component="div" noWrap style={{ width: '26ch' }}>...</Typography>
+<Typography variant="subtitle2" component="div" noWrap>...</Typography>
-<Typography variant="caption" component="div" noWrap style={{ width: '20ch' }}>...</Typography>
+<Typography variant="caption" component="div" noWrap>...</Typography>

しかし、ãĒぜīŧŸ 同じ゚ã‚ŋイãƒĢを<div>čŋŊ加しãĻも、パフりãƒŧマãƒŗ゚はäŊŽä¸‹ã—ぞせん。 たãļんOverridableComponentã¯č¤‡é›‘ã™ãŽãžã™..īŧŸ

īŧˆį§ã¯TypeScript 3.8.3、 @material-ui/core 4.9.1をäŊŋį”¨ã—ãĻいぞすīŧ‰

Material-UIがã‚ŗãƒŗポãƒŧネãƒŗトぎロãƒŧã‚ĢãƒĢã‚šã‚ŋイãƒĢをå‡Ļį†ã™ã‚‹æ–šæŗ•ã¯ã€ReactがHTMLčĻį´ ãĢ寞しãĻå‡Ļį†ã™ã‚‹æ–šæŗ•ã¨ã¯į•°ãĒりぞす。

@embeddedtã‚ŋイプãƒŦベãƒĢでは、divぎ゚ã‚ŋイãƒĢプロップと同じReact.CSSPropertiesãĢč§Ŗæąēされぞす。

@yprestoį§ã¯

こんãĢãĄã¯įš†ã•ã‚“、これãĢついãĻæ–°ã—ã„å•éĄŒã‚’é–‹ãäžĄå€¤ãŒã‚ã‚‹ã‹ãŠã†ã‹ã‚ã‹ã‚‰ãĒいぎで、ã‚ŋイプぎæ­Ŗįĸē性/パフりãƒŧマãƒŗã‚šãĢé–ĸé€ŖしãĻいるぎで、ここãĢ投į¨ŋしぞす。 äģŖわりãĢå•éĄŒã‚’é–‹ãåŋ…čĻãŒã‚るかおうかを教えãĻください。
ドキãƒĨãƒĄãƒŗトãĢåž“ãŖãĻã‚Ģã‚šã‚ŋムフりãƒŗトをčŋŊ加すると、æŦĄãŽå…Ĩ力エナãƒŧがį™ēį”Ÿã—ぞす。
Type 'string' is not assignable to type 'FontFaceFontDisplayProperty'

csstype 2.6.9ぎå…Ĩ力は有劚であり、äģ–ãŽåąžæ€§ã¯å•éĄŒãĒいためīŧˆMUI 4.9.5をäŊŋį”¨īŧ‰ã€ã“れはåĨ‡åĻ™ãĒことです。

const sourceSansPro = {
  fontFamily: "'Source Sans Pro'",
  fontStyle: "normal",
  fontDisplay: "swap", // won't work
  fontWeight: 400,
  src: `
    url('/static/fonts/Source_Sans_Pro/SourceSansPro-Regular.ttf') format("truetype")
  `
};

テãƒŧマプロパテã‚Ŗīŧš

  overrides: {
    MuiCssBaseline: {
      "@global": {
        "@font-face": [sourceSansPro]
      }
    }

ã‚ŋイプはtype FontFaceFontDisplayProperty = "auto" | "block" | "fallback" | "optional" | "swap";

@ eric-burelこれは、typescriptぎč‡Ēå‹•åž‹æ‹ĄåŧĩãĢé–ĸã™ã‚‹å•éĄŒã§ã™ã€‚ čŠĻす

- fontDisplay: "swap", // won't work
+ fontDisplay: "swap" as "swap",

それが抟čƒŊし、新しいæĻ‚åŋĩ「ã‚ŋã‚¤ãƒ—ãŽæ‹Ąå¤§ã€ã‚’å­Ļãŗぞした:)たとえば、 fontStyleがåŊąéŸŋを受けãĒいぎはåĨ‡åĻ™ã§ã™ã€‚これは、列挙型としãĻ厚įžŠã•ã‚ŒãŸå”¯ä¸€ãŽCSSプロパテã‚Ŗではありぞせんが、これを初めãĻヒットしたときです。 。

įˇ¨é›†īŧšã‚ã‹ã‚Šãžã—た、それは十分ãĢ文書化されãĻいぞすīŧš https īŧš//material-ui.com/guides/typescript/#using -createstyles-to-defeat-type-widening

最垌ãĢ、最大ぎもぎ、750ms→130msをčĻ‹ã¤ã‘ぞした。

2つぎã‚ŋイポグナフã‚Ŗからstyle={...}を削除しぞす。

-<Typography variant="subtitle2" component="div" noWrap style={{ width: '26ch' }}>...</Typography>
+<Typography variant="subtitle2" component="div" noWrap>...</Typography>
-<Typography variant="caption" component="div" noWrap style={{ width: '20ch' }}>...</Typography>
+<Typography variant="caption" component="div" noWrap>...</Typography>

しかし、ãĒぜīŧŸ 同じ゚ã‚ŋイãƒĢを<div>čŋŊ加しãĻも、パフりãƒŧマãƒŗ゚はäŊŽä¸‹ã—ぞせん。 たãļんOverridableComponentã¯č¤‡é›‘ã™ãŽãžã™..īŧŸ

īŧˆį§ã¯TypeScript 3.8.3、 @material-ui/core 4.9.1をäŊŋį”¨ã—ãĻいぞすīŧ‰

これがビãƒĢド時間ãĢåŊąéŸŋするぎか、それともイãƒŗテãƒĒã‚ģãƒŗ゚がåŊšįĢ‹ã¤ãŽãĢかかる時間だけãĢåŊąéŸŋするぎかわかりぞしたかīŧŸ ビãƒĢãƒ‰ãŽå•éĄŒãŒį™ēį”Ÿã—īŧˆãƒĄãƒĸãƒĒ不čļŗīŧ‰ã€ä¸€éƒ¨ãŽTSã‚ŗãƒŧドぎã‚ŗãƒŗポãƒŧネãƒŗトãĢ大量ぎstyle={someStyle}č¨­åŽšã•ã‚ŒãĻいぞす。 それがį§ãŸãĄãŽå•éĄŒãŽä¸€éƒ¨ã§ã‚るかおうかį–‘問ãĢ思いぞす。

@ yatrix7 、一čˆŦįš„ãĢč¨€ãˆã°ã€ã“ã‚Œã‚‰ãŽé•ˇã„ãƒã‚§ãƒƒã‚¯æ™‚é–“ã¯ã€ãƒ“ãƒĢドとエデã‚Ŗã‚ŋãƒŧãŽä¸Ąæ–šãŽåŋœį­”時間ãĢåŊąéŸŋを与えると思いぞす。

į§ã¯įžåœ¨ã“れをčĒŋずãĻいるäēēはいぞすかīŧŸ äģĨ前ぎバãƒŧジョãƒŗぎã‚ĸップグãƒŦãƒŧドでは、typescriptã‚ŋイプぎチェック時間ãĢé–ĸしãĻいくつかぎ攚善があãŖたことをį§ã¯įŸĨãŖãĻいぞす。 しかし、それでも遅いです。
これをč‡Ē分でčĒŋずãĻもかぞいぞせん。

これをč‡Ē分でčĒŋずãĻもかぞいぞせん。

それはį´ æ™´ã‚‰ã—いでしょう。 įžåœ¨ã€į§ãŸãĄãŒå–ã‚Šįĩ„むずき原į”¨įš„ãĒ項į›Žã‚’čĒč­˜ã—ãĻいぞせん。 したがãŖãĻ、ボトãƒĢネックへぎポイãƒŗã‚ŋをいただければ嚸いです。

čĒŋæŸģãĢåŊšįĢ‹ã¤ã‚ˆã†ãĢ、äģŠãŽã¨ã“ろいくつかぎベãƒŗチマãƒŧクをčŋŊ加しぞしたīŧš https īŧš

@FabianKielmann TS側では、į§ã¯ãƒ‘フりãƒŧマãƒŗã‚ščĒŋæŸģツãƒŧãƒĢãĢ取りįĩ„んできぞした。これは、すぐãĢ成į†Ÿã—ãĻ、material-uiãĢ遊į”¨ã§ãã‚‹ã‚ˆã†ãĢãĒã‚‹ã“ã¨ã‚’éĄ˜ãŖãĻいぞす。

これãĢ時間をč˛ģやす時間があれば、 httpsīŧš//github.com/microsoft/TypeScript/issues/38583ぎようãĒもぎをčŠĻすこともでき

こぎペãƒŧジはåŊšãĢįĢ‹ãĄãžã—たかīŧŸ
0 / 5 - 0 評価