Ember.js: v3.17.0์˜ ์ž์‚ฐ ํฌ๊ธฐ ํšŒ๊ท€

์— ๋งŒ๋“  2020๋…„ 03์›” 05์ผ  ยท  14์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: emberjs/ember.js

์•ฑ ์ค‘ ํ•˜๋‚˜์—์„œ Ember v3.17.0 ๋ฆด๋ฆฌ์Šค๋กœ ์ธํ•ด ์ž์‚ฐ ํฌ๊ธฐ๊ฐ€ ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ „์—

  • dist / assets / app.js : 613.18KB (78.46KB gzipped)
  • dist / assets / vendor.js : 2.34MB (558.13KB gzip์œผ๋กœ ์••์ถ• ๋จ)

ํ›„

  • dist / assets / app.js : 690.43KB (89.22KB gzipped)
  • dist / assets / vendor.js : 2.42MB (572.39KB gzip์œผ๋กœ ์••์ถ• ๋จ)

/ cc @pzuraq @rwjblue

Bug Regression

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

FYI- https: //github.com/emberjs/ember.js/pull/18941์€ 3.16์— ๋น„ํ•ด ๋Œ€๋ถ€๋ถ„์˜ ์„ฑ์žฅ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค (์šฐ๋ฆฌ๊ฐ€ ์ž‘์—…์ค‘์ธ ์•ฝ 3 %๋Š” ์—ฌ์ „ํžˆ ๋” ํฌ์ง€ ๋งŒ).

๋ชจ๋“  14 ๋Œ“๊ธ€

์ƒˆ๋กœ์šด ๋ถˆ์”จ ํ”„๋กœ์ ํŠธ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

__2.16.0__

  • ๊ณต๊ธ‰ ์—…์ฒด : 692.58 KB (176.09 KB gzipped)
  • ์•ฑ : 9.82KB (2.15KB gzipped)

__2.17.0__

  • ๊ณต๊ธ‰ ์—…์ฒด : 715.12 KB (183.64 KB gzipped)
  • ์•ฑ : 9.94KB (2.2KB gzipped)

์ผ๋ถ€ ๊ณต๊ธ‰ ์—…์ฒด์˜ ์ฐจ์ด์ ์„ํ–ˆ๊ณ  ์•ฝ๊ฐ„ ํฌ๋ฏธํ•œ ๋น›-VM ์—…๋ฐ์ดํŠธ ์˜ˆ์— ์˜ํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค https://github.com/glimmerjs/glimmer-vm/commit/4c56c216465410f5bd6f4f53fb7d4508f8048f09#diff ๋ฅผ ํ†ตํ•ด -64c3cabffb164d9a2c4bf2d427094e19 https://github.com/emberjs/ ember.js / commit / 699439c0aaa1917754490efeb5751d10f77e5230

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

2.16.3

  • ๊ณต๊ธ‰ ์—…์ฒด : 886KB (213KB brotli)
  • ์•ฑ : 1.01MB (126KB ๋ธŒ๋กœ ํ‹€๋ฆฌ)

2.17.0

  • ๊ณต๊ธ‰ ์—…์ฒด : 907KB (219KB brotli)
  • ์•ฑ : 1.15MB (137KB ๋ธŒ๋กœ ํ‹€๋ฆฌ)

๋˜ํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์—์„œ 2.16.3์—์„œ 2.17.0์œผ๋กœ ์„ฑ๋Šฅ์ด ~ 5 % ์ €ํ•˜๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

PS @ Turbo87 - HBS minifier ๋•Œ๋ฌธ์ผ๊นŒ์š”? ๋‚˜๋Š” ๋˜ํ•œ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ ๋œ Glimmer VM์— ์˜ํ•ด ์ƒ์„ฑ ๋œ ์ƒˆ ํ…œํ”Œ๋ฆฟ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๋“  "์†์ƒ"๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@ boris-petrov-์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ํ™•์ธํ•˜๋Š” ๋งˆ์Œ? ์•ฑ package.json ์—์„œ minifier๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ...

์ด๊ฒƒ์€ ํ…œํ”Œ๋ฆฟ ํฌ๊ธฐ๋ฅผ ์•ฝ๊ฐ„ ๋ถ€ ํ’€๋ฆฌ๋Š” ํฌ๋ฏธํ•œ ์™€์ด์–ด ํ˜•์‹์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์•ฑ์—์„œ diff๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ https://github.com/glimmerjs/glimmer-vm/blob/11cc83b2adf220bef298a1a6298c9e4e750c9fe1/packages/%40glimmer/interfaces/lib/compile/wire-format.d.ts#L76์ž…๋‹ˆ๋‹ค.

@rwjblue-@ krisselden ์ด ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค-์ด๊ฒƒ์€ ember-hbs-minifier ์™€๋Š” ์•„๋ฌด ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋„์šฐ๋ฏธ์™€ ํ•จ๊ป˜ ์ƒˆ๋กœ์šด Ember ์•ฑ์„ ์‚ฌ์šฉํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

import Helper from '@ember/component/helper';
export default Helper.helper(() => true);

๊ทธ๋ฆฌ๊ณ  ๋‘ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ :

other-component.hbs

{{some-component foo=1}}

some-component.hbs

{{some-helper 1 2 3 @foo}}

3.16.3์€ ๋‘ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

other-component.hbs :

block: "{\"symbols\":[],\"statements\":[[1,[28,\"some-component\",null,[[\"foo\"],[1]]],false],[0,\"\\n\"]],\"hasEval\":false}",

some-component.hbs :

block: "{\"symbols\":[\"@foo\"],\"statements\":[[1,[28,\"some-helper\",[1,2,3,[23,1,[]]],null],false],[0,\"\\n\"]],\"hasEval\":false}",

3.17์—์„œ๋„ ๋™์ผ :

other-component.hbs :

block: "{\"symbols\":[],\"statements\":[[1,0,0,0,[31,2,14,[27,[26,0,\"CallHead\"],[]],null,[[\"foo\"],[1]]]],[1,1,0,0,\"\\n\"]],\"hasEval\":false,\"upvars\":[\"some-component\"]}",

some-component.hbs :

block: "{\"symbols\":[\"@foo\"],\"statements\":[[1,0,0,0,[31,2,11,[27,[26,0,\"CallHead\"],[]],[1,2,3,[27,[24,1],[]]],null]],[1,1,0,0,\"\\n\"]],\"hasEval\":false,\"upvars\":[\"some-helper\"]}",

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ "๋ฒ„๊ทธ"๋ผ๊ณ  ๋ถ€๋ฅด์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ๋‹จ์ง€๋ณ„๋กœ ์ข‹์ง€ ์•Š๋‹ค. ์•ฑ์ด ํด์ˆ˜๋ก ํ…œํ”Œ๋ฆฟ์ด ์ปค์ง‘๋‹ˆ๋‹ค.

์™€์ด์–ด ํ˜•์‹์˜ ๋ณ€๊ฒฝ์€ https://github.com/glimmerjs/glimmer-vm/pull/972์—์„œ ์ˆ˜ํ–‰ ํ•œ ์ž‘์—…๊ณผ ๊ด€๋ จ์ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์— ๋ฒ„ 3.16

- dist/assets/ember-observer.js: 706.89 KB (66.89 KB gzipped)

์— ๋ฒ„ 3.17

 - dist/assets/ember-observer.js: 743.7 KB (69.63 KB gzipped)

const enum ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ

 - dist/assets/ember-observer.js: 739.58 KB (69.44 KB gzipped)

์œ„์น˜ ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ

 - dist/assets/ember-observer.js: 723.55 KB (68.06 KB gzipped)

Get + GetPath + GetContextualFree ํ‘œํ˜„์‹ ๋ณ‘ํ•ฉ

- dist/assets/ember-observer.js: 721.99 KB (68.04 KB gzipped)

ํŒจ์น˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด ์•ฑ์—์„œ ์‹คํ–‰ํ•ด๋„ ๊ดœ์ฐฎ๋‹ค๋ฉด ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

https://www.npmjs.com/package/ember-template-size

$ npx ember-template-size .
npx: installed 11 in 1.766s
{
  '3.16.3': {
    version: '3.16.3',
    original: 793656,
    compiled: 1223295,
    brotli: 242598,
    gzip: 242606
  },
  '3.17.0-patched': {
    version: '3.17.0-patched',
    original: 793656,
    compiled: 1299096,
    brotli: 258803,
    gzip: 258826
  },
  '3.17.0': {
    version: '3.17.0',
    original: 793656,
    compiled: 1624741,
    brotli: 294760,
    gzip: 294780
  }
}

๊ทธ๋ฆฌ๊ณ  https://github.com/rust-lang/crates.io์˜ ๊ฒฝ์šฐ :

{
  '3.16.3': {
    version: '3.16.3',
    original: 73613,
    compiled: 143264,
    brotli: 32477,
    gzip: 32608
  },
  '3.17.0-patched': {
    version: '3.17.0-patched',
    original: 73613,
    compiled: 160526,
    brotli: 34663,
    gzip: 34803
  },
  '3.17.0': {
    version: '3.17.0',
    original: 73613,
    compiled: 183711,
    brotli: 36903,
    gzip: 37070
  }
}

์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด:

{
  '3.16.3': {
    version: '3.16.3',
    original: 281240,
    compiled: 450040,
    brotli: 98120,
    gzip: 98142
  },
  '3.17.0-patched': {
    version: '3.17.0-patched',
    original: 281240,
    compiled: 494042,
    brotli: 105152,
    gzip: 105178
  },
  '3.17.0': {
    version: '3.17.0',
    original: 281240,
    compiled: 596287,
    brotli: 117757,
    gzip: 117784
  }
}

ํŒจ์น˜๋Š” ๋‚ด๊ฐ€ ๊ฐ€์ง„ ๋Œ€๋ถ€๋ถ„์˜ ๋‚ฎ์€ ๋งค๋‹ฌ๋ฆฐ ๊ณผ์ผ ์•„์ด๋””์–ด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด๊ฐ€ ๋” ์žˆ์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‚˜๋จธ์ง€ ํšŒ๊ท€๋ฅผ ๋ณต๊ตฌํ•˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํšŒ๊ท€๋ฅผ ์ผ์œผํ‚จ ๋ฆฌํŒฉํ„ฐ๋ง์€ ํฌ๊ณ  ๋ฏธ๋ž˜์˜ ๋ฐฉํ–ฅ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒํ–ˆ์œผ๋ฉฐ ์‹œ๊ฐ„์ด ์ œํ•œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์•„์ด๋””์–ด๊ฐ€ 2 ๊ฐœ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ‘ํ•ฉ [Append, 1 | 0, ...]์„ [TrustingAppend | Append, ..] ๊ทธ๋Ÿฐ ๋‹ค์Œ 1์„ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋ถ€์šธ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์™€์ด์–ด ํ˜•์‹ ํŠœํ”Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  0.

FYI- https: //github.com/emberjs/ember.js/pull/18941์€ 3.16์— ๋น„ํ•ด ๋Œ€๋ถ€๋ถ„์˜ ์„ฑ์žฅ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค (์šฐ๋ฆฌ๊ฐ€ ์ž‘์—…์ค‘์ธ ์•ฝ 3 %๋Š” ์—ฌ์ „ํžˆ ๋” ํฌ์ง€ ๋งŒ).

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰