JavaScript - The Complete Guide 2022

Section 30: Performance Optimization - Start Fast, Stay Fast

olivia_yj 2022. 11. 9. 01:58

The goals

๐Ÿ’ช๐ŸปWhat is "Performance"?

โœŒ๐ŸปMeasuring & Analyzing Performance

๐Ÿ‘๐ŸปOptimization Ideas

๐Ÿ‘Š๐ŸปFurther Resources

 

 

insertAdjacentElement

 

 

 

jsperf

 

 
์„œ๋ฒ„ ์ธก ์„ฑ๋Šฅ ์ตœ์ ํ™”

์ด ๊ฐ•์˜ ์„น์…˜์—์„œ๋Š” JavaScript ์„ฑ๋Šฅ์— ๋Œ€ํ•ด ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

์›น ์‚ฌ์ดํŠธ์˜ ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๊ฒƒ์€ JavaScript๋งŒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ ์ธก ์ตœ์ ํ™”(์˜ˆ: CSS, ์ด๋ฏธ์ง€ => ์ฐธ์กฐ: https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency) ์™ธ์—๋„ ์„œ๋ฒ„ ์ธก ์„ฑ๋Šฅ์„ ๊ฐœ์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ธก(์˜ˆ: NodeJS)์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ ์„œ๋ฒ„ ๊ตฌ์„ฑ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๊ฐœ์„  ์˜์—ญ์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ œ๊ณต๋œ ์ž์‚ฐ์˜ ์••์ถ•
  • ์บ์‹ฑ(ํด๋ผ์ด์–ธํŠธ ์ธก ๋ฐ ์„œ๋ฒ„ ์ธก)
  • HTTP/2

์••์ถ•

์••์ถ•์€ ์ •์  ์ž์‚ฐ(CSS, JS, ์ด๋ฏธ์ง€)์„ ์ œ๊ณตํ•˜๊ธฐ ์ „์— ์••์ถ•ํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค. ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋Ÿฌํ•œ ํŒŒ์ผ์˜ ์••์ถ•์„ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๊ณ  ์ž๋™์œผ๋กœ ์••์ถ•์„ ํ’‰๋‹ˆ๋‹ค. ์••์ถ•๋œ ์ž์‚ฐ์ด ์ „์†ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋” ์ ์–ด์ง‘๋‹ˆ๋‹ค => ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๋” ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.

์••์ถ•์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ ์ค‘์ธ ์„œ๋ฒ„/์„œ๋น„์Šค์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ฐ€๋ น Firebase์—์„œ ์ •์  ์ž์‚ฐ์€ ์ž๋™์œผ๋กœ ์••์ถ•๋ฉ๋‹ˆ๋‹ค.

์ž์ฒด NodeJS ์„œ๋ฒ„ ์ธก ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ •์  ์ž์‚ฐ์ด ์••์ถ•๋˜์—ˆ๋Š”์ง€ ์ˆ˜๋™์œผ๋กœ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(https://github.com/expressjs/compression).

์บ์‹ฑ

์บ์‹ฑ์€ ๋ณต์žกํ•œ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค - ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ์ดํ„ฐ๋‚˜ ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๊ณ , ๋‹ค์–‘ํ•œ ์ˆ˜์ค€์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ธŒ๋ผ์šฐ์ €๋Š” ์ œ๊ณต ํ˜ธ์ŠคํŠธ(https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)์—์„œ ์„ค์ •ํ•œ ์บ์‹ฑ ํ—ค๋”๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™์œผ๋กœ ํŒŒ์ผ(์˜ˆ: JS ํŒŒ์ผ)์„ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋ฒ„ ์ธก ๊ตฌ์„ฑ์—์„œ ์ด๋Ÿฌํ•œ ํ—ค๋”๋ฅผ ์ œ์–ดํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋Ÿฌํ•œ ํŒŒ์ผ์„ ์บ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ํ”ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ์ดํŠธ ๋ฐฉ๋ฌธ์ž๊ฐ€ ์ค‘์š”ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋†“์น˜์ง€๋Š” ์•Š๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ธก ์บ์‹ฑ์€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ์—ฌ๋Ÿฌ ์š”์ฒญ์ด ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์„œ๋ฒ„์—์„œ ์ž‘์—…ํ•˜๋Š” ๋ฐ์ดํ„ฐ(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ)๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค.

์ด ๋งํฌ์—์„œ ์บ์‹ฑ์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching

์ด ๋งํฌ์—์„œ๋„์š”. https://wp-rocket.me/blog/different-types-of-caching/

HTTP/2

HTTP/2๋Š” Http ํ”„๋กœํ† ์ฝœ์˜ ์ตœ์‹  "ํ˜•์‹"์ด๊ณ  HTTP 1๊ณผ๋Š” ๋‹ฌ๋ฆฌ "์„œ๋ฒ„ ํ‘ธ์‹œ"๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„๊ฐ€ (ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€์‹ ) ํ•„์š”ํ•œ ์ž์‚ฐ/ํŒŒ์ผ์„ ํด๋ผ์ด์–ธํŠธ์— ๋Šฅ๋™์ ์œผ๋กœ ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋” ์ž์„ธํ•œ ์„ค๋ช…์€ ์ด ๋งํฌ์—์„œ ํ™•์ธํ•ด ์ฃผ์„ธ์š”. https://developers.google.com/web/fundamentals/performance/http2

 

 

 

Sources

https://web.dev/optimize-javascript-execution/

 

Optimize JavaScript execution

JavaScript often triggers visual changes. Sometimes that's directly through style manipulations, and sometimes it's calculations that result in visual changes, like searching or sorting data. Badly-timed or long-running JavaScript is a common cause of perf

web.dev

https://developer.chrome.com/docs/devtools/

 

Chrome DevTools - Chrome Developers

Chrome DevTools is a set of web developer tools built directly into the Google Chrome browser.

developer.chrome.com

https://github.com/jsperf/jsperf.com

 

GitHub - jsperf/jsperf.com: jsperf.com v2. https://github.com/h5bp/lazyweb-requests/issues/174

jsperf.com v2. https://github.com/h5bp/lazyweb-requests/issues/174 - GitHub - jsperf/jsperf.com: jsperf.com v2. https://github.com/h5bp/lazyweb-requests/issues/174

github.com

https://www.breck-mckye.com/blog/2014/08/using-jsperf-a-how-to-guide/

 

Using jsPerf: a how-to guide

If you’re interested in testing the performance of a particular piece of JavaScript, you might be interested in jsPerf. jsPerf allows you to run and compare the speed of arbitrary snippets of JavaScript against a blob of HTML of your choice. This means y

www.breck-mckye.com