Less.js: ๋ฒ„์ „ 3.10.x๋Š” ํ›จ์”ฌ ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  3.9.0๋ณด๋‹ค ํ›จ์”ฌ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2019๋…„ 09์›” 12์ผ  ยท  95์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: less/less.js

ํ”„๋กœ์ ํŠธ์˜ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค ์ค‘์— ์•ฝ 80๊ฐœ์˜ Less ๋นŒ๋“œ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๊ณ  Less.js์˜ ์ƒˆ ๋ฒ„์ „์ด ๋„ˆ๋ฌด ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ๊ฐ€ ์ถฉ๋Œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋นŒ๋“œ๊ฐ€ ์ตœ๊ทผ์— ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Less.js์—์„œ 3.9.0์—์„œ 3.10.3์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋™์•ˆ ์ถฉ๋Œ์„ ์ถ”์ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋„๋ก Less ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ (ํ•œ ๋ฒˆ์— 2๊ฐœ์˜ ํŒŒ์ผ ๋นŒ๋“œ) ํ”„๋กœ์„ธ์Šค ์ค‘์— Node์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ƒ˜ํ”Œ๋งํ•˜์—ฌ ๋‹ค์Œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

less graph

Less.js๋Š” ํ˜„์žฌ 130% ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐ ์•ฝ 100% ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

Less.js๋ฅผ ๋ฒค์น˜๋งˆํ‚นํ–ˆ๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ๋น„์Šทํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

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

์ข‹์•„ ํŒ€! ์ €๋Š” 3.x ๋นŒ๋“œ๋ฅผ ๊ฒŒ์‹œํ•  ์˜ˆ์ •์ด๋ฉฐ ๋‚˜์ค‘์— ์–ธ์  ๊ฐ€๋Š” ์•„๋งˆ๋„ ๋‹ค์Œ ์ฃผ์— 4.0์„ ๊ฒŒ์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋‘˜ ๋‹ค ์„ฑ๋Šฅ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊น…์— ๋„์›€์„ ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

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

๊ทธ๊ฑฐ ์ด์ƒ ํ•˜๋„ค. ๋‹น์‹ ์˜ ๋…ธ๋“œ ๋ฒ„์ „์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@PatSmuk360 3.10.0์˜ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํ•„์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๊ฐ€์ ธ์™€์„œ ๋‹ค๋ฅธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ตœ์‹  ๋ฒ„์ „์˜ 10(10.16.3)์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ „ ํž™ ์Šค๋ƒ…์ƒท:

image

๋‹ค์Œ ์ดํ›„์˜ ํž™ ์Šค๋ƒ…์ƒท:

image

๋˜ํ•œ Node 12.10.0์—์„œ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์ˆœ์ฐจ ๋นŒ๋“œ์˜ ํ•œ ์ง€์ ์—์„œ 587MB์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์— ๋„๋‹ฌํ•˜์—ฌ ํ›จ์”ฌ ๋” ๋‚˜๋น  ๋ณด์ž…๋‹ˆ๋‹ค.

์ด์ „ CPU ํ”„๋กœํ•„:
CPU-20190916T133934.cpuprofile.zip

image

๋‹ค์Œ ์ดํ›„์˜ CPU ํ”„๋กœํ•„:
CPU-20190916T134917.cpuprofile.zip

image

@PatSmuk360 ๋”ฐ๋ผ์„œ ๊ธธ๊ณ  ์งง์€ ๊ฒƒ์€ ํ•ด๋‹น ๋ฒ„์ „์˜ ์ฐจ์ด์ ์€ ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ES6 ๊ตฌ๋ฌธ์œผ๋กœ ๋ณ€ํ™˜๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ์ˆ ์ ์œผ๋กœ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์•„๋‹ˆ๋ฏ€๋กœ ์ฃผ์š” ๋ฒ„์ „์ด ์•„๋‹™๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ... ๋‚ด ์˜์‹ฌ์€ ๊ฐ์ฒด/๋ฐฐ์—ด ํ™•์‚ฐ ๊ตฌ๋ฌธ๊ณผ ๊ฐ™์€ ๊ฒƒ์— ๋Œ€ํ•œ ์ผ๋ถ€ Babel ๋ณ€ํ™˜์ด ๋” ์žฅํ™ฉํ•œ ES5 ๋ฒ„์ „๋ณด๋‹ค ๋œ ํšจ์œจ์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์›๋ž˜ Node 6 ์ด์ƒ๊ณผ ํ˜ธํ™˜๋˜๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ ํŒจํ‚ค์ง€๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ  ์žˆ์—ˆ์ง€๋งŒ ํด๋ž˜์Šค ๊ตฌ๋ฌธ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ํ†ตํ•ฉ์ด ์ค‘๋‹จ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— 3.10.0์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฌป๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํด๋ž˜์Šค ๊ตฌ์„ฑ์ด ์—†๋Š” ๋…ธ๋“œ 4๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ES5 ๋ณ€ํ™˜์ด ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰๋˜์ง€ ์•Š๋Š”์ง€ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๋ก ์ ์œผ๋กœ ๋” ์„ฑ๋Šฅ์ด ์ข‹์€ ๋‚ด๋ณด๋‚ด๊ธฐ๋กœ ์ด๋Ÿฌํ•œ Babel ๋‚ด๋ณด๋‚ด๊ธฐ ์„ค์ •์„ ๋” ์„ธ๋ถ„ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@PatSmuk360 ๋ง๋ถ™์—ฌ์„œ, ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ๊ทธ split ํ•จ์ˆ˜๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@matthew-dean String.prototype.split ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. chrome devtools์—์„œ ํ”„๋กœํ•„์„ ์—ด๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ‰์ƒ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ๊ฒ€์‚ฌํ•˜๊ธฐ ์‰ฝ๋„๋ก ํ”„๋กœํ•„์„ https://cdn.jsdelivr.net/npm/[email protected]/dist/less.cjs.js ์†Œ์Šค๋กœ ๋งํฌํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. *.cjs.js ~ *.js ํŒŒ์ผ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค ๋งต์ด ์žˆ์Šต๋‹ˆ๊นŒ? https://cdn.jsdelivr.net/npm/[email protected]/dist/less.min.js.map ํŒŒ์ผ์€ .min ํŒŒ์ผ์„ ES6 ์†Œ์Šค์— ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฒˆ์—ญ์ด ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์ผ์œผํ‚ค๋Š” ์œ„์น˜๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์†Œ์Šค ๋งต์„ ๊ฐœ๋ฐœ ๋„๊ตฌ์— ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • https://github.com/less/less.js/blob/cae5021358a5fca932c32ed071f652403d07def8/lib/less/source-map-output.js#L78์˜ ์ด ์ค„์€ CPU ์‹œ๊ฐ„์ด ๋งŽ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ๊ณ ๋ คํ•  ๋•Œ ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์ ์ ˆํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํž™ ํ”„๋กœํ•„์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ๋งŽ์ง€๋Š” ์•Š์ง€๋งŒ ๋ˆˆ์— ๋„๋Š” ๊ฒƒ์€ (closures), (system), (array), system / Context ์˜ ์–‘์ด ์ฆ๊ฐ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ CPU ํ”„๋กœํ•„์— ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๊ฐœ์ฒด์˜ ์ฆ๊ฐ€๋กœ ์ธํ•ด ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

@kevinramharak ์ผ๋ฐ˜์ ์œผ๋กœ _n_ ๊นŠ์ด์˜ Less์™€ ๊ฐ™์€ AST๋ฅผ CSS์™€ ๊ฐ™์€ ์ง๋ ฌํ™”๋˜๊ณ  ํ‰ํ‰ํ•œ ์ถœ๋ ฅ ํŠธ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด ๋งŽ์€ ์ž„์‹œ ๊ฐœ์ฒด ์ƒ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š”์ง€๋Š” ํŠน์ • ๋ณ€ํ™˜์œผ๋กœ ์ธํ•ด ์ถ”๊ฐ€ _x_๋Ÿ‰์˜ ๊ฐœ์ฒด๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ์‹œ์ ์œผ๋กœ๋ผ๋„ ๊ฐ ๋…ธ๋“œ๊ฐ€ 2-3๋ฐฐ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐํ•˜๊ธ‰์ˆ˜์  ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋…ธ๋“œ ์ˆ˜๋ฅผ ๊ณฑํ•˜๊ณ  ๊ทœ์น™์„ ํ‰๋ฉดํ™”ํ•ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ๊ณฑํ•˜๋ฉด... ๋”ํ•ด์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ES6 ๊ตฌ๋ฌธ์„ ๋ณธ์งˆ์ ์œผ๋กœ ES5 ๊ตฌ๋ฌธ์˜ ๊ตฌ๋ฌธ ์„คํƒ•์œผ๋กœ ๋ณธ์งˆ์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆœ์ง„ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (JavaScript ๊ฐœ๋ฐœ์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ด์— ๋Œ€ํ•ด ์œ ์ฃ„์ž…๋‹ˆ๋‹ค.) ์‹ค์ œ๋กœ ์ƒˆ๋กœ์šด ๊ตฌ๋ฌธ์„ ๋ณ€ํ™˜ํ•˜๋ฉด ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์€ ES5 ํŒจํ„ด์ด ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 99%์˜ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ด๊ฒƒ์€ ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๋“ค์€ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ดˆ๋‹น ์ˆ˜๋ฐฑ ๋˜๋Š” ์ˆ˜์ฒœ ๋ฒˆ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ œ ์ถ”์ธก์ž…๋‹ˆ๋‹ค.

@kevinramharak Re: ์†Œ์Šค ๋ผ์ธ - ์ด๋Š” ์›๋ž˜ Less ํŒŒ์„œ๊ฐ€ ์ž…๋ ฅ์˜ ํ–‰/์—ด์„ ์ถ”์ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์†Œ์Šค ๋งคํ•‘์ด ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ ์›๋ณธ์— ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž…๋ ฅ์„ ํ–‰์œผ๋กœ ์ฒญํฌํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์›์ฒœ. ์ด๊ฒƒ์€ 4.x+์—์„œ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด์ง€๋งŒ, ๊ทธ๊ฒƒ์ด ์™œ ๊ทธ๊ฒƒ์ด ์ง€๊ธˆ ๊ฑฐ๊ธฐ์—์„œ ๋งŽ์€ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋Š”์ง€ ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์—์„œ less.min.js๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ 3.10.3์€ ์ด์ „์— ์‚ฌ์šฉํ–ˆ๋˜ 2.7.3๋ณด๋‹ค 2๋ฐฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค. ํฌ๋กฌ๊ณผ ํŒŒ์ด์–ดํญ์Šค ๋‘˜ ๋‹ค.

@PatSmuk360 ์ด ์ง€์ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? https://github.com/matthew-dean/less.js/tree/3.11.0

์š”์ปจ๋Œ€, Babel์˜ ES5๋กœ์˜ ๋ณ€ํ™˜์€ ๋‹ค์†Œ ๋”์ฐํ•˜๋ฉฐ ํด๋ž˜์Šค๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋งŽ์€ Object.defineProperty ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•จ์ˆ˜ ํ”„๋กœํ† ํƒ€์ž…์˜ ์ถœ๋ ฅ์ด ํ›จ์”ฌ ๋” ๋‚˜์€ TypeScript๋กœ ๋ณ€ํ™˜์„ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ชจ๋‘ ํ›Œ๋ฅญํ•˜๊ณ  ๋ฉ‹์ง‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ ‡๊ฒŒ ํ•œ ํ›„ Less์˜ ๋ธŒ๋ผ์šฐ์ € ํ…Œ์ŠคํŠธ๋Š” ๋งค์šฐ ์˜ค๋ž˜๋˜๊ณ  ์˜ค๋ž˜๋œ PhantomJS๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉฐ ์ง€๊ธˆ๊นŒ์ง€ ์•„๋ฌด๋„(์ €๋ฅผ ํฌํ•จํ•˜์—ฌ) PhantomJS์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ํ—ค๋“œ๋ฆฌ์Šค ํฌ๋กฌ์—.

๊ทธ๋Ÿฌ๋‚˜ ํ•œ ๋ฒˆ์— ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ถ„๊ธฐ์˜ dist ์†Œ์Šค์— ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ € ํ…Œ์ŠคํŠธ๋ผ๋Š” ํ˜ผ๋ž€์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Less ๋ธŒ๋ผ์šฐ์ € ํ…Œ์ŠคํŠธ๋ฅผ Headless Chrome์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ–ˆ์ง€๋งŒ ์„ฑ๋Šฅ/์•ˆ์ •์„ฑ ์ธก๋ฉด์—์„œ ๋ณ€ํ™˜ ํŒŒ์ดํ”„๋ผ์ธ์„ Babel์—์„œ TypeScript๋กœ ์™„์ „ํžˆ ๋ณ€๊ฒฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „ํ•˜๊ฒŒ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋งŽ์€ ํ”ผ๋“œ๋ฐฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ถ„๊ธฐ๋Š” https://github.com/less/less.js/pull/3442 ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ 2.7๋ณด๋‹ค 2๋ฐฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

@alecpl ์ข‹์€ ์ •๋ณด์ง€๋งŒ 3.11.0์ด 3.10๋ณด๋‹ค ๊ฐœ์„ ๋˜์—ˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์ด์ƒํ•œ ์ ์€ _์ด๋ก ์ƒ์œผ๋กœ_ ์›๋ž˜ Less ์ฝ”๋“œ๊ฐ€ Babel์˜ ๋ฐ˜๋Œ€๊ฐ€ ๋˜์–ด์•ผ ํ•˜๋Š” Lebab์œผ๋กœ ๋ณ€ํ™˜๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ES5 -> ES6 -> ES5๊ฐ€ ๊ฑฐ์˜ ๋™์ผํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋งŒ ๋ถ„๋ช…ํžˆ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ES6->ES5 ์ฝ”๋“œ๊ฐ€ ์›๋ž˜ ES5 ์ฝ”๋“œ์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ์กฐ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@alecpl

๊ทธ๋ž˜์„œ ์ €๋Š” ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ–ˆ๊ณ  Headless Chrome์—์„œ 3.11.0 vs. 3.10.3 vs. 3.9.0 vs. 2.7.3์˜ ๋ฒค์น˜๋งˆํ‚น์„ ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.

Less ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ 2๋ฐฐ ๋Š๋ฆฐ ๊ฒƒ์€ ๊ณ ์‚ฌํ•˜๊ณ  ๋ชจ๋“  ๋ฒ„์ „์—์„œ ๋” ๋Š๋ฆฌ๋‹ค๋Š” ์ฆ๊ฑฐ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. 3.10.0์ด ๋ณ€ํ™˜ ์„ค์ •์œผ๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋” ๋งŽ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์—ฌ์ „ํžˆ ์‚ฌ์‹ค์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹œ์Šคํ…œ์ด ๊ณต๊ฐ„์— ์ œ์•ฝ์„ ๋ฐ›๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ์Šค์™‘ ๋˜๋Š” ๋” ๋งŽ์€ GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์†๋„๊ฐ€ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํ•˜์ง€๋งŒ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

3.11.0 ๋ธŒ๋žœ์น˜์—์„œ grunt benchmark ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ž์‹ ์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ฐœ๋ณ„ ์‹คํ–‰์—์„œ ๋‹ค๋ฅธ ์ˆ˜์น˜๋ฅผ ๋ณด๊ณ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„์„ ์‹คํ–‰ํ•˜๋ฉด ์‹œ๊ฐ„์ด ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋‹น์‹ ์ด ๋‹น์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๋Š” ๊ณณ์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

@PatSmuk360 3.11.0 ์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋‹น์‹ ์˜ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” nodejs๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์–ธ๊ธ‰ํ•œ ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์˜ dist ํด๋”์—์„œ less.min.js ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์„œ ๋‚ด ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฝ˜์†”์—์„œ Less ์ฝ”๋“œ๋กœ ์ธ์‡„๋œ ํƒ€์ด๋ฐ์„ ๋ด…๋‹ˆ๋‹ค. ๋‚ด ์ ์€ ์ฝ”๋“œ๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์ถœ๋ ฅ ํŒŒ์ผ์€ ์•ฝ 100kB์˜ ์ถ•์†Œ๋œ CSS์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด "์‹ค์ƒํ™œ" ๋ฒค์น˜๋งˆํฌ์ž…๋‹ˆ๋‹ค. Roundcube ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Chrome์€ Firefox๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด์ง€๋งŒ ๋‘ ๋ฒ„์ „์˜ ์ฐจ์ด์ ์€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

@alecpl ํ .... ํŠน์ • Less ์ฝ”๋“œ์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์ฐจ์ด์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ค€์ด ์ž์˜์ ์ธ ๊ฒƒ์ด ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์žˆ๋‹ค๋ฉด ๊ทธ Less ํŒŒ์ผ์„ ๋ฒค์น˜๋งˆํ‚น์— ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์˜ค๋ž˜๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ํ™œ๋™์ด ์—†์œผ๋ฉด ํ์‡„๋ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋น ๋ฅธ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. 3.11.1์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ 3.10.3๋งŒํผ ๋Š๋ ธ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธ/ํ”„๋กœํŒŒ์ผ๋งํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ๋ฒค์น˜๋งˆํฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

3.11.1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์œผ๋ฉฐ ํ˜„์žฌ ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ ๋‹นํ•œ ํฌ๊ธฐ์˜ ํ”„๋กœ์ ํŠธ๋Š” webpack ๋ฐ less-loader ํ†ตํ•ด ๋นŒ๋“œํ•˜๋Š” ๋ฐ ~600MB RAM์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํž™ ํ• ๋‹น ํƒ€์ž„๋ผ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

heap-timeline

Ruleset ์˜ํ•ด ์œ ์ง€๋˜๋Š” ์—„์ฒญ๋‚œ ํ• ๋‹น๋Ÿ‰์ด ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


[ํŽธ์ง‘ํ•˜๋‹ค]
3.9๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ๊ฑฐ๊ธฐ์—์„œ ํž™ ํ• ๋‹น ํƒ€์ž„๋ผ์ธ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ์ ์„ ๋ฐœ๊ฒฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

@matthew-dean
ํžŒํŠธ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

3.11์—์„œ RuleSet์— ๋Œ€ํ•ด ๋‚˜์—ด๋œ ๋ณด์œ ์ž ์ค‘ ํ•˜๋‚˜๋Š” ImportManager์ž…๋‹ˆ๋‹ค.
3.9์—์„œ๋Š” _๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค_.

๋ชจ๋“  ๊ฒƒ์ด ImportManager์— ์˜ํ•ด ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€๋˜๊ณ  ImportManager๋Š” ์ „์ฒด ์ปดํŒŒ์ผ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹จ์ผ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค. ์Œ... ๋„ค; ์•„๋ฌด ๊ฒƒ๋„ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๋  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ํฌ๊ฒŒ ๋ถ€ํ’€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘๊ฐ„ ๊ทœ์น™ ์ง‘ํ•ฉ๋„ ์•„๋‹™๋‹ˆ๋‹ค.

@rjgotten ํ ....... ๊ฐ์ฒด์— ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ GC๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ธฐ์ˆ ์ ์œผ๋กœ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ ํ†ตํ•ด ๊ณต๊ฐœ API ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ทœ์น™ ์ง‘ํ•ฉ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ผ๋ถ€ ๊ฐœ์ฒด๊ฐ€ ๊ทธ ๋ฐ˜๋Œ€์ธ ๊ฒฝ์šฐ์—๋งŒ GC๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ž˜๋ชป ์ดํ•ดํ•˜์‹  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

"A๊ฐ€ B์˜ ๋ณด์œ ์ž"์ธ ๊ฒฝ์šฐ A๊ฐ€ B์˜ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ๋ฐฉ์ง€ํ•˜๋Š” B์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ImportManager๋ฅผ ์ž‘์„ฑํ–ˆ์„ ๋•Œ ๊ทœ์น™ ์„ธํŠธ์˜ ๋ณด์œ ์ž๋กœ ๋‚˜์—ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฒฐ๋ก ์„ ์ •ํ™•ํžˆ ํ‘œํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ImportManager๋Š” ๊ทœ์น™ ์„ธํŠธ ์ธ์Šคํ„ด์Šค์˜ GC๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๊ทœ์น™ ์„ธํŠธ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค.

@rjgotten ์•„

์ข‹์•„์š”, ์ด ๊ธ‰์ง„์ ์ธ ์•„์ด๋””์–ด๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ES6 ๋ณ€ํ™˜์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ฒด๋ฆฌ ํ”ผํ‚น์œผ๋กœ ๋ถ„๊ธฐ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์•˜๊ณ  ๋ชจ๋“  ์ž‘์—…์„ ํ•ต์œผ๋กœ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Babelified/Typescript'd ํŒŒ์ผ์ด ๊ธฐ์กด ๊ธฐ๋ณธ JS๋ฅผ ๋Šฅ๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๊ฐ€์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ git ๊ธฐ๋ก์„ ์–ด๋–ป๊ฒŒ ์กฐ์ •ํ•˜๊ฒŒ ๋ ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์—ฌ๊ธฐ์— ๋ถ„๊ธฐ -> https://github.com/less/less.js/tree/release_v3.12.0-RC1์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ „ํ™˜์„ Nukingํ•˜๋Š” ๊ฒƒ์€ ํฐ ๋ฌธ์ œ์ด๋ฏ€๋กœ ์ด ๋ถ„๊ธฐ๊ฐ€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์‹คํ•œ ๋ฒค์น˜๋งˆํ‚น์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๋ณ€ํ™”๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ฑฐ๊ธฐ์— ๋“ค์–ด๊ฐ”๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํƒ“ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ฑฐ๋‚˜ ES6 ๋ฆฌํŒฉํ„ฐ์— ๋Œ€ํ•ด ๋ญ”๊ฐ€๊ฐ€ ์žˆ์–ด์„œ ๊ทธ๋ ‡๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ž˜, ๊ทธ๊ฑด ํ™•์‹คํžˆ ํ•  ์ˆ˜ ์žˆ์–ด! ์กฐ์‚ฌํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ํ™•์‹คํžˆ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ•ด๋…ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ImportManager๋Š” ES6 ๋ณ€ํ™˜์— ์˜ํ•ด ์ถ”๊ฐ€๋œ ๊ธ€๋ฃจ์ฝ”๋“œ/ํด๋ฆฌํ•„์„ ํ†ตํ•ด ๋ฃฐ์…‹์— ๋Œ€ํ•œ ๋ณด์œ ์ž๋กœ ๋๋‚˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ค‘๊ฐ„์— ๋๋‚˜๋Š” ์†”๋ฃจ์…˜์ด ์—ฌ๊ธฐ์— ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, Node.js์šฉ ES6 ๋นŒ๋“œ๋ฅผ ์œ ์ง€ํ•˜์ง€๋งŒ ๋ณ€ํ™˜๋œ ๋ธŒ๋ผ์šฐ์ € ๋Œ€์ƒ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ES6 ๋ณ€ํ™˜์ด ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ ๋ช…๋ฃŒ์„ฑ์„ ์—†์• ๋Š” ๊ฒƒ์€ ์—„์ฒญ๋‚œ ์†์‹ค์ž…๋‹ˆ๋‹ค. ๐Ÿ˜ข

@rjgotten

ES6 ๋ณ€ํ™˜์ด ์ถ”๊ฐ€ํ•˜๋Š” ์ฝ”๋“œ ๋ช…๋ฃŒ์„ฑ์„ ์—†์• ๋Š” ๊ฒƒ์€ ์—„์ฒญ๋‚œ ์†์‹ค์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์ด์œ ๋กœ ์ƒ๊ฐ๋ณด๋‹ค ๋‚˜์˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋กค์—… ๊ตฌ์„ฑ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์กด์žฌํ•˜๋ฉฐ ๋ˆ„๊ตฐ๊ฐ€ ์กฐ์‚ฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ปค๋ฐ‹์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ €๋Š” ํ•œ๋™์•ˆ TypeScript ๊ธฐ๋ฐ˜์˜ Less 4.0์— ๋Œ€ํ•ด ์ ๊ทน์ ์œผ๋กœ ์ž‘์—…ํ•ด ์™”์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ์„ฑ๋Šฅ ํšŒ๊ท€๋ฅผ ์ถ”์ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ทธ๊ฒƒ์— ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ดˆ์ ์ธ ๋ฆฌํŒฉํ„ฐ๋ง์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๊นŒ์šด ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ TS์˜ ํŠน์„ฑ์ƒ ์ฐธ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ณ  GC๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์ด๋Ÿฌํ•œ ์ผํšŒ์„ฑ ๊ฐœ์ฒด ๋Œ์—ฐ๋ณ€์ด๊ฐ€ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ฝ”๋“œ๋Š” ๋”ฐ๋ผ์•ผ ํ•  ๊ฒƒ์ด ํ›จ์”ฌ ๋” ๋ช…ํ™•ํ•ด์กŒ์Šต๋‹ˆ๋‹ค . ๊ทธ๋ž˜์„œ ๊ฑฐ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ฒƒ์„ ES5๋กœ ๋กค๋ฐฑํ•˜๋Š” ๊ฒƒ์€ _๋น„ํŠธ_ ํž˜๋“  ์ผ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์žฌ์ž‘์„ฑ์ด ์ง„ํ–‰ ์ค‘์ด๋ผ๋Š” ์ ์„ ๊ฐ์•ˆํ•˜๋ฉด ์ดํ•ดํ•  ๋งŒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์šฐ๋ฆฌ๋Š” ์ด ๊ฒฐ์ •์„ ๊ฐ€์ง€๊ณ  ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ์‚ด์•„์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @rjgotten์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์šฐ๋ฆฌ๋Š” ๋งŽ์€ ์ฝ”๋“œ ๋ช…ํ™•์„ฑ์„

์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•  ์˜ํ–ฅ์ด ์žˆ๋Š” ๊ฒฝํ—˜์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋„์›€์ด ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒค์น˜๋งˆํ‚นํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ๊ณณ์„ ์ขํžˆ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋“œ๋ฆด ์˜ํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@matthew-dean, ์ฐธ๊ณ ๋กœ Babel์„ ๋Š์Šจํ•œ ๋ชจ๋“œ์—์„œ ์ปดํŒŒ์ผํ•˜์—ฌ ๋” ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์…จ์Šต๋‹ˆ๊นŒ?

@seanCodes ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ Rollup/Typescript์˜ ์ถœ๋ ฅ์ด ์–ด๋–ป๊ฒŒ/์™œ ๋” ๋‚˜๋น ์ง€๊ณ  ์ด๋Ÿฌํ•œ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š”์ง€ ์กฐ์‚ฌํ•  ์‹œ๊ฐ„์ด ์žˆ๋‹ค๋ฉด ํ•ต ์˜ต์…˜์„ ์„ ํƒํ•˜์ง€ ์•Š์€ ๊ฒƒ์— ๋Œ€ํ•ด ๋ชจ๋‘

๋‚ด๊ฐ€ ๊ฐ€์ง„ ํ•œ ๊ฐ€์ง€ ์ถ”์ธก์€ ์ผ๋ถ€ ๋ถ„ํ•ด ๋…ผ๋ฆฌ์—๋Š” ๋งŽ์€ ๊ฐœ์ฒด ์ƒ์„ฑ ์ƒ์šฉ๊ตฌ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ์†Œ์œ ํ•˜๊ธฐ ์œ„ํ•ด ์ž์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@matthew-dean, ์ฐธ๊ณ ๋กœ Babel์„ ๋Š์Šจํ•œ ๋ชจ๋“œ์—์„œ ์ปดํŒŒ์ผํ•˜์—ฌ ๋” ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์…จ์Šต๋‹ˆ๊นŒ?

@seanCodes ์ด ์ฝ”๋“œ๋Š” Babel์ด ์•„๋‹Œ TypeScript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ๋‚ด ์ƒ๊ฐ์€ JSDoc ์œ ํ˜•์„ ์ ์ง„์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ๋” ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์ง€๋งŒ v4์˜ TS๋Š” ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ˆ„๊ตฐ๊ฐ€ Babel v. TypeScript(๋ฐ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์„ค์ •)๋ฅผ ์‹คํ—˜ํ•˜์—ฌ Babel์ด ๋” ์„ฑ๋Šฅ์ด ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ์— Node.js์šฉ ๋น„ ES5 ๋นŒ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋งค์šฐ ์ฃผ์˜ ํ•˜์‹ญ์‹œ์˜ค .

@seanCodes ๋˜ํ•œ ์„ฑ๋Šฅ ์ฐจ์ด๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์—ฌ์ „ํžˆ ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์˜ ์ฐจ์ด๋ฅผ ํ™•์‹คํžˆ ์ฆ๋ช…ํ•˜๊ธฐ ์œ„ํ•œ PR/๋‹จ๊ณ„๋ฅผ ์ƒ์„ฑํ•œ ์‚ฌ๋žŒ์€ ์•„๋ฌด๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์—๋Š” ๋งŽ์€ ์ผํ™”๊ฐ€ ์žˆ์ง€๋งŒ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋‚˜ ๋‹จ๊ณ„๊ฐ€ ์—†์œผ๋ฉด ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์„ ์กฐ์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ(Chrome ๋””๋ฒ„๊ฑฐ ๋˜๋Š” ๊ธฐํƒ€๋ฅผ ํ†ตํ•ด)๋ฅผ ์‹œ์ž‘ํ•˜์—ฌ ์‹œ์Šคํ…œ์— ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•˜๋Š” PR์ด ์žˆ๊ณ  ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ํ‰๊ท ์„ ๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์€ ์ง€๊ธˆ๊นŒ์ง€ 100% ์žฌํ˜„ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ˆ„๊ตฌ๋‚˜ ๋ณต์ œ ๋‹จ๊ณ„๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ, ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๊ทธ ํ† ๋ผ๊ตด๋กœ ๊ฐ€๊ณ  ์‹ถ์ง€ ์•Š์€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (์ฆ‰, "Chrome ๋””๋ฒ„๊ฑฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ํ”ผ๋“œ๋ฐฑ์€ ์ผ๋ จ์˜ ์žฌํ˜„ ๋‹จ๊ณ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์•Œ์•„๋‘๋ฉด ์œ ์šฉํ•˜์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€ ์กฐ์‚ฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ฌด์—‡์„ ์ถ”์ ํ•˜๋Š”์ง€, ์™œ/์–ด๋–ค ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ƒ๋˜๋Š”.)

๋”ฐ๋ผ์„œ ์‚ฌ๋žŒ๋“ค์ด ํ˜„์žฌ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Less ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ ค๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ์†Œ์œ ํ•˜๋Š” ๋ฐ ์—ฌ๋Ÿฌ ์ž์› ๋ด‰์‚ฌ์ž์™€ ํ•œ ์‚ฌ๋žŒ์ด ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ _speed_์—์„œ์™€ ๊ฐ™์€ ์„ฑ๋Šฅ ์ฐจ์ด๋ฅผ ๋งŽ์ด ๋ณด์ง€ ๋ชปํ–ˆ์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„์˜ ์ฐจ์ด๋Š” ๋†€๋ž๊ณ  ๊ฐ€์ ธ์˜ค๊ธฐ์˜ ์–‘๊ณผ ์ƒ๊ด€ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด ํ”ผ์ƒ์ ์ธ ํž™ ๋ถ„์„๋„ ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋งž๋‹ค๋ฉด, ~๋‹น์‹ ~์€ ์ฐจ์ด์ ์„ ๋ณด๊ธฐ ์œ„ํ•ด ๊ฐ๊ฐ์— ์ผ๋ถ€ ๊ทœ์น™ ์„ธํŠธ๊ฐ€ ํฌํ•จ๋œ ๋งŽ์€ ๊ฐ€์ ธ์˜จ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•จ๊ป˜ ์ค€๋น„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@rjgotten

๊ทธ๊ฒƒ์ด ๋งž๋‹ค๋ฉด, ๊ฐ๊ฐ ์•ฝ๊ฐ„์˜ ๊ทœ์น™ ์„ธํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๋งŽ์€ ๊ฐ€์ ธ์˜จ ํŒŒ์ผ๋กœ ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•จ๊ป˜ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ ์ฐจ์ด์ ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"๋‹น์‹ "์€ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๐Ÿ˜‰

"๋‹น์‹ "์€ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๐Ÿ˜‰

๋ถˆํ–‰ํ•œ ๋‹จ์–ด ์„ ํƒ. ์ œ ๋ง์€ ์ผ๋ฐ˜์ ์ธ ์˜๋ฏธ์—์„œ - ์ฆ‰ "๋ˆ„๊ตฌ๋‚˜"์ž…๋‹ˆ๋‹ค.
๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค๊ณ  ์‹ถ์ง€๋งŒ ํ˜„์žฌ ๋„ˆ๋ฌด ๋งŽ์€ ํŒ์ด ํšŒ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@rjgotten "๋งŽ์€ ์ˆ˜์˜ ๊ฐ€์ ธ์˜จ ํŒŒ์ผ"์ด ๋ฌด์—‡์ธ์ง€ ๋” ์ž˜ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? 100๊ฐœ์˜ ๊ฐœ๋ณ„ ํŒŒ์ผ์ด ์ด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด 1000๊ฐœ๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋˜ํ•œ ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜์Œ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ๋ณด๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๊ธฐ๊ณ„๊ฐ€ ๋Š๋ ค์ง€๋Š” ๊ฒƒ์„ ๋ˆˆ์น˜์ฑ„์…จ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์„ ์•„์ง ๋ณต์ œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ถ”์ธกํ•˜๊ณ  ํ™•์ธํ•˜๋Š” ๊ฒƒ์— ์˜์กดํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์ฐพ์•„์•ผ ํ•˜๋Š”์ง€ ๋ฐฐ์šฐ๊ธฐ๋ฅผ ์—ฌ์ „ํžˆ ํฌ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

100๊ฐœ ์ •๋„๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‚ด๊ฐ€ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•œ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์˜ ํฌ๊ธฐ์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

ํšŒ์‚ฌ CI ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ์ฒ˜์Œ์œผ๋กœ ์•Œ์•„์ฐจ๋ ธ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์ด ๊ตฌ์„ฑ๋œ Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

@rjgotten 3.11.3์—์„œ ์—ฌ์ „ํžˆ ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด์ „ ๋ฆด๋ฆฌ์Šค์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ๋‚ด์—์„œ AST์˜ ๋ชจ๋“  ์บ์‹ฑ(์ฐธ์กฐ)์„ ์ œ๊ฑฐํ–ˆ์œผ๋ฏ€๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ๋ณด๋ฅ˜ ์ค‘์ด๊ณ  ๊ทธ ์•ˆ์— AST ํŠธ๋ฆฌ๊ฐ€ ์œ ์ง€๋˜๊ณ  ์žˆ์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜์ง€๋งŒ ์œ ์ง€์—์„œ ํŠธ๋ฆฌ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๊ทธ๊ฒŒ ํ•ด๊ฒฐ์ด ๋˜๋‚˜์š”?

@matthew-dean ์˜ˆ, ๋ฌธ์ œ๋Š” 3.11.3์—๋„ ์—ฌ์ „ํžˆ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐœ๋… ์ฆ๋ช…์„ ๋งŒ๋“ค๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ด์ง€๋งŒ ๋‚ด ์ ‘์‹œ์— ๋งŽ์€ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ข€ ๋” ์ƒ๊ธฐ๋ฉด ํ•  ์ผ ๋ชฉ๋ก์— ๋„ฃ์–ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

@matthew-dean ์ด์ „์— ์‹คํŒจํ–ˆ๋˜ ๋น„๊ต์  ํฐ ํ”„๋กœ์ ํŠธ์—์„œ ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? https://github.com/less/less.js/tree/release_v3.12.0-RC1 ์ด ๋ถ„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@nfq ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด ์Šค๋ ˆ๋“œ์˜ ์ผ๋ฐ˜์ ์ธ ์ง€ํ˜œ๋Š” ํ•ด๋‹น ๋ถ„๊ธฐ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ES6 ๋ณ€ํ™˜์„ ํญํŒŒํ•˜์ง€ ์•Š๊ณ  ๋Œ€์‹  ๋ฌธ์ œ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ง„๋‹จํ•˜๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์–ป๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ง๋ถ™์—ฌ์„œ, ๋‚˜๋Š” ์˜๊ตฌ ๊ฐ์ฒด๋ฅผ ์ฐพ์œผ๋ ค๊ณ  ์ปดํŒŒ์ผํ•˜๋Š” ๋™์•ˆ less ๊ฐ์ฒด๋ฅผ ๊ฒ€์‚ฌํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿคทโ€โ™‚๏ธ

์„ฑ๋Šฅ ๋ฌธ์ œ๋„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ์˜ ๊ฒฝ์šฐ:

| ๋ฒ„์ „ | ์‹œ๊ฐ„ |
| -- | -- |
| v3.9.0 | ~1.6์ดˆ |
| v3.10.0~v3.11.1 | ~3.6์ดˆ |
| v3.11.2+ | ~12์ดˆ |

์—ฌ๊ธฐ์„œ ๋…ผ์˜๋œ 3.9.0 โ†’ 3.10.0 ์™ธ์—๋„ v3.11.2 ์—์„œ ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ๋กœ๊ทธ์˜ ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์˜์‹ฌ์Šค๋Ÿฌ์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

3498 ๊ฐ€์ ธ์˜ค๊ธฐ ๊ด€๋ฆฌ์ž์—์„œ ํŠธ๋ฆฌ ์บ์‹ฑ ์ œ๊ฑฐ(#3498)

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

๋™์ผํ•œ ๋นŒ๋“œ์— ๋Œ€ํ•œ ํƒ€์ด๋ฐ(๋ชจ๋‘ ๋…ธ๋“œ 10.19.0์—์„œ):

  • v3.9: 29.9์ดˆ
  • v3.10: 76.0์ดˆ
  • v3.12: 89.3์ดˆ

@jrnail23

๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” repo๊ฐ€ โ€‹โ€‹์žˆ์Šต๋‹ˆ๊นŒ?

@matthew-dean https://github.com/less/less.js/issues/3434#issuecomment -672580467: https://github.com/ecomfe/dls-tooling/tree/master/packages/ less-plugin-dls (Less ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํฌํ•จํ•˜๋Š” ๋ชจ๋…ธ๋ ˆํฌ์ž…๋‹ˆ๋‹ค.)

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค, @matthew-dean, ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋Š” ๋‚ด ๊ณ ์šฉ์ฃผ์˜ ์ œํ’ˆ์—์„œ ๋‚˜์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ ๊ฒฐ๊ณผ๋Š” ๋‚ด ๊ณ ์šฉ์ฃผ์˜ ์ œํ’ˆ์—์„œ ๋‚˜์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ™์€ ์ด์œ ๋กœ ํŒŒ์ผ์„ ์ œ๊ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ž

@rjgotten @jrnail23 @Justineo - ๊ถ๊ธˆํ•œ๋ฐ, ๊ฐ™์€ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๊นŒ?

์ œ ๊ฒฝ์šฐ ์—๋Š” @import ๋ฌธ ์„

@matthew-dean, ์ผ๋ฐ˜์ ์ธ ๊ฒƒ๋“ค(์˜ˆ: ์ƒ‰์ƒ ๋ณ€์ˆ˜, ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ๋“ฑ)์„ ๊ฐ€์ ธ์˜ค๋Š” base.less ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ ์•ฑ์„ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด base.less ์ฐธ์กฐ(์˜ˆ: <strong i="8">@import</strong> (reference) "../../../less/base.less"; )๊ฐ€ 66๊ฐœ์˜ ๋‹ค๋ฅธ ๊ตฌ์„ฑ์š”์†Œ/๊ธฐ๋Šฅ๋ณ„ less ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  ์ด๋Ÿฌํ•œ ํŒŒ์ผ ์ค‘ ์ผ๋ถ€๋Š” ๋˜ํ•œ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ/๊ธฐ๋Šฅ๋ณ„ ๋œ ํŒŒ์ผ(์ž์ฒด์ ์œผ๋กœ base.less ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Œ)์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
ํฅ๋ฏธ๋กญ๊ฒŒ๋„ (์•„๋งˆ๋„ ์‹ค์ˆ˜๋กœ?) ์ฐธ์กฐ๋กœ ์ž์‹ ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋˜ ๋‹ค๋ฅธ less ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@rjgotten @jrnail23 @Justineo - ๊ถ๊ธˆํ•œ๋ฐ, ๊ฐ™์€ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๊นŒ?

์ €์—๊ฒŒ๋Š” '์˜ˆ'์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ•œ ํ”„๋กœ์ ํŠธ๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ํŒŒ์ผ์— ํฌํ•จ๋œ ์ค‘์•™ ์ง‘์ค‘์‹ ๋ณ€์ˆ˜ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ์Šคํ‚จ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, ์šฐ๋ฆฌ๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ์œ ํ˜•์˜ ๋ฒ„ํŠผ, ๊ธ€๊ผด ์•„์ด์ฝ˜ ๋“ฑ์„ ์ƒ์‚ฐํ•˜๋Š” ๋ฏน์Šค์ธ ํŒฉํ† ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ตฌ์„ฑ ์š”์†Œ ๊ธฐ๋ฐ˜ ๋””์ž์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ทธ ์ผ๋ถ€๋„ ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์›๋ž˜; ๋ชจ๋“  ์ข…์† ํ•ญ๋ชฉ์€ ์ข…์† ํ•ญ๋ชฉ์„ ์—„๊ฒฉํ•˜๊ฒŒ ๊ฐ€์ ธ์˜ค๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉฐ Less ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜์กดํ•˜์—ฌ ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ์ˆœ์„œ๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ์ง€์ •ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ CSS ์ถœ๋ ฅ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

@rjgotten

๊ธ€์„ ์˜ฌ๋ ธ๋‹ค๊ฐ€ ์ง€์› ๋Š”๋ฐ(์•Œ์•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ณต์ œํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์—), ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ ์‚ฌ๋žŒ๋“ค์ด ๋ณด๊ณ ํ•˜๋Š” ๋‚ด์šฉ์„ ์žฌํ˜„ํ•  ๋‹จ๊ณ„๊ฐ€ ์•„์ง ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•œ ๊ฒƒ์กฐ์ฐจ๋„:

3.11์—์„œ RuleSet์— ๋Œ€ํ•ด ๋‚˜์—ด๋œ ๋ณด์œ ์ž ์ค‘ ํ•˜๋‚˜๋Š” ImportManager์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์ฆ๊ฑฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์ง€๋งŒ ์–ด๋–ป๊ฒŒ ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Chrome DevTools์— ์ต์ˆ™ํ•˜์ง€ ์•Š์•„ ๋ฌด์—‡์— ์˜ํ•ด ์œ ์ง€๋˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์œผ๋ฉฐ Google์ด ๋‚˜๋ฅผ ๋•์ง€ ์•Š์€ ๋ชจํ˜ธํ•œ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ๋žŒ๋“ค์ด ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๊นŒ? ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๊ณ  ์ค‘๋‹จ์ ์„ ์„ค์ •ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋‹จ๊ณ„๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์š”์ปจ๋Œ€, ์ด ๋ฌธ์ œ๊ฐ€ ์‹œ์ž‘๋œ ํ•ด์— ์–ด๋–ค โ€‹โ€‹๋ณด๊ณ ์„œ๋„ ์žฌํ˜„ํ•  ๋‹จ๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ๋ชจ๋“  ์ผํ™”๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๊ฐ€ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ, ๋‹น์‹ ์ด ๋ฐœ๊ฒฌํ•œ ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •ํ–ˆ๋‚˜์š”? ์•„๋‹ˆ๋ฉด ์ด๊ฒƒ์„ ๋ณด์—ฌ ์ค„ ์„ค์ •์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ๊ณ  ์‹ถ์ง€๋งŒ ์žฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@Justineo ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋‚˜ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋‹จ๊ณ„๋ฅผ

@Justineo ์บ์‹œ ์ œ๊ฑฐ(์•„๋งˆ๋„ ๋‚˜์œ ์ƒ๊ฐ์ผ ์ˆ˜ ์žˆ์Œ)๋ฅผ ์ง€์  https://github.com/less/less.js/tree/cache-restored

์˜ค๋Š˜์˜ ์‹คํ—˜/ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด:

๊ทธ๋ŸฐํŠธ์˜ shell:test ๋ฒˆ

  • 3.9 - 1.8์ดˆ ๋ฏธ๋งŒ
  • 3.12 ๋ฏธ๋งŒ(Babel์„ ES5๋กœ ๋ณ€ํ™˜) -- 9.2s
  • 3.12 ๋ฏธ๋งŒ(Babel์„ ES6์œผ๋กœ ๋ณ€ํ™˜) -- 3.1s
  • 3.12 ์ดํ•˜(TypeScript๋ฅผ ES5๋กœ ๋ณ€ํ™˜) -- 3.2s

๊ทธ๋ž˜์„œ ๊ธธ๊ณ  ์งง์€ ๊ฒƒ์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋œ ์ฝ”๋“œ๊ฐ€ ํ•ญ์ƒ ๋Š๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ์ˆœ์ง„ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์„ธ๊ณ„์—์„œ ํŠธ๋žœ์Šคํ•„๋ ˆ์ด์…˜์ด ์ด์ œ "ํ‘œ์ค€"์ด๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ๋†€๋ž์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋’ท๋ฐ›์นจํ•˜๋Š” ๋‹ค๋ฅธ ์—ฐ๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@Justineo ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋‚˜ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋‹จ๊ณ„๋ฅผ

npm run test ๋Š” ๊ฒฝ๊ณผ๋œ ์ด ์‹œ๊ฐ„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” 3.12๋กœ ์ „ํ™˜ํ•  ๋•Œ OOM์„ ๊ฒฝํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

TypeScript ์ƒ์„ฑ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var node_1 = tslib_1.__importDefault(require("./node"));
var variable_1 = tslib_1.__importDefault(require("./variable"));
var property_1 = tslib_1.__importDefault(require("./property"));
var Quoted = /** <strong i="6">@class</strong> */ (function (_super) {
    tslib_1.__extends(Quoted, _super);
    function Quoted(str, content, escaped, index, currentFileInfo) {
        var _this = _super.call(this) || this;
        _this.escaped = (escaped == null) ? true : escaped;
        _this.value = content || '';
        _this.quote = str.charAt(0);
        _this._index = index;
        _this._fileInfo = currentFileInfo;
        _this.variableRegex = /@\{([\w-]+)\}/g;
        _this.propRegex = /\$\{([\w-]+)\}/g;
        _this.allowRoot = escaped;
        return _this;
    }

๋Œ€:

var Node = require('./node'),
    Variable = require('./variable'),
    Property = require('./property');

var Quoted = function (str, content, escaped, index, currentFileInfo) {
    this.escaped = (escaped == null) ? true : escaped;
    this.value = content || '';
    this.quote = str.charAt(0);
    this._index = index;
    this._fileInfo = currentFileInfo;
    this.variableRegex = /@\{([\w-]+)\}/g;
    this.propRegex = /\$\{([\w-]+)\}/g;
};

๊ทธ๋ž˜์„œ ๋‚ด ์ƒ๊ฐ์— ๋ชจ๋“  ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์ •์˜์™€ ํ˜ธ์ถœ์€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํ•ฉ์‚ฐ๋ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์ด ๋ถ‰์€ ์ฒญ์–ด๊ฐ€ ์•„๋‹Œ ํ•œ, ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ํŠธ๋žœ์Šคํ•„์„ ์ œ์™ธํ•˜๊ณ  ์ด๊ฒƒ์„ ๋ฌด์—‡์œผ๋กœ ๊ท€์†์‹œ์ผœ์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์€ TS๊ฐ€ ์›๋ณธ์— ๋” ๊ฐ€๊นŒ์šด ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ:

3.9 ํ…Œ์ŠคํŠธ๋ฅผ 3.12์— ์žˆ๋Š” ๊ฒƒ๊ณผ ๋™๋“ฑํ•˜๊ฒŒ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ณธ์งˆ์ ์œผ๋กœ 1.2 ๋Œ€ 1.3์ด ๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ฐจ์ด์— ๋Œ€ํ•ด ๋” ์ด์ƒ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ๋™์ผํ•œ ์ ์€ ์ˆ˜์˜ ํŒŒ์ผ์— ๋Œ€ํ•ด ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Justineo @rjgotten ์ข€ ๋” ํšจ์œจ์ ์ธ ๋นŒ๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ TypeScript ์กฐ์ •์„ ํ‘ธ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ถ„๊ธฐ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? https://github.com/less/less.js/tree/cache-restored

@matthew-dean ๐Ÿ‘ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์˜ค๋Š˜ ๋‚˜์ค‘์— ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

cache-restored ๋ถ„๊ธฐ๋ฅผ ํ…Œ์ŠคํŠธํ–ˆ๋Š”๋ฐ v.3.1.0~3.11.1๊ณผ ๊ฑฐ์˜ ๊ฐ™์€ ์†๋„๋กœ v3.11.2+๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.

@์ €์Šคํ‹ฐ๋„ค์˜ค

์บ์‹œ ๋ณต์› ๋ถ„๊ธฐ๋ฅผ ํ…Œ์ŠคํŠธํ–ˆ๋Š”๋ฐ v.3.1.0~3.11.1๊ณผ ๊ฑฐ์˜ ๋™์ผํ•œ ์†๋„๋กœ v3.11.2+๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๊ทธ๊ฒƒ์€ ์œ ๋งํ•˜๋‹ค. @rjgotten @jrnail23 ๋ฐ ์ด ์Šค๋ ˆ๋“œ์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋กœ๋ถ€ํ„ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋„๋ก ํ•ฉ์‹œ๋‹ค. ํ•ด๋‹น ์บ์‹œ ์ œ๊ฑฐ๋Š” ์ด ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฒŒ์‹œ๋œ ํ›„์˜€์Šต๋‹ˆ๋‹ค(3.11.2). ์‚ฌ์‹ค ๊ทธ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ์˜ ์ผ๋ถ€๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋Š” ์‹œ๋„์˜€์ง€๋งŒ ๋™์ผํ•œ ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ ์ƒํ™ฉ์„ ๋” ์•…ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์›๋ž˜ ๋ฌธ์ œ๋‚˜ ๊ทธ ์›์ธ(์ฝ”๋“œ ๋ณ€ํ™˜์—์„œ ๋ฐœ์ƒํ•œ ์–ด๋–ค ๊ฒƒ์€ ์ œ์™ธ)์— ๋Œ€ํ•ด ํ™•์‹ ํ•˜์ง€ ๋ชปํ•˜๋ฉฐ ์ด ๋ถ„๊ธฐ์— ์—ฌ์ „ํžˆ ๊ทธ๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ์ง€๋งŒ ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด , ๋ช…ํ™•ํ•œ ์žฌํ˜„ ๋‹จ๊ณ„๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@matthew-dean, cache-restored ๋ถ„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค( npm link ๊ฐ€ ์‹คํŒจํ•˜๋ฏ€๋กœ ๋กœ์ปฌ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜).
๋‚ด๊ฐ€ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋Š” ์นด๋‚˜๋ฆฌ์•„/์‹œํ—˜ํŒ ๋ฒ„์ „์„ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@jrnail23

๋‚˜๋Š” ์ด๊ฒƒ์ด ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. Less๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  npm i [email protected]+84d40222 ์„ค์น˜ํ•ด ๋ณด์„ธ์š”.

@matthew-dean, ๋ฐฉ๊ธˆ ๊ทธ ๋ฒ„์ „์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋‚˜์—๊ฒŒ ๋‚˜์ฉ๋‹ˆ๋‹ค.
์ƒˆ๋กœ์šด ์›นํŒฉ ๋นŒ๋“œ(์บ์‹ฑ ์—†์Œ)์˜ ๊ฒฝ์šฐ v3.9์˜ ๊ฒฝ์šฐ 62.4์ดˆ๊ฐ€ ์†Œ์š”๋˜์ง€๋งŒ v3.13.1์˜ ๊ฒฝ์šฐ 121์ดˆ๊ฐ€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.
์บ์‹œ๋œ ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ v3.9๋Š” 30์ดˆ, v3.13.1์€ 83-87์ดˆ๊ฐ€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

@jrnail23 ๋ชจ๋“  ๋…ธ๋“œ ๋ชจ๋“ˆ์„ ์ œ๊ฑฐํ•˜๊ณ  [email protected]+b2049010 ์„ค์น˜๋ฅผ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

3.9 ๋ฏธ๋งŒ ๋ฒค์น˜๋งˆํฌ:
Screen Shot 2020-12-05 at 2 36 09 PM

4.0.1-alpha.0 ๋ฏธ๋งŒ:
Screen Shot 2020-12-05 at 1 12 26 PM

4.0.1-alpha.2 ๋ฏธ๋งŒ:
Screen Shot 2020-12-05 at 2 35 20 PM

@Justineo @rjgotten ์ด๊ฒƒ๋„ ํ•ด๋ณด ์‹œ๊ฒ ์–ด์š” ?

@jrnail23 @Justineo @rjgotten

์ด๊ฒƒ์€ 4.0 ๋นŒ๋“œ์ด๋ฏ€๋กœ ์ฝ”๋“œ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฏน์Šค์ธ ํ˜ธ์ถœ์—๋Š” ๊ด„ํ˜ธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: .mixin; ๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ).
  • Less์˜ ๊ธฐ๋ณธ ์ˆ˜ํ•™ ๋ชจ๋“œ๋Š” ์ด์ œ ๊ด„ํ˜ธ ๋‚˜๋ˆ„๊ธฐ์ด๋ฏ€๋กœ ์Šฌ๋ž˜์‹œ(์ˆ˜ํ•™์œผ๋กœ ์˜๋„๋จ)๋Š” ๊ด„ํ˜ธ ์•ˆ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ง€๊ธˆ์€ ํ›จ์”ฌ ๋” ๋‚™๊ด€์ ์ด์ง€๋งŒ ์ตœ์‹  ๋ฒค์น˜๋งˆํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ด์œ ๋ฅผ ์•„์ง ํŒŒ์•…ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ด ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์ตœ์ข…์ ์œผ๋กœ ๋ฌธ์ œ ๋ฒ”์œ„๋ฅผ ์ขํžŒ ๋ฐฉ๋ฒ•๊ณผ ๋ฐœ๊ฒฌํ•œ ๋‚ด์šฉ์„ ์š”์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ๋ฌธ์ œ๊ฐ€ _์–ด๋””์—์„œ_ ๋ฐœ๊ฒฌ๋˜์—ˆ์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ๊ทธ ์ด์œ ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

https://github.com/less/less.js/issues/3434#issuecomment -672580467๊ณผ ๋™์ผํ•œ ํ…Œ์ŠคํŠธ ๋ชจ์Œ์˜ ๊ฒฐ๊ณผ:

| ๋ฒ„์ „ | ์‹œ๊ฐ„ |
| -- | -- |
| v3.9.0 | ~1.6์ดˆ |
| v3.10.0~v3.11.1 | ~3.6์ดˆ |
| v3.11.2+ | ~12์ดˆ |
| 4.0.1-์•ŒํŒŒ.2+b2049010 | ~1.6์ดˆ |

ํŠน์ • ํ…Œ์ŠคํŠธ ์ œํ’ˆ๊ตฐ์˜ ๊ฒฝ์šฐ ์„ฑ๋Šฅ ์ˆ˜์ค€์ด v3.9.0๋งŒํผ ๋น ๋ฅด๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Matt์—๊ฒŒ ๋งค์šฐ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ์ˆ˜ํ•™ ๋ชจ๋“œ์˜ ์ค‘๋‹จ ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋งŽ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์†์ƒ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋”๋ผ๋„ v3.9.0์—์„œ ๋ฉˆ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@์ €์Šคํ‹ฐ๋„ค์˜ค

์ˆ˜ํ•™ ๋ชจ๋“œ์˜ ์ค‘๋‹จ ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

math=always ๋ชจ๋“œ์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ์ด์ „ ์ˆ˜ํ•™ ๋™์ž‘์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋‹ค๋ฅธ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ ๋ถ„์„

TL;DR - ํด๋ž˜์Šค ํŒจํ„ด์„ ์กฐ์‹ฌํ•˜์‹ญ์‹œ์˜ค

๋ฌธ์ œ๋Š” Babel๊ณผ TypeScript ๋ชจ๋‘์—์„œ ํด๋ž˜์Šค๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. (์ฆ‰, ๋‘˜ ๋‹ค ํŠธ๋žœ์ŠคํŒŒ์ผ๋œ ์ฝ”๋“œ์—์„œ ๋™์ผํ•œ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  Babel์€ ์•ฝ๊ฐ„ ๋” ๋‚˜๋นด์Šต๋‹ˆ๋‹ค.) ์ด์ œ, ๋ช‡ ๋…„ ์ „ ํด๋ž˜์Šค ํŒจํ„ด์ด ๋„์ž…๋˜์—ˆ์„ ๋•Œ ์ €๋Š” ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. JavaScript์˜ ์ƒ์†์€ ๊ธฐ๋Šฅ ์ƒ์†์„ ์œ„ํ•œ ๊ตฌ๋ฌธ ์„คํƒ•์ž…๋‹ˆ๋‹ค.

์š”์ปจ๋Œ€ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. _(ํŽธ์ง‘: ๊ธ€์Ž„์š”.... ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ "์ƒ์†"์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ณง ๋ณด๊ฒŒ ๋  ๊ฒƒ์ฒ˜๋Ÿผ ์ •์˜ํ•œ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.... ์ฆ‰, ๋ช‡ ๊ฐ€์ง€ ํŒจํ„ด์ด ์žˆ์Šต๋‹ˆ๋‹ค. JavaScript์˜ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์— "์ƒ์†"์„ ๋งŒ๋“ค๊ณ  ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ํŒจํ„ด๋งŒ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ ํ•ด๋‹น ํŒจํ„ด์€ ๋‹ค๋ฅธ ๋ชจ๋“  ํŒจํ„ด๊ณผ ๋‹ค์†Œ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ˆ˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ํŒจํ„ด์„ "๋ชจ๋ฐฉ"ํ•˜๊ธฐ ์œ„ํ•œ ๋„์šฐ๋ฏธ ์ฝ”๋“œ๊ฐ€ TS/Babel์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.)_

๋” ์ ์€ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

var Node = function() {
  this.foo = 'bar';
}

var Inherited = function() {
  this.value = 1;
}
Inherited.prototype = new Node();

var myNode = new Inherited();

์ด์ œ "ํ˜„๋Œ€" JS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๊ฒƒ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๋‚ด๊ฐ€ ํ–ˆ๋˜ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์–ด๋Š ์ชฝ์ด๋“  ๋™์ผํ•˜๊ฒŒ ์ž‘์„ฑํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

class Node {
  constructor() {
    this.foo = 'bar';
  }
}
class Inherited extends Node {
  constructor() {
    super();
    this.value = 1;
  }
}
var myNode = new Inherited();

๊ฐ™์€ ๊ฑฐ ๋งž์ฃ ? ์‚ฌ์‹ค, ์•„๋‹ˆ. ์ฒซ ๋ฒˆ์งธ๋Š” { value: 1 } ์†์„ฑ์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์—์„œ { foo: 'bar' } ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋ชจ๋‘ ์ƒ์„ฑ์ž ํ˜ธ์ถœํ•˜๋ฏ€๋กœ ๋‘ ๋ฒˆ์งธ๋Š”, Inherited ๋ฐ Node ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ๊ฐœ์ฒด ์ƒ์„ฑํ•œ๋‹ค { value: 1, foo: 'bar' } .

๋‹น์‹ ์ด ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ œ, _user_์˜ ๊ฒฝ์šฐ,์ด ์ •๋ง ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ๋ชจ๋‘ value ๋ฐ foo ์—์„œ myNode ์–ด๋Š ๊ฒฝ์šฐ์ด๋‹ค. _๊ธฐ๋Šฅ์ ์œผ๋กœ_, ๊ทธ๋“ค์€ ๋˜‘๊ฐ™์ด ํ–‰๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๋‚ด๊ฐ€ ์ˆœ์ˆ˜ํ•œ ์ถ”์ธก์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

V8๊ณผ ๊ฐ™์€ JIT ์—”์ง„์— ๋Œ€ํ•œ ๊ธฐ์‚ฌ์—์„œ ๊ธฐ์–ตํ•˜๋Š” ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด ๊ฐ์ฒด ๊ตฌ์กฐ๋Š” ์‹ค์ œ๋กœ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. { value: 1 } , { value: 2 } , { value: 3 } , { value: 4 } ์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด V8์€ ํ•ด๋‹น ๊ตฌ์กฐ์˜ ๋‚ด๋ถ€ ์ •์  ํ‘œํ˜„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌ์กฐ + ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ ์ €์žฅํ•œ ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋ฅผ 3๋ฒˆ ๋” ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ { a: 'a', value: 1 } , { b: 'b', value: 2 } , { c: 'c', value: 3 } , { d: 'd', value: 4 } ์™€ ๊ฐ™์ด ๋งค๋ฒˆ ๋‹ค๋ฅธ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด { a: 'a', value: 1 } ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ์„ธํŠธ๊ฐ€ ์žˆ๋Š” 4๊ฐœ์˜ ๋‹ค๋ฅธ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. , ๋™์ผํ•œ ์›๋ณธ ํด๋ž˜์Šค ์ง‘ํ•ฉ์—์„œ ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. JS ๊ฐ์ฒด์˜ ๋ชจ๋“  ๋Œ์—ฐ๋ณ€์ด๋Š” ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ฅผ ์ตœ์ ํ™”ํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜๋˜๋Š” ํด๋ž˜์Šค ํŒจํ„ด์€ ๋” ๊ณ ์œ ํ•œ ๋Œ์—ฐ๋ณ€์ด๋ฅผ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค(์–ด์ฉŒ๋ฉด). (์†”์งํžˆ ์ด๊ฒƒ์ด ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค ์ง€์›์— ๋Œ€ํ•ด ์‚ฌ์‹ค์ธ์ง€ ์—ฌ๋ถ€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.)

AFAIK, ๋˜ํ•œ ์‚ฌ์‹ค์€ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์†์„ฑ์ด ๋งŽ์„์ˆ˜๋ก ๊ฐœ๋ณ„ ์†์„ฑ ์กฐํšŒ๊ฐ€ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” JS ์—”์ง„์ด ๋„ˆ๋ฌด ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Buuuuut๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ๋งŽ์€ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์†์„ฑ/๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์กฐํšŒํ•˜๋Š” ์—”์ง„์„ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. (Ding ding ding.) ๊ฐ‘์ž๊ธฐ TypeScript/Babel์ด ๊ฐœ์ฒด๋ฅผ "ํ™•์žฅ"ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ํ”„๋กœํ† ํƒ€์ž… ์ƒ์† ๊ฐ„์˜ ์ด๋Ÿฌํ•œ ์ž‘์€ ์ฐจ์ด๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์ด์ „ Less ๊ตฌ๋ฌธ๊ณผ TS๋กœ ๋ณ€ํ™˜๋œ ํด๋ž˜์Šค ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ Node ๋ฐ ์ƒ์† ๊ธฐ๋Šฅ์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ดํŠธ์—์„œ ๋ฐ”๋กœ ์ƒ์†๋œ ๋…ธ๋“œ๋Š” 25% ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ/๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋น„ํ•˜๋ฉฐ ์ด๋Š” ์ƒ์†๋œ ๋…ธ๋“œ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „์ž…๋‹ˆ๋‹ค.

์ด์ œ ์ผ๋ถ€ ๋…ธ๋“œ๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ ์ƒ์†ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํด๋ž˜์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ํ‘œํ˜„์€ ์ƒ์†๋œ ์ธ์Šคํ„ด์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฆ๊ฐ€ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ์—๋„ ์ถ”์ธก์ž…๋‹ˆ๋‹ค

๋‚˜๋Š” ์ด ๋ชจ๋“  ๊ฒƒ์„ ํ•œ ์•Œ์˜ ์†Œ๊ธˆ์œผ๋กœ ๋ฐ›์•„๋“ค์ด๋Š” ๊ฒƒ์„ ๊ฐ•์กฐํ•ด์•ผ ํ•œ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‚˜๋Š” ์ˆ˜์—…์œผ๋กœ์˜ ์ „ํ™˜์ด ์„ฑ๋Šฅ์— ์žˆ์–ด์„œ ์ด๋ ‡๊ฒŒ ๋น„์ฐธํ•œ ๊ฒƒ์„ ๋“ค์–ด๋ณธ ์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‚ด๊ฐ€ _์ƒ๊ฐํ•˜๋Š”_ ์ผ์€ Less๊ฐ€ JIT๋ฅผ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋น„์ตœ์ ํ™”ํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ์ฒด/์ธ์Šคํ„ด์Šค ์กฐํšŒ์˜ ํŠน๋ณ„ํ•œ ์กฐํ•ฉ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. _(์ผ๋ถ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ์ „๋ฌธ๊ฐ€๊ฐ€ ์ด ๊ฒฝ์šฐ์— ์™œ ํŠธ๋žœ์ŠคํŒŒ์ผ๋œ ํด๋ž˜์Šค๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ JS ์ƒ์† ๋ฉ”์„œ๋“œ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋‚˜์œ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.)_ ๋‘ ๋ฉ”์„œ๋“œ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ฒœ ๊ฐœ์˜ ์ƒ์†๋œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์„ฑ๋Šฅ ์ธก์ •์„ ๋งŒ๋“ค๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ผ๊ด€๋œ ์„ฑ๋Šฅ ์ฐจ์ด๋ฅผ ๋ณผ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํด๋ž˜์Šค๋Š” ๋‚˜์˜๋‹ค"๋ผ๋Š” ๋ง์„ ํ•˜๊ธฐ ์ „์— ํŠธ๋žœ์ŠคํŒŒ์ผ๋œ ํด๋ž˜์Šค์™€ ๋„ค์ดํ‹ฐ๋ธŒ JS์˜ ์ฐจ์ด ์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•œ Less ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๋‹ค๋ฅธ ์ •๋ง ๋ถˆํ–‰ํ•œ ํŒจํ„ด์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งˆ์นจ๋‚ด ๊ทธ๊ฒƒ์„ ์•Œ์•„ ๋‚ธ ๋ฐฉ๋ฒ•

์†”์งํžˆ ์ €๋Š” ์ˆ˜์—… ํŒจํ„ด์„ ์˜์‹ฌํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์›๋ž˜ ES5 ์ฝ”๋“œ๊ฐ€ ์—ญ-Babelified ์ฝ”๋“œ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ํ™”์‚ดํ‘œ ๊ธฐ๋Šฅ์ด๋‚˜ ์–ด๋”˜๊ฐ€์— ๊ตฌ๋ฌธ์„ ํผ๋œจ๋ฆฌ๋Š” ๋ถ€๋ถ„์ด ์˜์‹ฌ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค. ๋‚œ ์•„์ง๋„ ์‹คํ–‰ํ•˜๊ธฐ๋กœ ๊ฒฐ์ • ์ผ์ผ ์žˆ๋„๋ก ์ตœ์‹ ์˜ ES5 ์ง€์ ํ–ˆ๋‹ค lebab ๋‹ค์‹œ๋ฅผ, ๋‹จ์ง€ ์ด๋Ÿฌํ•œ ๋ณ€ํ™˜ ์‚ฌ์šฉ : let,class,commonjs,template . ๊ทธ์ œ์„œ์•ผ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ๋‹ค์‹œ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฌธ์ž์—ด ํ…œํ”Œ๋ฆฟ์ด๋‚˜ let-to-var๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•„๋งˆ๋„ require-to-imports๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ํ•œ๋™์•ˆ ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ๋†€์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ˆ˜์—…์„ ๋– ๋‚ฌ๋‹ค. ๊ทธ๋ž˜์„œ ์ง๊ฐ์ ์œผ๋กœ ๋ชจ๋“  ํ™•์žฅ๋œ ํด๋ž˜์Šค๋ฅผ ๋‹ค์‹œ ๊ธฐ๋Šฅ์  ์ƒ์†์œผ๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. Bam, ์„ฑ๋Šฅ์ด ๋Œ์•„์™”์Šต๋‹ˆ๋‹ค.

๊ฒฝ๊ณ ์˜ ์ด์•ผ๊ธฐ

๊ทธ๋ž˜์„œ! ๊ตํ›ˆ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜ค๋ž˜๋œ ES5 ์ฝ”๋“œ์— ์žˆ๊ณ  "ํ˜„๋Œ€์ ์ธ" Babel-ified ๋˜๋Š” TypeScripted ์žฅ์ ์„ ๊ฐˆ๋งํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋ฌด์—‡์„ ํŠธ๋žœ์ŠคํŒŒ์ผํ•˜๋“  ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜์Œ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ ํด๋ž˜์Šค๋ฅผ ์ข€ ๋” ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์šด ํŒจํ„ด์œผ๋กœ ๋” "ํด๋ž˜์Šค์™€ ๊ฐ™์€" ๊ฒƒ์œผ๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ Less ๋…ธ๋“œ์˜ ์›๋ž˜ ๊ธฐ๋Šฅ ์ƒ์† ํŒจํ„ด์„ ์–ด๋Š ์ •๋„ ์œ ์ง€ํ–ˆ์œผ๋ฉฐ ํ”„๋กœ์ ํŠธ์— ๊ฐ•๋ ฅํ•œ ๋ฉ”๋ชจ๋ฅผ ๋‚จ๊ธธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ๋Š” ์ด๋Ÿฐ ์ง“์„ ํ•˜์ง€ ์•Š๋Š” ๋ฏธ๋ž˜์˜ ๊ด€๋ฆฌ์ž.

Math=always ๋ชจ๋“œ์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ์ด์ „ ์ˆ˜ํ•™ ๋™์ž‘์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋‹ค๋ฅธ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ํŒ€์— ๊ฑธ์ณ ๋งŽ์€ Less ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ ์ปดํŒŒ์ผ ์˜ต์…˜์„ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ํ†ต์‹  ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด์ ์ด ๊นจ์งˆ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ƒ์„ธํ•œ ๋ถ„ํ•ด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ปดํŒŒ์ผ๋œ ์ถœ๋ ฅ์—์„œ Object.assign ์˜ ์‚ฌ์šฉ๋ฒ•์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด์ œ ํด๋ฆฌํ•„์ด ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ๋ณธ ES class ๊ตฌ๋ฌธ์„ ์ง€์›ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์ „ ํ™˜๊ฒฝ(์˜ˆ: IE11, Node 4 ๋“ฑ)์— ๋Œ€ํ•œ ์ง€์›์„ ์ค‘๋‹จํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ES5๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋™์‹œ์— ์„ฑ๋Šฅ ์ €ํ•˜ ์ˆ˜์ •๊ณผ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฆ‰, v3์— ์„ฑ๋Šฅ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๊ณ  v4์—๋งŒ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@matthew-dean
ES ์ˆ˜์—…์ด ๋ฒ”์ธ์ด๋ผ๋Š” ์‚ฌ์‹ค์ด ์ •๋ง ๋ฌด์„ญ์Šต๋‹ˆ๋‹ค.
์ƒ์„ธํ•œ ๋ถ„์„ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์‹œ๋กœ ์ด๋™: _์ƒ์†๋ณด๋‹ค ๊ตฌ์„ฑ_ ๐Ÿ˜›

์ฐธ๊ณ ๋กœ; ๋” ๊น”๋”ํ•œ ์›ํ˜• ์ƒ์† ์ฒด์ธ์„ ์›ํ•˜๋ฉด ์‹ค์ œ๋กœ ์˜ˆ์ œ์™€ ์•ฝ๊ฐ„ ๋‹ค๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Object.create ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ:

var Node = function() {
  this.foo = 'bar';
}
Node.prototype = Object.create();
Node.prototype.constructor = Node;

var Inherited = function() {
  Node.prototype.constructor.call( this );
  this.value = 1;
}
Inherited.prototype = Object.create( Node.prototype );
Inherited.prototype.constructor = Inherited;

var myNode = new Inherited();

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋™์ผํ•œ ๋ชจ์–‘์„ ๊ณต์œ ํ•˜๋Š” ์ธ์Šคํ„ด์Šค ์ž์ฒด์— ์†์„ฑ์„ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ† ํƒ€์ž…์€ ๋ชจ์–‘์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. _๋ฐ_ ๊ฐ ์†์„ฑ ์•ก์„ธ์Šค์— ๋Œ€ํ•ด ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ ํฌ๋กค๋งํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๐Ÿ˜‰

@์ €์Šคํ‹ฐ๋„ค์˜ค

์ปดํŒŒ์ผ๋œ ์ถœ๋ ฅ์—์„œ โ€‹โ€‹Object.assign์˜ ์‚ฌ์šฉ๋ฒ•์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด์ œ ํด๋ฆฌํ•„์ด ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ๋ณธ ES ํด๋ž˜์Šค ๊ตฌ๋ฌธ์„ ์ง€์›ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์ „ ํ™˜๊ฒฝ(์˜ˆ: IE11, Node 4 ๋“ฑ)์— ๋Œ€ํ•œ ์ง€์›์„ ์ค‘๋‹จํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ES5๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰ Object.assign์ด ํด๋ž˜์Šค ๊ตฌํ˜„ ์ง์ „์— ์ฐฉ๋ฅ™ํ–ˆ์ง€๋งŒ ๊ท€ํ•˜์˜ ์š”์ ์€ ์ฑ„ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” [Something].prototype.property ๊ณ„์†ํ•ด์„œ ์“ฐ์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž์Šต๋‹ˆ๋‹ค./

๊ธฐ์ˆ ์ ์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์ด ์—ฌ์ „ํžˆ ํŠธ๋žœ์ŠคํŒŒ์ผ ์ค‘์ด๋ฏ€๋กœ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์›๋ž˜์˜ ๋ชฉํ‘œ๋Š” ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ ๊ธฐ๋ฐ˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ Object.assign polyfill์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•˜์„ธ์š”. Less๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฒ„์ „์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋™์‹œ์— ์„ฑ๋Šฅ ์ €ํ•˜ ์ˆ˜์ •๊ณผ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฆ‰, v3์— ์„ฑ๋Šฅ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๊ณ  v4์—๋งŒ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ทธ๊ฒƒ์ด ๋˜ํ•œ ์ •๋‹นํ•œ ์ง€์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹จ์ง€ Less์˜ 3๊ฐ€์ง€ ์ฃผ์š” ๋ฒ„์ „์„ ๊ตฌ์ถ•/์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํญ๋ฐœํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

@rjgotten AFAIK ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ํด๋ž˜์Šค ํŒจํ„ด์ด ์ •์˜ํ•œ ๋Œ€๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฒฐ์ •์ ์ธ ์ฐจ์ด๋ฅผ ๋ณด์ง€ ์•Š๋Š” ํ•œ. ๊ทธ๋ž˜์„œ ๐Ÿคทโ€โ™‚๏ธ . ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์‹ค์ ์ด ์šฐ์ˆ˜ํ•œ ๋‹ค์‹œ ์ดํ•˜์˜ ๋…ธ๋“œ ์ƒ์† ํŒจํ„ด์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ ํ•˜์ง€ ์•Š์„๊ฑฐ์•ผ (๋‹ค๋ฅธ I์ด ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค๋ณด๋‹ค Object.assign @Justineo ์ œ์•ˆ์œผ๋กœ ์ „ํ™”๋ฅผ.)

@Justineo @rjgotten ์ด๊ฒƒ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ: [email protected]+b1390a54

๋ฐฉ๊ธˆ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

| ๋ฒ„์ „ | ์‹œ๊ฐ„ |
| -- | -- |
| v3.9.0 | ~1.6์ดˆ |
| v3.10.0~v3.11.1 | ~3.6์ดˆ |
| v3.11.2+ | ~12์ดˆ |
| 4.0.1-์•ŒํŒŒ.2+b2049010 | ~1.6์ดˆ |
| 3.13.0-alpha.10+b1390a54 | ~4.7์ดˆ |

์ถ”์‹ . Node.js v12.13.1๋กœ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š”.... ๋ญ.

๋ณ„๋„์˜ ๋ฒค์น˜๋งˆํฌ๋ฅผ ์„ค์ •ํ•  ์‹œ๊ฐ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ์‹ค์ œ ์ˆ˜์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. Less๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๋•์…˜๊ธ‰ Webpack ํ”„๋กœ์ ํŠธ์˜ ๋ˆ„์  ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

๋ฒ„์ „ | ์‹œ๊ฐ„ | ํ”ผํฌ ๋ฉ”๋ชจ๋ฆฌ
:------------------------|--------:|------------:
3.9 | 35376ms | 950MB
3.11.3 | 37878ms | 920MB
3.13.0-alpha.10+b1390a54 | 34801ms | 740MB
3.13.1-์•ŒํŒŒ.1+84d40222 | 37367ms | 990MB
4.0.1-์•ŒํŒŒ.2+b2049010 | 35857ms | 770MB

์ €์—๊ฒŒ 3.13.0์€ _best_ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค... ๐Ÿ™ˆ

3.11.3์€ ์ด์ „์— 3.11.1 ๋ฒ„์ „์—์„œ ๋ณด์•˜๋˜ ๋Ÿฐ์–ด์›จ์ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ 4.0.1 ๋ฐ 3.13.0 ๋ฒ ํƒ€๊ฐ€ ์—ฌ์ „ํžˆ ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

์บ์‹œ๋ฅผ ๋ณต์›ํ•œ 3.13.1์€ ์‹ค์ œ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ๋ถ€ํ’€๋ฆด ๋ฟ์ž…๋‹ˆ๋‹ค.

@rjgotten ์˜ˆ, ๋ฌธ์ œ๋Š” ์ด ์Šค๋ ˆ๋“œ์—์„œ ์‚ฌ๋žŒ๋“ค์ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์„ ์ธก์ •ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ง€๊ธˆ๊นŒ์ง€ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ณธ์งˆ์ ์œผ๋กœ ๋ณต์ œํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(Less ๋ฒค์น˜๋งˆํ‚น์— ์ œ์ถœํ•˜๊ฑฐ๋‚˜ ์ด๋ฅผ PR๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๊ณ ). Less์—๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋‹ค๋ฅธ ํด๋ก ์— ๋Œ€ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒค์น˜๋งˆํฌ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์–ด ๊ตฌ๋ฌธ ๋ถ„์„/ํ‰๊ฐ€ ์‹œ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์บ์‹ฑ์ด (ํ˜„์žฌ) ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ.

๋‹ค์Œ์€ ํŠธ๋ฆฌ์— ๋Œ€ํ•œ ์ƒ์† ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ๊ตฌ๋ฌธ ๋ถ„์„ ํŠธ๋ฆฌ ์บ์‹œ๊ฐ€ ๋ณต์›๋œ ๊ฒŒ์‹œ๋œ ๋นŒ๋“œ์ž…๋‹ˆ๋‹ค. [email protected]+e8d05c61

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค

https://github.com/ecomfe/dls-tooling/tree/master/packages/less-plugin-dls

๊ฒฐ๊ณผ

| ๋ฒ„์ „ | ์‹œ๊ฐ„ |
| -- | -- |
| v3.9.0 | ~1.6์ดˆ |
| v3.10.0~v3.11.1 | ~3.6์ดˆ |
| v3.11.2+ | ~12์ดˆ |
| 4.0.1-์•ŒํŒŒ.2| ~1.6์ดˆ |
| 3.13.0-์•ŒํŒŒ.10| ~4.7์ดˆ |
| 3.13.0-์•ŒํŒŒ.12 | ~1.6์ดˆ |

Node.js ๋ฒ„์ „

v12.13.1


๋‚˜์—๊ฒŒ ์ด ๋ฒ„์ „์€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋™๋ฃŒ๋“ค์—๊ฒŒ ์‹œ๋„ํ•ด ๋ณด๊ณ  ํ™•์ธํ•˜๋„๋ก ์š”์ฒญํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋ฅผ ์œ„ํ•ด alpha.10 ๋ณด๋‹ค ์•ฝ๊ฐ„ ๋” ๋‚˜์˜๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ ์ฐจ์ด๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„์ „ | ์‹œ๊ฐ„ | ํ”ผํฌ ๋ฉ”๋ชจ๋ฆฌ
:------------------------|--------:|------------:
3.9 | 35376ms | 950MB
3.11.3 | 37878ms | 920MB
3.13.0-alpha.10+b1390a54 | 34801ms | 740MB
3.13.0-alpha.12+e8d05c61 | 36263ms | 760MB
3.13.1-์•ŒํŒŒ.1+84d40222 | 37367ms | 990MB
4.0.1-์•ŒํŒŒ.2+b2049010 | 35857ms | 770MB

@matthew-dean, ๋‚ด ์ฝ”๋“œ๊ฐ€ ์•„์ง 4.0.1-alpha.2+b2049010 ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@rjgotten ๋„ค, ๊ทธ ์ฐจ์ด๋Š” ๊ท€ํ•˜์˜ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€์—์„œ ์‚ฌ์†Œํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์˜ ๊ฒฐ๊ณผ๋Š” 3.x์™€ 4.0 ๋ฆด๋ฆฌ์Šค๋ฅผ ๋ชจ๋‘ ์ค€๋น„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ 4.0์„ ํ‘ธ์‹œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ณ ๋ง™๊ฒŒ๋„ ๊ทธ๋ ‡๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•  ๋˜ ๋‹ค๋ฅธ ํ•ญ๋ชฉ์€ ํŠน์ • ๋ฒค์น˜๋งˆํฌ ์ž„๊ณ„๊ฐ’ ์•„๋ž˜๋กœ ๋–จ์–ด์ง€๋ฉด ๋œ ์‹คํŒจํ•˜๋Š” CI ํŒŒ์ดํ”„๋ผ์ธ์— ๋„ฃ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jrnail23 4.0 ์•ŒํŒŒ๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด [email protected]+e8d05c61 ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@matthew-dean, ๋‚ด ๋นŒ๋“œ์— ๋Œ€ํ•ด ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค.

  • v3.9: 98์ดˆ
  • v3.10.3: 161์ดˆ
  • v3.13.0-alpha.12: 93-96์ดˆ

๊ทธ๋ž˜์„œ ๋‹น์‹ ์€ ๋‹น์‹ ์ด ์›ํ•˜๋Š” ๊ณณ์œผ๋กœ ๋Œ์•„๊ฐ„ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค! ์ž˜ ํ•˜์…จ์–ด์š”!

์ž˜ ํ•˜์…จ์–ด์š”!

๋„ค, ๋‘ ๋ฒˆ์งธ๋กœ ๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค. ์ œ์‚ผ; ๊ทธ๋ฆฌ๊ณ  ๋„ค ๋ฒˆ์งธ.
์ด๊ฒƒ์€ ์ •๋ง _๋งŽ์€_ ๋…ธ๋ ฅ์„ ๋“ค์—ฌ ์ œ๊ฑฐํ•˜๋Š” ๋ถˆ์พŒํ•˜๊ณ  ๋ถˆ์พŒํ•œ ์„ฑ๋Šฅ ํšŒ๊ท€์˜€์Šต๋‹ˆ๋‹ค.

์ž‘์—… _๋งค์šฐ ์ž˜_ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ข‹์•„ ํŒ€! ์ €๋Š” 3.x ๋นŒ๋“œ๋ฅผ ๊ฒŒ์‹œํ•  ์˜ˆ์ •์ด๋ฉฐ ๋‚˜์ค‘์— ์–ธ์  ๊ฐ€๋Š” ์•„๋งˆ๋„ ๋‹ค์Œ ์ฃผ์— 4.0์„ ๊ฒŒ์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋‘˜ ๋‹ค ์„ฑ๋Šฅ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊น…์— ๋„์›€์„ ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์ €๋Š” ํ˜„์žฌ Less.js ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ TypeScript๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์— ์žˆ์œผ๋ฉฐ, ๊ทธ ๊ธฐํšŒ๋ฅผ ์ด์šฉํ•ด ์•ฝ๊ฐ„์˜ ์„ฑ๋Šฅ ํŠœ๋‹/๋ฆฌํŒฉํ† ๋ง์„ ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ๊ธฐ๊บผ์ด ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค! https://github.com/matthew-dean/less.js/compare/master...matthew-dean:next

์ถ”๊ฐ€ ๋ˆˆ์„ ์„ ํ˜ธํ•˜๋Š” ํŠน์ • ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๊นŒ? ํ™๋ณด๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œ ์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด

@kevinramharak ๊ณต์ •ํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์†”์งํžˆ TypeScript๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋‚œ๊ด€์— ๋ถ€๋”ชํ˜€(ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„ ์˜ค๋ฅ˜), ์ง€๊ธˆ์€ ์•„์˜ˆ ๋‹ค์‹œ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Less๋Š” ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ž˜ ์‹คํ–‰๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ƒˆ๋กœ์šด ์–ธ์–ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์ƒˆ๋กœ์šด ์‚ฌ์ „ ๋ฒ„์ „์œผ๋กœ ์˜ฎ๊ธฐ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— (๋ฆฌํŒฉํ† ๋ง/์ƒˆ๋กœ์šด ์–ธ์–ด ๊ธฐ๋Šฅ์„ ๋” ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด) ๋ณ€ํ™˜ํ•˜๊ณ  ์‹ถ์—ˆ๋˜ ๋งŽ์€ ์ด์œ ๊ฐ€ ์ด์ œ ๋ฌด์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ ์–ธ์–ด. ์ž๊ธฐ ํ™๋ณด๋ฅผ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์œผ๋‹ˆ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์›ํ•˜์‹œ๋ฉด ํŠธ์œ„ํ„ฐ๋‚˜ ์ง€ํ„ฐ๋กœ DM์ฃผ์„ธ์š”.

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