SlideShare uma empresa Scribd logo
1 de 14
ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์„ ์ด์šฉํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
ํ”„๋กœํŒŒ์ผ๋ง ํ•˜๊ธฐ
                                                                 ์ €์ž:   Zack Grossbart
                                                               ์ž‘์„ฑ์ผ: 2012 ๋…„ 6 ์›” 12 ์ผ
                                                                       ๋Œ€์ƒ: ์ดˆ๊ธ‰ ๊ฐœ๋ฐœ์ž
                                                                             ๋ฒˆ์—ญ: ๊น€ํ˜•์„
                                                               ๋ฒˆ์—ญ์ผ: 2013 ๋…„ 2 ์›” 18 ์ผ
         ์›๋ฌธ์ฃผ์†Œ: http://coding.smashingmagazine.com/2012/06/12/javascript-profiling-chrome-
                                                                          developer-tools/



        ์›น ์‚ฌ์ดํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ด์ œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ฐจ๋ก€๋‹ค. ์›น ์‚ฌ์ดํŠธ์˜ ์„ฑ

        ๋Šฅ์ด๋ผ๋Š” ๊ฒƒ์€ ๋‘ ๊ฐ€์ง€ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”๋ฐ, ํ•˜๋‚˜๋Š” ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„์ด๊ณ  ๋‹ค๋ฅธ ํ•˜
        ๋‚˜๋Š” ํŽ˜์ด์ง€ ๋‚ด ์ฝ”๋“œ์˜ ์‹คํ–‰ ์†๋„๊ฐ€ ๊ทธ๊ฒƒ์ด๋‹ค. ๋ฏธ๋‹ˆ๋งˆ์ด์ €1๋‚˜ CDN2 ๋“ฑ ์ˆ˜๋งŽ์€ ์™ธ๋ถ€ ์„œ๋น„

        ์Šค๋“ค์„ ์ด์šฉํ•˜๋ฉด ๋กœ๋”ฉ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฝ”๋“œ๊ฐ€ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€

        ์˜จ์ „ํžˆ ์šฐ๋ฆฌ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋ชซ์ด๋‹ค.

        ์ฝ”๋“œ์ƒ์˜ ์•„์ฃผ ์ž‘์€ ๋ณ€๊ฒฝ์ด ์„ฑ๋Šฅ์— ์—„์ฒญ๋‚œ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ ์ €๊ธฐ์— ์‚ฐ์žฌ๋˜์–ด ์žˆ

        ๋Š” ๊ณ ์ž‘ ๋ช‡ ๊ฐœ์˜ ์ฝ”๋“œ ๋ผ์ธ๋“ค ๋•Œ๋ฌธ์— ์›น ์‚ฌ์ดํŠธ๊ฐ€ ๋น›์˜ ์†๋„๋กœ ์‘๋‹ตํ•  ์ˆ˜๋„, ํ˜น์€ ์•„์˜ˆ
        ๋‹ค์šด๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์‘๋‹ต์„ ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด(Chrome

        Developer Tools)์„ ์ด์šฉํ•˜์—ฌ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ๋‘์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด

        ์„ค๋ช…ํ•  ๊ฒƒ์ด๋‹ค.



       ๊ธฐ์ค€์  ์ •ํ•˜๊ธฐ

        ๋จผ์ € ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ(Color Sorter)๋ผ๋Š” ๊ฐ„๋‹จํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ดํŽด๋ณด๊ธฐ๋กœ ํ•˜์ž. ์ด ํ™”๋ฉด์„

        ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด์–ด๋ณด๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ฌด์ง€๊ฐœ ์ƒ‰์˜ ์›๋“ค์ด ๊ฒฉ์ž๋กœ ์ •๋ ฌ๋˜์–ด ๋ณด์—ฌ์งˆ



1
    Minimizer. Javascript ๋“ฑ์˜ ์ฝ”๋“œ ๋‚ด์˜ ๊ณต๋ฐฑ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋ณ€์ˆ˜/ํŽ‘์…˜ ์ด๋ฆ„์„ ์งง๊ฒŒ ๋งŒ๋“œ๋Š” ๋“ฑ,

๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•˜๋Š” ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งํ•œ๋‹ค.

2
    Content Delivery Network. ๋ฒˆ์—ญํ•ด์„œ ์ปจํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ๋ผ๊ณ  ํ•œ๋‹ค. ์‚ฌ์šฉ์ด ๋นˆ๋ฒˆํ•œ ์ปจํ…์ธ ๋ฅผ

์„œ๋ฒ„์— ์ €์žฅํ•œ ๋’ค, ๋ณ‘๋ชฉ์ง€์ ์„ ํ”ผํ•ด ๊ณ ์† ์„œ๋น„์Šคํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งํ•œ๋‹ค.
๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๊ฐ๊ฐ์˜ ์›์„ ๋“œ๋ž˜๊ทธ-์•ค๋“œ-๋“œ๋กญํ•˜์—ฌ ์ด๋ฆฌ์ €๋ฆฌ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์›

        ๋“ค์€ CSS๋กœ ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ div ํƒœ๊ทธ์ด๋‹ค.




        (๋ฌด์ง€๊ฐœ ์ƒ‰์˜ div๋Š” โ€œMaking Annoying Rainbows in JavaScript.โ€๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค์—ˆ๋‹ค.)

        ์›น ํŽ˜์ด์ง€ ์ž์ฒด๋Š” ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋กœ๋”ฉ๋˜์ง€๋งŒ, ์ „์ฒด๊ฐ€ ๋‹ค ๊ทธ๋ ค์ง€๊ธฐ ์ „์— ๋ช‡ ๋ฒˆ ๊นœ๋นก์ด๋Š” ๊ฒƒ

        ์„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋ฐ”๋กœ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•  ์‹œ๊ฐ„์ธ ๊ฒƒ์ด๋‹ค.

        ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž‘์—…์„ ํ•  ๋•Œ์—๋Š” ํ•ญ์ƒ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ์–ผ๋งˆ๋‚˜ ๋Š๋ฆฐ์ง€, ํ˜น์€ ์–ผ
        ๋งˆ๋‚˜ ๋นจ๋ผ์•ผ ํ•˜๋Š”์ง€ ๋“ฑ์„ ์ •์˜ํ•œ ๊ธฐ์ค€์ (baseline)์„ ๋งŒ๋“ค๊ณ  ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค. ๊ธฐ์ค€์ ์ด ์žˆ
        ์–ด์•ผ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•œ ์ž‘์—…์ด ์–ผ๋งˆ๋‚˜ ํšจ๊ณผ์ ์ด์—ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ ํŠธ๋ ˆ์ด

        ๋“œ์˜คํ”„ 3 ๋Š” ๋ฌด์—‡์ด๊ณ  ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ๋Š” ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์„ ์ด์šฉ
        ํ•ด์„œ ์ด ์ž‘์—…์„ ์ง„ํ–‰ํ•  ๊ฒƒ์ด๋‹ค.



3
    Tradeoff. Tradeoff๋Š” ์–ด๋–ค ์ผ์„ ๋ชฉ์ ์„ ์ด๋ฃจ๊ธฐ ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฐ˜๋Œ€๊ธ‰๋ถ€์˜ ๋น„์šฉ
์„ ๋งํ•œ๋‹ค. (๋ฐ˜๋“œ์‹œ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ) ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ

๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด tradeoff์˜ ์˜ˆ์ด๋‹ค.
ํ”„๋กœํŒŒ์ผ๋Ÿฌ4๋Š” ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์˜ ํ•œ ๋ถ€๋ถ„์œผ๋กœ, ํฌ๋กฌ์ด ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“  ์‚ฌ์šฉํ•  ์ˆ˜
          ์žˆ๋‹ค. ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์€ ๋ Œ์น˜ 5 ์•„์ด์ฝ˜์„ ํด๋ฆญํ•œ ๋’ค ๋„๊ตฌ(Tools) ๋ฉ”๋‰ด ํ•˜์œ„์˜ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ
          (Developer Tools) ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ์‹คํ–‰๋œ๋‹ค. 6 Firebug 7 ์—๋„ ํ”„๋กœํŒŒ์ผ๋ง ๊ธฐ๋Šฅ์ด ์žˆ๊ธด ํ•˜
          ์ง€๋งŒ, ํฌ๋กฌ์ด๋‚˜ ์‚ฌํŒŒ๋ฆฌ ๊ฐ™์€ ์›นํ‚ท ๋ธŒ๋ผ์šฐ์ €๋“ค์ด ์ฝ”๋“œ๋ฅผ ํ”„๋กœํŒŒ์ผ๋ง ํ•˜๊ฑฐ๋‚˜ ํƒ€์ž„๋ผ์ธ์„

          ๋ณด์—ฌ์ฃผ๋Š”๋ฐ ๊ฐ€์žฅ ์ข‹๋‹ค. ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์€ ์Šคํ”ผ๋“œ ํŠธ๋ ˆ์ด์„œ(Speed Tracer 8 )๋ผ๊ณ  ํ•˜๋Š” ๋ฉ‹์ง„
          ์ด๋ฒคํŠธ ํŠธ๋ ˆ์ด์Šค ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๋„ ํ•œ๋‹ค.


          ๊ธฐ์ค€์ ์„ ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋‹จ ํƒ€์ž„๋ผ์ธ์„ ํ™•์ธํ•˜๊ธฐ๋กœ ํ•˜์ž. ํƒ€์ž„๋ผ์ธ์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€
          ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.


          (1) ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์„ ์ด์šฉํ•˜์—ฌ โ€œTimelineโ€ ํƒญ์„ ์—ด์–ด๋‘๊ณ  ์›น ํŽ˜์ด์ง€์— ์ ‘์†ํ•œ๋‹ค.

          (2) ์ขŒ์ธก ํ•˜๋‹จ์˜ ์ž‘์€ ๊ฒ€์€ ์ƒ‰ ์›์„ ํด๋ฆญํ•˜๋ฉด ํƒ€์ž„๋ผ์ธ ์ €์žฅ์ด ์‹œ์ž‘๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒ€์€ ์ƒ‰

              ์›์ด ๋ถ‰์€ ์ƒ‰์œผ๋กœ ๋ณ€ํ•œ๋‹ค.

          (3) ํ™”๋ฉด ์ƒ์—์„œ ํ”„๋กœํŒŒ์ผ๋ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๋™์ž‘์„ ์‹คํ–‰ํ•œ๋‹ค.


          (4) (3)์—์„œ ๋ถ‰์€ ์ƒ‰์œผ๋กœ ๋ณ€ํ•œ ์ž‘์€ ์›์„ ํด๋ฆญํ•˜์—ฌ ์ €์žฅ์„ ์ข…๋ฃŒํ•œ๋‹ค.

          ํƒ€์ž„๋ผ์ธ ์ €์žฅ ๊ธฐ๋Šฅ์€ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์‹œ์ž‘๋˜์ง€ ์•Š๋Š”๋‹ค. (ํฌ๋กฌ์ด ๊ทธ ์ •

          ๋„๋Š” ๋˜‘๋˜‘ํ•˜๋‹ค.) ํ‰๊ท ์„ ๋‚ด๋ณด๊ธฐ ์œ„ํ•ด ์ด ์„ธ ๋ฒˆ์„ ์‹คํ–‰ํ•ด ๋ณด์•˜๋Š”๋ฐ, ํ•„์ž์˜ ์ปดํ“จํ„ฐ์—์„œ๋Š”

          ์ฒซ ๋ฒˆ์งธ ์‹œ๋„์—์„œ ๊ฐ€์žฅ ๋Šฆ๊ฒŒ ์‹คํ–‰๋˜์—ˆ๋‹ค.




4
    ์ปดํ“จํ„ฐ ์‚ฌ์ด์–ธ์Šค์—์„œ ํ”„๋กœํŒŒ์ผ๋ง์ด๋ผ ํ•จ์€, ํ”„๋กœ๊ทธ๋žจ ๋ณต์žก๋„, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ๋“ฑ ํ”„๋กœ

๊ทธ๋žจ์˜ ์‹คํ–‰ ์ƒํ™ฉ์— ๋Œ€ํ•ด ๋™์ ์œผ๋กœ ๋ถ„์„ํ•˜๋Š” ํ–‰์œ„๋ฅผ ๋งํ•œ๋‹ค. ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•˜๋Š” ๋ชฉ์ ์€ ๊ถ๊ทน์ ์œผ
๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„๋‚ด๊ธฐ ์œ„ํ•จ์ด๋‹ค. ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•  ์ˆ˜ ์žˆ

๋„๋ก ๋„์™€์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

5
    ์˜ˆ์ „ ๋ฒ„์ „์˜ ํฌ๋กฌ์—๋Š” ํ™”๋ฉด ์šฐ์ƒ๋‹จ์— ๋ Œ์น˜ ๋ชจ์–‘์˜ ์•„์ด์ฝ˜์ด ์žˆ์—ˆ์ง€๋งŒ, ํ˜„์žฌ๋Š” ไธ‰์ž ๋ชจ์–‘์˜ ์•„์ด

์ฝ˜์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

6
    ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์€ CTRL+SHIFT+I๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ด ์ˆ˜๋„ ์žˆ๋‹ค.

7
    http://getfirebug.com

8
    https://developers.google.com/web-toolkit/speedtracer/
๊ธฐ์ค€์ ์„ ์žก๊ธฐ ์œ„ํ•ด ํƒ€์ž„๋ผ์ธ์„ ์ด์šฉํ•˜์—ฌ ์ธก์ •ํ•ด ๋ณธ ๊ฒฐ๊ณผ, ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ตœ์ดˆ

์š”์ฒญ์œผ๋กœ๋ถ€ํ„ฐ ํ™”๋ฉด์˜ ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ๊ทธ๋ ค์ง€๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„์„ ์ธก์ •ํ•ด ๋ณด๋‹ˆ,

ํ‰๊ท  1.25์ดˆ๊ฐ€ ์†Œ์š”๋˜์—ˆ๋‹ค. ์•„์ฃผ ๋Š๋ฆฐ ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ์ง€๋งŒ, ์ •๋ณด์˜ ์–‘์ด ๊ทธ๋ฆฌ ๋งŽ์ง€ ์•Š๋‹ค๋Š”
๊ฒƒ์„ ์ƒ๊ฐํ•˜๋ฉด ๊ดœ์ฐฎ๋‹ค๊ณ  ํ•  ์ˆ˜ ์—†๋Š” ์ˆ˜์ค€์ด๋‹ค.


์ด์ œ ์‹คํ–‰ ์†๋„๋ฅผ ์ข€ ๋” ๋น ๋ฅด๊ฒŒ ํ•˜๊ณ  ์‹ถ์ง€๋งŒ, ๊ทธ๋Ÿฌ๋ ค๋ฉด ์ •ํ™•ํžˆ ์–ด๋–ค ์ด์œ  ๋•Œ๋ฌธ์— ๋Š๋ ค์ง€
๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค. ์ด์ œ ํ”„๋กœํŒŒ์ผ๋Ÿฌ์˜ ๋„์›€์„ ๋ฐ›์„ ์ฐจ๋ก€์ด๋‹ค.



ํ”„๋กœํŒŒ์ผ ํ•ด๋ณด๊ธฐ

ํƒ€์ž„๋ผ์ธ์„ ๋ณด๋ฉด ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์•Œ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์–ด๋–ค ์ด์œ ๋กœ ๊ทธ ์ •

๋„์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜๋Š” ์—†๋‹ค. ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ์”ฉ ๋ฐ”๊ฟ”๊ฐ€๋ฉด์„œ ํƒ€์ž„๋ผ์ธ์„ ๊ณ„์† ์ธก
์ •ํ•ด ๋ณผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ๊ทธ์ € ๋•Œ๋ ค ๋งž์ถ”๋Š” ์ •๋„๋ผ๊ณ ๋ฐ–์— ํ•  ์ˆ˜ ์—†๋‹ค. โ€œProfilesโ€ ํƒญ์„

์ด์šฉํ•˜๋ฉด ์‹ค์ œ๋กœ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€๋ฅผ ๋“œ๋””์–ด ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ์–ด๋–ค ๊ธฐ๋Šฅ์ด ๊ฐ€์žฅ ์‹œ๊ฐ„์„ ๋งŽ์ด ์†Œ๋น„ํ•˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด์ œ
ํ”„๋กœํŒŒ์ผ ๊ธฐ์ค€์ ์„ ์žก๊ธฐ ์œ„ํ•ด โ€œProfilesโ€ ํƒญ์„ ์ด์šฉํ•˜๊ธฐ๋กœ ํ•ด ๋ณด์ž. ํ”„๋กœํŒŒ์ผ๋Ÿฌ ํƒญ์—์„œ ๋‹ค
์Œ ์„ธ ๊ฐ€์ง€ ํ”„๋กœํŒŒ์ผ๋ง ์œ ํ˜•์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

1.   JavaScript CPU profile: JavaScript ๊ฐ€ CPU ์‹œ๊ฐ„์„ ์–ผ๋งˆ๋‚˜ ์†Œ๋น„ํ•˜๋Š”์ง€์—
๋Œ€ํ•œ ํ”„๋กœํŒŒ์ผ๋ง ์ •๋ณด ์ˆ˜์ง‘
2.   CSS selector profile: CSS ์…€๋ ‰ํ„ฐ๊ฐ€ ์‹คํ–‰๋˜๋Š”๋ฐ CPU ์‹œ๊ฐ„์„ ์–ผ๋งˆ๋‚˜
์†Œ๋น„ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ”„๋กœํŒŒ์ผ๋ง ์ •๋ณด ์ˆ˜์ง‘
3.   Heap snapshot: JavaScript ๊ฐ์ฒด์— ์˜ํ•ด ์†Œ๋น„๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ
ํ”„๋กœํŒŒ์ผ๋ง ์ •๋ณด ์ˆ˜์ง‘


์ง€๊ธˆ ์ด ์ˆœ๊ฐ„์—๋Š” JavaScript์˜ ์‹œ๊ฐ„์  ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋ฏ€๋กœ, JavaScript CPU
profile ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. ํƒ€์ž„๋ผ์ธ์„ ์ €์žฅํ–ˆ๋˜ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, โ€œProfilesโ€ ํƒญ์—์„œ

ํ”„๋กœํŒŒ์ผ์„ ์‹œ์ž‘ํ•˜๊ณ , ํŽ˜์ด์ง€๋ฅผ ๊ฐฑ์‹ ํ•œ ๋’ค, ํ”„๋กœํŒŒ์ผ์„ ์ข…๋ฃŒํ•˜๋ฉด ๋œ๋‹ค.




ํ”„๋กœํŒŒ์ผ๋ง ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ณ ์„œ ๋”ฑ ๋Š๋ผ๋Š” ์ ์€, ๋ญ”๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์ƒ‰
์ƒ ์ •๋ ฌ๊ธฐ๋Š” jQuery์™€ jQuery UI๋ฅผ ์ด์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค ์•ˆ์—๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„

๊ด€๋ฆฌํ•œ๋‹ค๊ฑฐ๋‚˜ ์ •๊ทœํ‘œํ˜„์‹์„ ํŒŒ์‹ฑํ•˜๋Š” ๋“ฑ ์ˆ˜๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ
๋‹ค. ๋ฌผ๋ก  ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ธ decimalToHex ํŽ‘์…˜๊ณผ makeColorSorter ํŽ‘์…˜์ด ๋ชฉ๋ก์˜ ์ œ
์ผ ์œ„์ชฝ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒƒ๋„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋‘ ํŽ‘์…˜๋“ค์ด ํ•ฉ์ณ์„œ 13.2%์˜ CPU ์‹œ๊ฐ„์„
์†Œ๋น„ํ•˜๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์ด ์ฝ”๋“œ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์ž‘์—…์„ ์œ„ํ•œ ์ข‹์€ ์‹œ์ž‘์ ์ด ๋  ์ˆ˜ ์žˆ

         ์„ ๊ฒƒ์ด๋‹ค.9

         ํŽ‘์…˜์˜ ์˜†์— ์žˆ๋Š” ๊ฒ€์€์ƒ‰ ์‚ผ๊ฐํ˜•์„ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ํŽ‘์…˜์— ๋Œ€ํ•œ ์ฝœ ์Šคํƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ
         ๋‹ค. decimalToHex ์˜†์˜ ์‚ผ๊ฐํ˜•์„ ํด๋ฆญํ•ด๋ณด๋‹ˆ, makeColorSorter๊ฐ€ decimalToHex๋ฅผ ํ˜ธ์ถœํ–ˆ
         ์œผ๋ฉฐ, makeColorSorter๋Š” $(document).ready๊ฐ€ ํ˜ธ์ถœํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค. ์‹ค์ œ ์ฝ”๋“œ๋Š” ๋‹ค

         ์Œ๊ณผ ๊ฐ™๋‹ค.

         $(document).ready(function() {
             makeColorSorter(.05, .05, .05, 0, 2, 4, 128, 127, 121);
             makeSortable();
         });



         ์ด ํŽ‘์…˜๋“ค์ด ์–ด๋””์—์„œ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ, ์ƒ‰์ƒ์„ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ10

         ์ด ์„ฑ๋Šฅ์„ ์ข€๋จน๋Š” ์ฃผ๋œ ์š”์ธ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ณดํ†ต์€ ์ •๋ ฌ ๊ฐ€๋Šฅํ•œ ์š”์†Œ๋“ค
         ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€๋งŒ, ์ด ์ฝ”๋“œ์—์„œ๋Š” DOM 11 ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜

         ๋Š” ๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์–˜๊ธฐ๋‹ค.

         ์ด์ œ ๋ฒ”์ธ์„ ์ฐพ์•˜์œผ๋‹ˆ ํŠœ๋‹์„ ์‹œ์ž‘ํ•˜๋ ค ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ์ด์ „์—, ์•ž์œผ๋กœ ์ˆ˜์ •ํ•  ๋‚ด์šฉ์ด
         ๋‹ค๋ฅธ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ๋ฐ›๊ฑฐ๋‚˜ ๋ผ์น˜์ง€ ์•Š๋„๋ก ๊ณ ๋ฆฝํ•˜๊ณ  ์‹ถ๋‹ค. ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋”ฉ๋˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋งŽ

         ์€ ์ผ๋“ค์ด ์ผ์–ด๋‚˜๋Š”๋ฐ, ํŠœ๋‹์„ ํ•˜๊ณ  ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ด๋“ค์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ๊ณ 

         ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.



       ๋ฌธ์ œ ์ง€์  ๊ณ ๋ฆฝ์‹œํ‚ค๊ธฐ

         ๋„ํ๋จผํŠธ(document)๊ฐ€ ์ค€๋น„(ready) ๋˜์—ˆ์„ ๋•Œ ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ๋Œ€์‹ ์—, ๋ฒ„ํŠผ ํ•˜๋‚˜
         ๋ฅผ ํด๋ฆญํ•œ ๋’ค์—์•ผ ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ๊ฐ€ ๋กœ๋”ฉ๋˜๋„๋ก ํ•˜๋Š” ๋‘ ๋ฒˆ์งธ ๋ฒ„์ „์„ ๋งŒ๋“ค๋ ค ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ

         ํ•จ์œผ๋กœ์จ, ์šฐ๋ฆฌ์˜ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋„ํ๋จผํŠธ์˜ ๋กœ๋”ฉ์œผ๋กœ๋ถ€ํ„ฐ ๊ณ ๋ฆฝ(isolate)๋  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , ์ข€ ๋”


9
     ๋‹จ์ˆœํžˆ CPU ์ ์œ ์œจ์ด ๋†’๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ ํŠœ๋‹์ด ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์ข‹์€ ์‹œ์ž‘์ ์ด ๋ 

์ˆ˜๋Š” ์žˆ๋‹ค.

10
     ์—ฌ๊ธฐ์„œ๋Š” makeSortable() ํŽ‘์…˜

11
     Document Object Model. DOM์€ W3C์—์„œ ๊ฐœ๋ฐœํ•œ ๊ทœ๊ฒฉ์œผ๋กœ, HTML์ด๋‚˜ XML ๋ฌธ์„œ์˜ ์ •๋ณด๋ฅผ
๊ฐ์ฒดํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค. DOM์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์„ค๋ช…์€

http://en.wikipedia.org/wiki/Document_Object_Model๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค.
์‰ฝ๊ฒŒ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋‚˜์ค‘์— ์„ฑ๋Šฅ ํŠœ๋‹์ด ๋๋‚˜๊ณ  ๋‚˜๋ฉด ์ด ๋ถ€๋ถ„๋งŒ ์˜ˆ์ „

๋ฐฉ์‹์œผ๋กœ ๋Œ๋ ค๋†“๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

์•„๋ž˜์™€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด์„œ ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ๊ฐ€ ๋™์ž‘ํ•˜๋„๋ก โ€œclickMeโ€ ๋ฒ„ํŠผ๊ณผ testColorSorter() ํŽ‘
์…˜์„ ์ž‘์„ฑํ•˜๊ธฐ๋กœ ํ•˜์ž.

function testColorSorter() {
    makeColorSorter(.05, .05, .05, 0, 2, 4, 128, 127, 121);
    makeSortable();
}


<button id="clickMe" onclick="testColorSorter();">Click me</button>

์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ ๋’ค ํ”„๋กœํŒŒ์ผ๋ง์„ ๋‹ค์‹œ ํ•ด ๋ณด์ง€ ์•Š์œผ๋ฉด, ์˜ˆ์ธกํ•˜์ง€ ๋ชปํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์„ฑ๋Šฅ ๋ฌธ

์ œ๊ฐ€ ๋ฐ”๋€Œ์–ด ์งˆ ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฌผ๋ก  ์ด ์ •๋„ ์ˆ˜์ •์€ ๋ณ„ ๋ฌธ์ œ ์—†์–ด ๋ณด์ด์ง€๋งŒ, ๊ทธ๋ž˜๋„ ๋ญ”๊ฐ€ ์ž˜

๋ชป ๋ฐ”๊พผ ๊ฒƒ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•ด ๋ณด์ž. ์œ„์—์„œ ํ•ด ๋ณธ ๋ฐฉ

๋ฒ•์œผ๋กœ ํ”„๋กœํŒŒ์ผ ์ €์žฅ ๋ฒ„ํŠผ์„ ์ด์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ”„๋กœํŒŒ์ผ์„ ์ €์žฅํ•ด ๋ณด์•˜๋‹ค.
๋”ฑ ๋ณด๋‹ˆ, ๋‹ค์‹œ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•ด ๋ณธ ๊ฒฐ๊ณผ๋„ decimalToHex๊ฐ€ 4.23%๋กœ ๊ฐ€์žฅ ์˜ค๋žœ ์‹œ๊ฐ„์„
์†Œ๋น„ํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ๋‹ค. ์ด์ œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ํƒ€์ž„๋ผ์ธ์„ ํ™•์ธํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ์ค€์ ์„ ํ™•์ธํ•ด

๋ณด๋„๋ก ํ•˜์ž.




๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ธฐ ์ „์— ๋ช‡ ๊ฐ€์ง€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธด ํ•˜์ง€๋งŒ, ์ง€๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์•ผ
ํ•  ๋ถ€๋ถ„์€ ๋ฒ„ํŠผ์ด ํด๋ฆญ๋œ ํ›„๋ถ€ํ„ฐ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ๊ฐ€ ๊ทธ๋ ค์ง€๊ธฐ๊นŒ์ง€ ์–ด๋Š ์ •
๋„ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š”์ง€ ์ด๋‹ค. ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์€ 390ms์— ํด๋ฆญ๋˜์—ˆ๊ณ , ๊ทธ ๋’ค๋กœ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋Š”
์ž‘์—…์€ 726ms์— ์‹คํ–‰์ด ์‹œ์ž‘๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 726 โ€“ 390์€ 336์ด๋ฏ€๋กœ ์ƒˆ๋กœ์šด ๊ธฐ์ค€์ 

์€ 336ms๊ฐ€ ๋œ๋‹ค. ๋ฌผ๋ก  ์ด ๊ฐ’์€, ์ฒ˜์Œ์— ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํƒ€์ž„๋ผ์ธ์„ ์„ธ ๋ฒˆ ์ธก์ •ํ•˜

์—ฌ ํ‰๊ท ์„ ๋‚ธ ๊ฒฐ๊ณผ์ด๋‹ค.

์ด์ œ ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ , ๊ทธ ์ฝ”๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ CPU ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๋Š”์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.
์ด์ œ๋ถ€ํ„ฐ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•˜๊ธฐ๋กœ ํ•ด ๋ณด์ž.
์†๋„ ๊ฐœ์„ ํ•˜๊ธฐ

         ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋Š” ์–ด๋–ค ํŽ‘์…˜์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ์•Œ๋ ค์ค„ ๋ฟ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ทธ ํŽ‘์…˜์ด ์™œ ๋ฌธ์ œ

         ๊ฐ€ ์žˆ๋Š”์ง€๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์•Œ์•„๋ณด๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.

         function decimalToHex(d) {
             var hex = Number(d).toString(16);
             hex = "00".substr(0, 2 - hex.length) + hex;

             console.log('converting ' + d + ' to ' + hex);
             return hex;
         }
         ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ ๋‚ด์— ํฌํ•จ๋œ ํ•˜๋‚˜ํ•˜๋‚˜์˜ ์›๋“ค์€ 16์ง„์ˆ˜๋กœ ๋œ(์˜ˆ๋ฅผ ๋“ค์–ด #86F01B๋‚˜ #2456FE)

         ๋ฐฐ๊ฒฝ์ƒ‰ ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ‰์ƒ์ด ํ‘œ์‹œ๋œ๋‹ค. ์ด ๊ฐ’์€ ์•ž์—์„œ ๋‘ ์ž๋ฆฌ์”ฉ Red, Green, Blue

         ๊ฐ’์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,              ์˜ ๋ฐฐ๊ฒฝ์ƒ‰์€ #2456FE์ธ๋ฐ, ์ด ๊ฐ’์€ 10์ง„์ˆ˜๋กœ

         R = 36, G = 85, B = 254์ด๋‹ค. ๋ฌผ๋ก  ๊ฐ๊ฐ์˜ ๊ฐ’์€ 0๋ถ€ํ„ฐ 255 ์‚ฌ์ด์˜ ์ •์ˆ˜์ด๋‹ค.

         ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ decimalToHex ํŽ‘์…˜์€ 10์ง„์ˆ˜ ์ƒ‰์ƒ๊ฐ’์„ ๋ฐ›์•„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ 16์ง„์ˆ˜
         ์ƒ‰์ƒ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ธฐ๋Šฅ ์ž์ฒด๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•œ๋ฐ, ์ผ๋‹จ ์ฝ˜์†”์— ๋กœ๊ทธ

         ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

         ๋กœ๊ทธ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•œ ๋’ค ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ๋ณด๋‹ˆ, 16์ง„์ˆ˜์˜ ๊ธธ์ด๊ฐ€ 2์ž๋ฆฌ๊ฐ€ ์•ˆ ๋  ๊ฒฝ์šฐ โ€˜0โ€™์„
         ์™ผ์ชฝ์— ๋ง๋ถ™์ด๋Š” ์ž‘์—… 12์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋ณด์ธ๋‹ค. 13 ์ด ๊ธฐ๋Šฅ ์ž์ฒด๋ฅผ ์—†์•จ ์ˆ˜๋Š” ์—†๋Š” ์ด

         ์œ ๋Š”, CSS๊ฐ€ ์ƒ‰์ƒ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด 16์ง„์ˆ˜ ๊ฐ’์€ ํ•ญ์ƒ ๋‘ ์ž๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ
         ์ด๋‹ค. ์ฆ‰, 10์ง„์ˆ˜๋กœ 0๋ถ€ํ„ฐ 15๊นŒ์ง€์˜ ์ˆ˜๋Š” 16์ง„์ˆ˜๋กœ ํ•œ ์ž๋ฆฌ ์ˆ˜(๋˜๋Š” ๋ฌธ์ž)๋กœ ํ‘œ์‹œ๋˜๋Š”๋ฐ,

         ์ด ๊ฒฝ์šฐ ์•ž์— 0์„ ๋ถ™์—ฌ์ค˜์•ผ ํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค. ์ด ์ฝ”๋“œ๋ฅผ ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์•ฝ๊ฐ„ ์ˆ˜์ •

         ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

         function decimalToHex(d) {
             var hex = Number(d).toString(16);
             return hex.length === 1 ? '0' + hex : hex; }

12
     ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฐ ์ž‘์—…์„ ํŒจ๋”ฉ(padding)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์™ผ์ชฝ์— ๋ง๋ถ™์ด๋Š” ๊ฒƒ์„ LPAD, ์˜ค๋ฅธ์ชฝ์— ๋ง

๋ถ™์ด๋Š” ๊ฒƒ์„ RPAD๋ผ๊ณ  ํ•œ๋‹ค.

13
     โ€œhex = "00".substr(0, 2 - hex.length) + hex;โ€œ ์ฝ”๋“œ๋ฅผ ๋งํ•œ๋‹ค. ๋ถ„๋ช…ํžˆ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š”

๋ฐฉ๋ฒ•์ด์ง€๋งŒ, if๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค ์ฐธ์‹ ํ•˜๊ธด ํ•˜๋‹ค.
์„ธ ๋ฒˆ์งธ ๋ฒ„์ „ 14 ์€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ํŒจ๋”ฉ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์“ธ๋ฐ์—†์ด substr์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๋„๋ก
         ๋ณ€๊ฒฝํ•œ ๊ฒƒ์ด๋‹ค. ์ด ๋ฒ„์ „์„ ์ด์šฉํ•˜์—ฌ ๋‹ค์‹œ ํ”„๋กœํŒŒ์ผ๋ง์„ ์ˆ˜ํ–‰ํ•ด๋ณด๋‹ˆ ์ด์ œ ์‹คํ–‰ ์‹œ๊ฐ„์ด
         137ms๋กœ ์ค„์–ด๋“  ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ œ decimalToHex ํŽ‘์…˜์ด ์ „์ฒด ์‹œ๊ฐ„ ์ค‘

         0.04%๋งŒ์„ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. โ€“ ๋ชฉ๋ก์˜ ์•„๋ž˜์ชฝ์œผ๋กœ ๋‚ด๋ ค๊ฐ„ ๊ฒƒ์ด๋‹ค.




         ์ด์ œ jQuery์˜ e.extend.merge๊ฐ€ ๋ชฉ๋ก์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๊ณ  ๊ฐ€์žฅ ์˜ค๋žœ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๋Š” ๊ฒƒ
         ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ํŽ‘์…˜์ด ์ •ํ™•ํžˆ ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์–ด๋ ค์šด๋ฐ, ๊ทธ ์ด




14
     ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊พธ๋Š” ๊ฒƒ๊ณผ ์ด ์ฝ”๋“œ๋Š” ์–ด๋–ค ๊ฒƒ์ด ๋” ๋น ๋ฅผ๊นŒ?

     return d < 16 ? '0' + hex : hex;
์œ ๋Š” jQuery๊ฐ€ ์ตœ์†Œํ™”(minimized)๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 15 jQuery์˜ ๊ฐœ๋ฐœ์ž ๋ฒ„์ „์„ ์ด์šฉํ•˜
        ์—ฌ ํ™•์ธํ•ด ๋ณผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ƒ๊ฐํ•ด๋ณด๋‹ˆ makeColorSorter ํŽ‘์…˜์ด e.extend.merge ํŽ‘์…˜์„

        ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ makeColorSorter๋ฅผ ํŠœ๋‹ ํ•ด๋ณด๊ธฐ๋กœ ํ•˜์ž.



       ์ปจํ…์ธ  ๋ณ€๊ฒฝ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ

        ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ์˜ ๋ฌด์ง€๊ฐœ๋น› ์ƒ‰์ƒ๋“ค์€ ์‚ฌ์ธ(sine) ๊ณก์„ ์„ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ์ฝ”๋“œ๋Š” ์ƒ‰์ƒ
        ์ŠคํŽ™ํŠธ๋Ÿผ์˜ ์ค‘์‹ฌ์ ์„ ํ™•์ธํ•˜๊ณ  ๊ทธ ์ง€์ ๋ถ€ํ„ฐ ์ง€์ •๋œ ๋„ˆ๋น„๊นŒ์ง€ ์–ด๋–ค ํŒŒํ˜•(wave)๋ฅผ ์ƒ์„ฑํ•œ
        ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒ‰์ƒ์ด ๋ฌด์ง€๊ฐœ๋น›์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  Red, Green, Blue์˜ ์ฃผํŒŒ

        ์ˆ˜(frequency)๋ฅผ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ ๋ฌด์ง€๊ฐœ๋น› ์ƒ‰์ƒ์„ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ๋‹ค.

        function makeColorSorter(frequency1, frequency2, frequency3,
                                 phase1, phase2, phase3,
                                 center, width, len) {

            for (var i = 0; i < len; ++i)
            {
               var red = Math.floor(Math.sin(frequency1 * i + phase1) * width +
        center);
               var green = Math.floor(Math.sin(frequency2 * i + phase2) * width +
        center);
               var blue = Math.floor(Math.sin(frequency3 * i + phase3) * width +
        center);

                console.log('red: ' + decimalToHex(red));
                console.log('green: ' + decimalToHex(green));
                console.log('blue: ' + decimalToHex(blue));

               var div = $('<div class="colorBlock"></div>');
               div.css('background-color', '#' + decimalToHex(red) +
        decimalToHex(green) + decimalToHex(blue));
               $('#colors').append(div);

            }
        }



        ํŠœ๋‹์„ ์‹œ์ž‘ํ–ˆ์œผ๋ฉด, ๋‹น์—ฐํžˆ ๋กœ๊ทธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ œ๊ฑฐํ•œ๋‹ค. ์ด๋Ÿฐ ๋ฅ˜์˜ ๋กœ๊ทธ ์ฝ”๋“œ๋Š” ๋ถˆํ•„์š”ํ•œ
        ๋ฐ, ์ƒ๊ฐํ•ด๋ณด๋ฉด decimalToHex ํŽ‘์…˜์—์„œ๋„ ๋™์ผํ•œ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ–ˆ์œผ๋‹ˆ ๋‘ ๋ฒˆ ์ด์ƒ ์“ธ๋ฐ์—†



15
     ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํŠœ๋‹์„ ๋Œ€์ƒ์ด๋ผ๊ณ  ๋ณด๊ธฐ ์–ด๋ ต๋‹ค.
๋Š” ๋กœ๊ทธ ๋ถ€ํ•˜๋ฅผ ์ค€ ๊ฒƒ์ด๋‹ค.

์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ ๋ญ”๊ฐ€ DOM์— ๋งŽ์€ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋งค for๋ฌธ์„ ์ˆœํšŒํ•˜๋ฉด์„œ colors๋ผ๋Š”
๊ฐ์ฒด์— ์ƒˆ๋กœ์šด div ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ๋ณด์ธ๋‹ค. ์ด๊ฒƒ์ด e.extend.merge๋ฅผ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ด
ํ˜ธ์ถœํ•˜๋Š” ๋ฒ”์ธ์ผ๊นŒ? ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•œ ์‹คํ—˜์œผ๋กœ ์ด๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ, div ํƒœ๊ทธ๊ฐ€ for๋ฌธ ์•ˆ์—์„œ #colors์— ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ผ

๋‹จ colors๋ผ๋Š” ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€ํ•˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ colors ๋ฌธ์ž์—ด์„ #colors์— ํ•œ ๋ฒˆ๋งŒ ์ถ”๊ฐ€ํ•˜

๋„๋ก ๋ณ€๊ฒฝํ•ด๋ณด์ž.

function makeColorSorter(frequency1, frequency2, frequency3,
                         phase1, phase2, phase3,
                         center, width, len) {

    var colors = "";
    for (var i = 0; i < len; ++i)
    {
       var red = Math.floor(Math.sin(frequency1 * i + phase1) * width +
center);
       var green = Math.floor(Math.sin(frequency2 * i + phase2) * width +
center);
       var blue = Math.floor(Math.sin(frequency3 * i + phase3) * width +
center);

       colors += '<div class="colorBlock" style="background-color: #' +
           decimalToHex(red) + decimalToHex(green) + decimalToHex(blue) +
'"></div>';
    }

    $('#colors').append(colors);
}


์ฝ”๋“œ๋ฅผ ์•„์ฃผ ์กฐ๊ธˆ๋งŒ ๋ณ€๊ฒฝํ•˜์˜€์ง€๋งŒ, DOM์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์€ ๋‹จ ํ•œ ๋ฒˆ์œผ๋กœ ์ œํ•œ๋œ๋‹ค. ๋ณ€๊ฒฝ๋œ
์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํƒ€์ž„๋ผ์ธ์„ ํ™•์ธํ•ด๋ณด๋‹ˆ ์ด์ œ ์‹คํ–‰์†๋„๊ฐ€ 31ms๋กœ ์ค„์–ด๋“  ๊ฒƒ์„ ํ™•์ธํ• 
์ˆ˜ ์žˆ๋‹ค. DOM์„ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜์ •ํ•˜๋Š” ๋„ค ๋ฒˆ์งธ ๋ฒ„์ „์„ ์ด์šฉํ–ˆ๋”๋‹ˆ ์•ฝ 87%์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด

์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค. ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋กœ ํ™•์ธํ•ด๋ณด๋ฉด e.extend.merge ํŽ‘์…˜์ด ๋ชฉ๋ก์—์„œ

๋ณด์ด์ง€ ์•Š์„ ๋งŒํผ ๋นจ๋ผ์กŒ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ decimalToHex ํŽ‘์…˜์„ ์‚ฌ์šฉํ•  ํ•„์š”๋„ ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค. CSS 16์ง„์ˆ˜ ์ƒ‰์ƒ ์ฝ”

๋“œ ๋Œ€์‹  10์ง„์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๊ณ , ์ด๊ฒƒ์„ ์ด์šฉํ•˜๋ฉด ๊ตณ์ด 10์ง„์ˆ˜๋ฅผ 16์ง„์ˆ˜๋กœ
๋ณ€๊ฒฝํ•  ํ•„์š”๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. decimalToHex ํŽ‘์…˜์„ ์ œ๊ฑฐํ•œ makeColorSorter ํŽ‘์…˜์€ ๋‹ค

์Œ๊ณผ ๊ฐ™๋‹ค.
function makeColorSorter(frequency1, frequency2, frequency3,
                                 phase1, phase2, phase3,
                                 center, width, len) {

            var colors = "";
            for (var i = 0; i < len; ++i)
            {
               var red = Math.floor(Math.sin(frequency1 * i + phase1) * width +
        center);
               var green = Math.floor(Math.sin(frequency2 * i + phase2) * width +
        center);
               var blue = Math.floor(Math.sin(frequency3 * i + phase3) * width +
        center);

                 colors += '<div class="colorBlock" style="background-color: rgb(' +
                     red + ',' + green + ',' + blue + ')"></div>';
             }

             $('#colors').append(colors);
        }



        ๋‹ค์„ฏ ๋ฒˆ์งธ ๋ฒ„์ „์„ ์ด์šฉํ•˜๋ฉด ์ „์—๋Š” 28๋ผ์ธ์„ ์ด์šฉํ–ˆ๋˜ ์ฝ”๋“œ๊ฐ€ 26ms๊ฐ€ ๊ฑธ๋ฆฌ๋Š” 18๋ผ์ธ ์ฝ”

        ๋“œ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.



       ๊ฒฐ๋ก 16

        ๋ฌผ๋ก  ์‹ค์ œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ๋ณด๋‹ค ํ›จ์”ฌ ๋ณต์žกํ•  ๊ฒƒ์ด์ง€๋งŒ, ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ํŠœ๋‹์„

        ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.

        1.       ๊ธฐ์ค€์  ์„ธ์šฐ๊ธฐ: ํŠœ๋‹์„ ์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ• ์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
        2.       ๋ฌธ์ œ์  ๋ถ„๋ฆฌํ•˜๊ธฐ: ํŠœ๋‹์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ์ฝ”๋“œ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
        3.       ํŠœ๋‹ํ•˜๊ธฐ: ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด ๊ฐ€๋ฉด์„œ ์ง€์†์ ์œผ๋กœ ํƒ€์ž„๋ผ์ธ๊ณผ ํ”„๋กœํŒŒ์ผ์„
        ํ™•์ธํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.


        ์„ฑ๋Šฅ ํŠœ๋‹์„ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ทœ์น™์ด ์žˆ๋Š”๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.




16
     ์ด ๋ฌธ์„œ๋Š” JavaScript๋ฅผ ํŠœ๋‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ํŠœ๋‹ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ทœ
์น™์€ ๋ชจ๋“  ์–ธ์–ด์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ๋™์ผํ•œ ๋ฐฉ๋ฒ•์ด Java, ํ˜น์€ C# ์–ธ์–ด๋กœ ๋งŒ๋“ค์–ด์ง„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„

ํŠœ๋‹ํ•˜๊ธฐ ์œ„ํ•ด ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
1.   ๊ฐ€์žฅ ๋Š๋ฆฐ ๊ฒƒ๋ถ€ํ„ฐ: ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐ€์žฅ ํ™•์‹คํžˆ ํŠœ๋‹์˜ ํšจ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
2.   ๊ฐ€์™ธ ํ™˜๊ฒฝ์„ ํ†ต์ œํ•˜๋ผ: ์ปดํ“จํ„ฐ๋ฅผ ๋ฐ”๊พธ์—ˆ๊ฑฐ๋‚˜ ์ฝ”๋“œ์— ๋ญ”๊ฐ€ ๋ณ€๊ฒฝ์„ ํ•˜์˜€๋‹ค๋ฉด
๊ธฐ์ค€์ ์„ ๋‹ค์‹œ ์„ธ์›Œ์•ผ ํ•œ๋‹ค.
3.   ๋ฐ˜๋ณตํ•ด์„œ ๋ถ„์„ํ•˜๋ผ: ๋ช‡๋ช‡ ๋ณ€์น™๋“ค์ด ์ธก์ • ๊ฒฐ๊ณผ๋ฅผ ์™œ๊ณกํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์•ผ ํ•œ๋‹ค.


๋ˆ„๊ตฌ๋‚˜ ์ž์‹ ์˜ ์›น ์‚ฌ์ดํŠธ๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค. ๋ฐ˜๋Œ€๋กœ ์›น ์‚ฌ์ดํŠธ์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„
์ถ”๊ฐ€ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋” ํ™”๋ คํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ์ž‘์—…๋“ค์€ ๋Œ€์ฒด๋กœ

์›น ์‚ฌ์ดํŠธ๊ฐ€ ๋Š๋ ค์ง€๊ฒŒ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ž˜์„œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ทธ๋งŒํผ์˜ ์‹œ๊ฐ„์  ์ธ๋ ฅ์ 
๋น„์šฉ์„ ๋“ค์—ฌ์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ํŠœ๋‹์„ ์ด์šฉํ•œ ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ ์ตœ์ข…๋ฒ„์ „์˜ ์‹คํ–‰ ์‹œ๊ฐ„์€ 92%์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„
์ด๋ฃจ์–ด ๋ƒˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ์›น ์‚ฌ์ดํŠธ๋Š” ์–ผ๋งˆ๋‚˜ ๋นจ๋ผ์งˆ ์ˆ˜ ์žˆ์„๊นŒ?

Mais conteรบdo relacionado

Destaque

JQuery๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ์œ„์ ฏ ์ž‘์„ฑํ•˜๊ธฐ_(์ฃผ)์‹œ์Šคํฌ์œ ์•„์ด์•ค์”จ
JQuery๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ์œ„์ ฏ ์ž‘์„ฑํ•˜๊ธฐ_(์ฃผ)์‹œ์Šคํฌ์œ ์•„์ด์•ค์”จJQuery๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ์œ„์ ฏ ์ž‘์„ฑํ•˜๊ธฐ_(์ฃผ)์‹œ์Šคํฌ์œ ์•„์ด์•ค์”จ
JQuery๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ์œ„์ ฏ ์ž‘์„ฑํ•˜๊ธฐ_(์ฃผ)์‹œ์Šคํฌ์œ ์•„์ด์•ค์”จsys4u
ย 
iOS Human_Interface_Guidlines_#2_SYS4U
iOS Human_Interface_Guidlines_#2_SYS4UiOS Human_Interface_Guidlines_#2_SYS4U
iOS Human_Interface_Guidlines_#2_SYS4Usys4u
ย 
iOS Human Interface Guidlines #3_SYS4U
iOS Human Interface Guidlines #3_SYS4UiOS Human Interface Guidlines #3_SYS4U
iOS Human Interface Guidlines #3_SYS4Usys4u
ย 
Introduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&CIntroduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&Csys4u
ย 
Memory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4UMemory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4Usys4u
ย 
iOS Human Interface Guidlines #8_SYS4U
iOS Human Interface Guidlines #8_SYS4UiOS Human Interface Guidlines #8_SYS4U
iOS Human Interface Guidlines #8_SYS4Usys4u
ย 
iOS Human Interface Guidlines #5_SYS4U
iOS Human Interface Guidlines #5_SYS4UiOS Human Interface Guidlines #5_SYS4U
iOS Human Interface Guidlines #5_SYS4Usys4u
ย 
iOS_Human_Interface_Guidlines_#4_SYS4U
iOS_Human_Interface_Guidlines_#4_SYS4UiOS_Human_Interface_Guidlines_#4_SYS4U
iOS_Human_Interface_Guidlines_#4_SYS4Usys4u
ย 
30_eCommerce_sites_using_html5_SYS4U
30_eCommerce_sites_using_html5_SYS4U30_eCommerce_sites_using_html5_SYS4U
30_eCommerce_sites_using_html5_SYS4Usys4u
ย 
iOS Human Interface Guidlines #14_SYS4U
iOS Human Interface Guidlines #14_SYS4UiOS Human Interface Guidlines #14_SYS4U
iOS Human Interface Guidlines #14_SYS4Usys4u
ย 
Java_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4UJava_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4Usys4u
ย 
2013 UX Design Trend Report Part 3_SYS4U I&C
2013 UX Design Trend Report Part 3_SYS4U I&C2013 UX Design Trend Report Part 3_SYS4U I&C
2013 UX Design Trend Report Part 3_SYS4U I&Csys4u
ย 
Java reflection & introspection_SYS4U I&C
Java reflection & introspection_SYS4U I&CJava reflection & introspection_SYS4U I&C
Java reflection & introspection_SYS4U I&Csys4u
ย 
Implementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4UImplementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4Usys4u
ย 
Aspect Oriented Programming_SYS4U I&C
Aspect Oriented Programming_SYS4U I&CAspect Oriented Programming_SYS4U I&C
Aspect Oriented Programming_SYS4U I&Csys4u
ย 
NAT and Hole Punching_SYS4U I&C
NAT and Hole Punching_SYS4U I&CNAT and Hole Punching_SYS4U I&C
NAT and Hole Punching_SYS4U I&Csys4u
ย 
JavaEE6 Tutorial - Java Message Service_sys4u
JavaEE6 Tutorial - Java Message Service_sys4uJavaEE6 Tutorial - Java Message Service_sys4u
JavaEE6 Tutorial - Java Message Service_sys4usys4u
ย 
About Color_SYS4U
About Color_SYS4UAbout Color_SYS4U
About Color_SYS4Usys4u
ย 

Destaque (18)

JQuery๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ์œ„์ ฏ ์ž‘์„ฑํ•˜๊ธฐ_(์ฃผ)์‹œ์Šคํฌ์œ ์•„์ด์•ค์”จ
JQuery๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ์œ„์ ฏ ์ž‘์„ฑํ•˜๊ธฐ_(์ฃผ)์‹œ์Šคํฌ์œ ์•„์ด์•ค์”จJQuery๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ์œ„์ ฏ ์ž‘์„ฑํ•˜๊ธฐ_(์ฃผ)์‹œ์Šคํฌ์œ ์•„์ด์•ค์”จ
JQuery๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ์œ„์ ฏ ์ž‘์„ฑํ•˜๊ธฐ_(์ฃผ)์‹œ์Šคํฌ์œ ์•„์ด์•ค์”จ
ย 
iOS Human_Interface_Guidlines_#2_SYS4U
iOS Human_Interface_Guidlines_#2_SYS4UiOS Human_Interface_Guidlines_#2_SYS4U
iOS Human_Interface_Guidlines_#2_SYS4U
ย 
iOS Human Interface Guidlines #3_SYS4U
iOS Human Interface Guidlines #3_SYS4UiOS Human Interface Guidlines #3_SYS4U
iOS Human Interface Guidlines #3_SYS4U
ย 
Introduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&CIntroduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&C
ย 
Memory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4UMemory_leak_patterns_in_JavaScript_SYS4U
Memory_leak_patterns_in_JavaScript_SYS4U
ย 
iOS Human Interface Guidlines #8_SYS4U
iOS Human Interface Guidlines #8_SYS4UiOS Human Interface Guidlines #8_SYS4U
iOS Human Interface Guidlines #8_SYS4U
ย 
iOS Human Interface Guidlines #5_SYS4U
iOS Human Interface Guidlines #5_SYS4UiOS Human Interface Guidlines #5_SYS4U
iOS Human Interface Guidlines #5_SYS4U
ย 
iOS_Human_Interface_Guidlines_#4_SYS4U
iOS_Human_Interface_Guidlines_#4_SYS4UiOS_Human_Interface_Guidlines_#4_SYS4U
iOS_Human_Interface_Guidlines_#4_SYS4U
ย 
30_eCommerce_sites_using_html5_SYS4U
30_eCommerce_sites_using_html5_SYS4U30_eCommerce_sites_using_html5_SYS4U
30_eCommerce_sites_using_html5_SYS4U
ย 
iOS Human Interface Guidlines #14_SYS4U
iOS Human Interface Guidlines #14_SYS4UiOS Human Interface Guidlines #14_SYS4U
iOS Human Interface Guidlines #14_SYS4U
ย 
Java_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4UJava_Concurrency_Programming_SYS4U
Java_Concurrency_Programming_SYS4U
ย 
2013 UX Design Trend Report Part 3_SYS4U I&C
2013 UX Design Trend Report Part 3_SYS4U I&C2013 UX Design Trend Report Part 3_SYS4U I&C
2013 UX Design Trend Report Part 3_SYS4U I&C
ย 
Java reflection & introspection_SYS4U I&C
Java reflection & introspection_SYS4U I&CJava reflection & introspection_SYS4U I&C
Java reflection & introspection_SYS4U I&C
ย 
Implementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4UImplementing_AOP_in_Spring_SYS4U
Implementing_AOP_in_Spring_SYS4U
ย 
Aspect Oriented Programming_SYS4U I&C
Aspect Oriented Programming_SYS4U I&CAspect Oriented Programming_SYS4U I&C
Aspect Oriented Programming_SYS4U I&C
ย 
NAT and Hole Punching_SYS4U I&C
NAT and Hole Punching_SYS4U I&CNAT and Hole Punching_SYS4U I&C
NAT and Hole Punching_SYS4U I&C
ย 
JavaEE6 Tutorial - Java Message Service_sys4u
JavaEE6 Tutorial - Java Message Service_sys4uJavaEE6 Tutorial - Java Message Service_sys4u
JavaEE6 Tutorial - Java Message Service_sys4u
ย 
About Color_SYS4U
About Color_SYS4UAbout Color_SYS4U
About Color_SYS4U
ย 

Semelhante a JavaScript Profiling With The Chrome Developer Tools_SYS4U I&C

[NDC 2018] ํ…Œ๋ผ ์ฝ˜์†” ํฌํŒ…๊ธฐ - ํ˜„์„ธ๋Œ€ ์ฝ˜์†” ์ด์‹์„ ์œ„ํ•œ ๋ Œ๋”๋ง ์ตœ์ ํ™” ์—ฌ์ •
[NDC 2018] ํ…Œ๋ผ ์ฝ˜์†” ํฌํŒ…๊ธฐ - ํ˜„์„ธ๋Œ€ ์ฝ˜์†” ์ด์‹์„ ์œ„ํ•œ ๋ Œ๋”๋ง ์ตœ์ ํ™” ์—ฌ์ •[NDC 2018] ํ…Œ๋ผ ์ฝ˜์†” ํฌํŒ…๊ธฐ - ํ˜„์„ธ๋Œ€ ์ฝ˜์†” ์ด์‹์„ ์œ„ํ•œ ๋ Œ๋”๋ง ์ตœ์ ํ™” ์—ฌ์ •
[NDC 2018] ํ…Œ๋ผ ์ฝ˜์†” ํฌํŒ…๊ธฐ - ํ˜„์„ธ๋Œ€ ์ฝ˜์†” ์ด์‹์„ ์œ„ํ•œ ๋ Œ๋”๋ง ์ตœ์ ํ™” ์—ฌ์ •SangHyeok Hong
ย 
C์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐ
C์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐC์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐ
C์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐjaypi Ko
ย 
C์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐ
C์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐC์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐ
C์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐjaypi Ko
ย 
๋นŒ๋“œ๊ด€๋ฆฌ ๋ฐ ๋””๋ฒ„๊น… (2010๋…„ ์ž๋ฃŒ)
๋นŒ๋“œ๊ด€๋ฆฌ ๋ฐ ๋””๋ฒ„๊น… (2010๋…„ ์ž๋ฃŒ)๋นŒ๋“œ๊ด€๋ฆฌ ๋ฐ ๋””๋ฒ„๊น… (2010๋…„ ์ž๋ฃŒ)
๋นŒ๋“œ๊ด€๋ฆฌ ๋ฐ ๋””๋ฒ„๊น… (2010๋…„ ์ž๋ฃŒ)YEONG-CHEON YOU
ย 
์˜คํ”ˆ๋“œ๋ก ๋งต ํ•œ๊ตญ์–ด ์‚ฌ์šฉ์ž ์ง€์นจ์„œ
์˜คํ”ˆ๋“œ๋ก ๋งต ํ•œ๊ตญ์–ด ์‚ฌ์šฉ์ž ์ง€์นจ์„œ์˜คํ”ˆ๋“œ๋ก ๋งต ํ•œ๊ตญ์–ด ์‚ฌ์šฉ์ž ์ง€์นจ์„œ
์˜คํ”ˆ๋“œ๋ก ๋งต ํ•œ๊ตญ์–ด ์‚ฌ์šฉ์ž ์ง€์นจ์„œByeong-Hyeok Yu
ย 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial DjangoKwangyoun Jung
ย 
ใ€Žแ„‹แ…ตแ„‘แ…ฆแ†จแ„แ…ตแ„‡แ…ณ แ„ƒแ…ตแ„‡แ…ฅแ„€แ…ตแ†ผใ€ - ๋””๋ฒ„๊น… ์ง€์˜ฅ์—์„œ ํƒˆ์ถœํ•˜๋Š” 66๊ฐ€์ง€ ์ „๋žต๊ณผ ๊ธฐ๋ฒ•
ใ€Žแ„‹แ…ตแ„‘แ…ฆแ†จแ„แ…ตแ„‡แ…ณ แ„ƒแ…ตแ„‡แ…ฅแ„€แ…ตแ†ผใ€ - ๋””๋ฒ„๊น… ์ง€์˜ฅ์—์„œ ํƒˆ์ถœํ•˜๋Š” 66๊ฐ€์ง€ ์ „๋žต๊ณผ ๊ธฐ๋ฒ•ใ€Žแ„‹แ…ตแ„‘แ…ฆแ†จแ„แ…ตแ„‡แ…ณ แ„ƒแ…ตแ„‡แ…ฅแ„€แ…ตแ†ผใ€ - ๋””๋ฒ„๊น… ์ง€์˜ฅ์—์„œ ํƒˆ์ถœํ•˜๋Š” 66๊ฐ€์ง€ ์ „๋žต๊ณผ ๊ธฐ๋ฒ•
ใ€Žแ„‹แ…ตแ„‘แ…ฆแ†จแ„แ…ตแ„‡แ…ณ แ„ƒแ…ตแ„‡แ…ฅแ„€แ…ตแ†ผใ€ - ๋””๋ฒ„๊น… ์ง€์˜ฅ์—์„œ ํƒˆ์ถœํ•˜๋Š” 66๊ฐ€์ง€ ์ „๋žต๊ณผ ๊ธฐ๋ฒ•๋ณต์—ฐ ์ด
ย 
๊น€์„ฑํ›ˆ - ๋›ฐ์–ด๋‚œ ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋˜๋Š” ๋ฐฉ๋ฒ•
๊น€์„ฑํ›ˆ - ๋›ฐ์–ด๋‚œ ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋˜๋Š” ๋ฐฉ๋ฒ•๊น€์„ฑํ›ˆ - ๋›ฐ์–ด๋‚œ ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋˜๋Š” ๋ฐฉ๋ฒ•
๊น€์„ฑํ›ˆ - ๋›ฐ์–ด๋‚œ ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋˜๋Š” ๋ฐฉ๋ฒ•์„ฑํ›ˆ ๊น€
ย 
์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ
์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ
์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐMickey SJ Lee
ย 
์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ
์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ
์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐSeungjae Lee
ย 
แ„‹แ…ฐแ†ธ Front-End แ„‰แ…ตแ†ฏแ„†แ…ฎ แ„‹แ…ตแ„‹แ…ฃแ„€แ…ต
แ„‹แ…ฐแ†ธ Front-End แ„‰แ…ตแ†ฏแ„†แ…ฎ แ„‹แ…ตแ„‹แ…ฃแ„€แ…ตแ„‹แ…ฐแ†ธ Front-End แ„‰แ…ตแ†ฏแ„†แ…ฎ แ„‹แ…ตแ„‹แ…ฃแ„€แ…ต
แ„‹แ…ฐแ†ธ Front-End แ„‰แ…ตแ†ฏแ„†แ…ฎ แ„‹แ…ตแ„‹แ…ฃแ„€แ…ตJinKwon Lee
ย 
[NEXT] Android ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ํ”„๋กœ์ ํŠธ 4์ผ์ฐจ (Networking)
[NEXT] Android ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ํ”„๋กœ์ ํŠธ 4์ผ์ฐจ (Networking)[NEXT] Android ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ํ”„๋กœ์ ํŠธ 4์ผ์ฐจ (Networking)
[NEXT] Android ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ํ”„๋กœ์ ํŠธ 4์ผ์ฐจ (Networking)YoungSu Son
ย 
์ฒญ๊ฐ•๋Œ€ ํŠน๊ฐ• - ํ”„๋กœ์ ํŠธ ์ œ๋Œ€๋กœ ํ•ด๋ณด๊ธฐ
์ฒญ๊ฐ•๋Œ€ ํŠน๊ฐ• - ํ”„๋กœ์ ํŠธ ์ œ๋Œ€๋กœ ํ•ด๋ณด๊ธฐ์ฒญ๊ฐ•๋Œ€ ํŠน๊ฐ• - ํ”„๋กœ์ ํŠธ ์ œ๋Œ€๋กœ ํ•ด๋ณด๊ธฐ
์ฒญ๊ฐ•๋Œ€ ํŠน๊ฐ• - ํ”„๋กœ์ ํŠธ ์ œ๋Œ€๋กœ ํ•ด๋ณด๊ธฐChris Ohk
ย 
ํผ๋ธ”๋ฆฌ์…”, ํ”„๋ก ํŠธ์—”๋“œ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋‹ค
ํผ๋ธ”๋ฆฌ์…”, ํ”„๋ก ํŠธ์—”๋“œ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋‹คํผ๋ธ”๋ฆฌ์…”, ํ”„๋ก ํŠธ์—”๋“œ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋‹ค
ํผ๋ธ”๋ฆฌ์…”, ํ”„๋ก ํŠธ์—”๋“œ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋‹ค์ •์„ ์–‘
ย 
๋‹น์‹ ์˜ ๋””๋ฒ„๊น…์— ๋‹ˆ์ฝ”๋‹ˆ์ฝ”๋‹ˆ
๋‹น์‹ ์˜ ๋””๋ฒ„๊น…์— ๋‹ˆ์ฝ”๋‹ˆ์ฝ”๋‹ˆ๋‹น์‹ ์˜ ๋””๋ฒ„๊น…์— ๋‹ˆ์ฝ”๋‹ˆ์ฝ”๋‹ˆ
๋‹น์‹ ์˜ ๋””๋ฒ„๊น…์— ๋‹ˆ์ฝ”๋‹ˆ์ฝ”๋‹ˆLusain Kim
ย 
LucideWorks Banana ์†Œ๊ฐœ
LucideWorks Banana ์†Œ๊ฐœ LucideWorks Banana ์†Œ๊ฐœ
LucideWorks Banana ์†Œ๊ฐœ SuHyun Jeon
ย 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rdPark Jonggun
ย 

Semelhante a JavaScript Profiling With The Chrome Developer Tools_SYS4U I&C (20)

[NDC 2018] ํ…Œ๋ผ ์ฝ˜์†” ํฌํŒ…๊ธฐ - ํ˜„์„ธ๋Œ€ ์ฝ˜์†” ์ด์‹์„ ์œ„ํ•œ ๋ Œ๋”๋ง ์ตœ์ ํ™” ์—ฌ์ •
[NDC 2018] ํ…Œ๋ผ ์ฝ˜์†” ํฌํŒ…๊ธฐ - ํ˜„์„ธ๋Œ€ ์ฝ˜์†” ์ด์‹์„ ์œ„ํ•œ ๋ Œ๋”๋ง ์ตœ์ ํ™” ์—ฌ์ •[NDC 2018] ํ…Œ๋ผ ์ฝ˜์†” ํฌํŒ…๊ธฐ - ํ˜„์„ธ๋Œ€ ์ฝ˜์†” ์ด์‹์„ ์œ„ํ•œ ๋ Œ๋”๋ง ์ตœ์ ํ™” ์—ฌ์ •
[NDC 2018] ํ…Œ๋ผ ์ฝ˜์†” ํฌํŒ…๊ธฐ - ํ˜„์„ธ๋Œ€ ์ฝ˜์†” ์ด์‹์„ ์œ„ํ•œ ๋ Œ๋”๋ง ์ตœ์ ํ™” ์—ฌ์ •
ย 
๋ฐœํ‘œ์›๊ณ 
๋ฐœํ‘œ์›๊ณ ๋ฐœํ‘œ์›๊ณ 
๋ฐœํ‘œ์›๊ณ 
ย 
C์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐ
C์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐC์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐ
C์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐ
ย 
C์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐ
C์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐC์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐ
C์–ธ์–ด ๋“ค์–ด๊ฐ€๊ธฐ
ย 
๋นŒ๋“œ๊ด€๋ฆฌ ๋ฐ ๋””๋ฒ„๊น… (2010๋…„ ์ž๋ฃŒ)
๋นŒ๋“œ๊ด€๋ฆฌ ๋ฐ ๋””๋ฒ„๊น… (2010๋…„ ์ž๋ฃŒ)๋นŒ๋“œ๊ด€๋ฆฌ ๋ฐ ๋””๋ฒ„๊น… (2010๋…„ ์ž๋ฃŒ)
๋นŒ๋“œ๊ด€๋ฆฌ ๋ฐ ๋””๋ฒ„๊น… (2010๋…„ ์ž๋ฃŒ)
ย 
์˜คํ”ˆ๋“œ๋ก ๋งต ํ•œ๊ตญ์–ด ์‚ฌ์šฉ์ž ์ง€์นจ์„œ
์˜คํ”ˆ๋“œ๋ก ๋งต ํ•œ๊ตญ์–ด ์‚ฌ์šฉ์ž ์ง€์นจ์„œ์˜คํ”ˆ๋“œ๋ก ๋งต ํ•œ๊ตญ์–ด ์‚ฌ์šฉ์ž ์ง€์นจ์„œ
์˜คํ”ˆ๋“œ๋ก ๋งต ํ•œ๊ตญ์–ด ์‚ฌ์šฉ์ž ์ง€์นจ์„œ
ย 
About Visual C++ 10
About  Visual C++ 10About  Visual C++ 10
About Visual C++ 10
ย 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
ย 
ใ€Žแ„‹แ…ตแ„‘แ…ฆแ†จแ„แ…ตแ„‡แ…ณ แ„ƒแ…ตแ„‡แ…ฅแ„€แ…ตแ†ผใ€ - ๋””๋ฒ„๊น… ์ง€์˜ฅ์—์„œ ํƒˆ์ถœํ•˜๋Š” 66๊ฐ€์ง€ ์ „๋žต๊ณผ ๊ธฐ๋ฒ•
ใ€Žแ„‹แ…ตแ„‘แ…ฆแ†จแ„แ…ตแ„‡แ…ณ แ„ƒแ…ตแ„‡แ…ฅแ„€แ…ตแ†ผใ€ - ๋””๋ฒ„๊น… ์ง€์˜ฅ์—์„œ ํƒˆ์ถœํ•˜๋Š” 66๊ฐ€์ง€ ์ „๋žต๊ณผ ๊ธฐ๋ฒ•ใ€Žแ„‹แ…ตแ„‘แ…ฆแ†จแ„แ…ตแ„‡แ…ณ แ„ƒแ…ตแ„‡แ…ฅแ„€แ…ตแ†ผใ€ - ๋””๋ฒ„๊น… ์ง€์˜ฅ์—์„œ ํƒˆ์ถœํ•˜๋Š” 66๊ฐ€์ง€ ์ „๋žต๊ณผ ๊ธฐ๋ฒ•
ใ€Žแ„‹แ…ตแ„‘แ…ฆแ†จแ„แ…ตแ„‡แ…ณ แ„ƒแ…ตแ„‡แ…ฅแ„€แ…ตแ†ผใ€ - ๋””๋ฒ„๊น… ์ง€์˜ฅ์—์„œ ํƒˆ์ถœํ•˜๋Š” 66๊ฐ€์ง€ ์ „๋žต๊ณผ ๊ธฐ๋ฒ•
ย 
๊น€์„ฑํ›ˆ - ๋›ฐ์–ด๋‚œ ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋˜๋Š” ๋ฐฉ๋ฒ•
๊น€์„ฑํ›ˆ - ๋›ฐ์–ด๋‚œ ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋˜๋Š” ๋ฐฉ๋ฒ•๊น€์„ฑํ›ˆ - ๋›ฐ์–ด๋‚œ ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋˜๋Š” ๋ฐฉ๋ฒ•
๊น€์„ฑํ›ˆ - ๋›ฐ์–ด๋‚œ ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋˜๋Š” ๋ฐฉ๋ฒ•
ย 
์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ
์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ
์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ
ย 
(์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ)์Šคํ”„๋ง๋ถ€ํŠธ๊ฐœ์š” ๋ฐ HelloWorld ๋”ฐ๋ผํ•˜๊ธฐ
(์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ)์Šคํ”„๋ง๋ถ€ํŠธ๊ฐœ์š” ๋ฐ HelloWorld ๋”ฐ๋ผํ•˜๊ธฐ(์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ)์Šคํ”„๋ง๋ถ€ํŠธ๊ฐœ์š” ๋ฐ HelloWorld ๋”ฐ๋ผํ•˜๊ธฐ
(์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ)์Šคํ”„๋ง๋ถ€ํŠธ๊ฐœ์š” ๋ฐ HelloWorld ๋”ฐ๋ผํ•˜๊ธฐ
ย 
์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ
์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ
์˜จ๋ผ์ธ ๊ฒŒ์ž„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋™์ ์–ธ์–ด๋กœ ๋งŒ๋“ค๊ธฐ
ย 
แ„‹แ…ฐแ†ธ Front-End แ„‰แ…ตแ†ฏแ„†แ…ฎ แ„‹แ…ตแ„‹แ…ฃแ„€แ…ต
แ„‹แ…ฐแ†ธ Front-End แ„‰แ…ตแ†ฏแ„†แ…ฎ แ„‹แ…ตแ„‹แ…ฃแ„€แ…ตแ„‹แ…ฐแ†ธ Front-End แ„‰แ…ตแ†ฏแ„†แ…ฎ แ„‹แ…ตแ„‹แ…ฃแ„€แ…ต
แ„‹แ…ฐแ†ธ Front-End แ„‰แ…ตแ†ฏแ„†แ…ฎ แ„‹แ…ตแ„‹แ…ฃแ„€แ…ต
ย 
[NEXT] Android ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ํ”„๋กœ์ ํŠธ 4์ผ์ฐจ (Networking)
[NEXT] Android ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ํ”„๋กœ์ ํŠธ 4์ผ์ฐจ (Networking)[NEXT] Android ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ํ”„๋กœ์ ํŠธ 4์ผ์ฐจ (Networking)
[NEXT] Android ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ํ”„๋กœ์ ํŠธ 4์ผ์ฐจ (Networking)
ย 
์ฒญ๊ฐ•๋Œ€ ํŠน๊ฐ• - ํ”„๋กœ์ ํŠธ ์ œ๋Œ€๋กœ ํ•ด๋ณด๊ธฐ
์ฒญ๊ฐ•๋Œ€ ํŠน๊ฐ• - ํ”„๋กœ์ ํŠธ ์ œ๋Œ€๋กœ ํ•ด๋ณด๊ธฐ์ฒญ๊ฐ•๋Œ€ ํŠน๊ฐ• - ํ”„๋กœ์ ํŠธ ์ œ๋Œ€๋กœ ํ•ด๋ณด๊ธฐ
์ฒญ๊ฐ•๋Œ€ ํŠน๊ฐ• - ํ”„๋กœ์ ํŠธ ์ œ๋Œ€๋กœ ํ•ด๋ณด๊ธฐ
ย 
ํผ๋ธ”๋ฆฌ์…”, ํ”„๋ก ํŠธ์—”๋“œ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋‹ค
ํผ๋ธ”๋ฆฌ์…”, ํ”„๋ก ํŠธ์—”๋“œ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋‹คํผ๋ธ”๋ฆฌ์…”, ํ”„๋ก ํŠธ์—”๋“œ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋‹ค
ํผ๋ธ”๋ฆฌ์…”, ํ”„๋ก ํŠธ์—”๋“œ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ•˜๋‹ค
ย 
๋‹น์‹ ์˜ ๋””๋ฒ„๊น…์— ๋‹ˆ์ฝ”๋‹ˆ์ฝ”๋‹ˆ
๋‹น์‹ ์˜ ๋””๋ฒ„๊น…์— ๋‹ˆ์ฝ”๋‹ˆ์ฝ”๋‹ˆ๋‹น์‹ ์˜ ๋””๋ฒ„๊น…์— ๋‹ˆ์ฝ”๋‹ˆ์ฝ”๋‹ˆ
๋‹น์‹ ์˜ ๋””๋ฒ„๊น…์— ๋‹ˆ์ฝ”๋‹ˆ์ฝ”๋‹ˆ
ย 
LucideWorks Banana ์†Œ๊ฐœ
LucideWorks Banana ์†Œ๊ฐœ LucideWorks Banana ์†Œ๊ฐœ
LucideWorks Banana ์†Œ๊ฐœ
ย 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd
ย 

Mais de sys4u

Html5_SYS4U
Html5_SYS4UHtml5_SYS4U
Html5_SYS4Usys4u
ย 
Web Accessibility_SYS4U
Web Accessibility_SYS4UWeb Accessibility_SYS4U
Web Accessibility_SYS4Usys4u
ย 
iOS Human Interface Guidlines #15_SYS4U
iOS Human Interface Guidlines #15_SYS4UiOS Human Interface Guidlines #15_SYS4U
iOS Human Interface Guidlines #15_SYS4Usys4u
ย 
iOS Human Interface Guidlines #13_SYS4U
iOS Human Interface Guidlines #13_SYS4UiOS Human Interface Guidlines #13_SYS4U
iOS Human Interface Guidlines #13_SYS4Usys4u
ย 
UX Layout Design_SYS4U
UX Layout Design_SYS4UUX Layout Design_SYS4U
UX Layout Design_SYS4Usys4u
ย 
Advanced SWOT Analysis of e-commerce_SYS4U
Advanced SWOT Analysis of e-commerce_SYS4UAdvanced SWOT Analysis of e-commerce_SYS4U
Advanced SWOT Analysis of e-commerce_SYS4Usys4u
ย 
Proxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4UProxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4Usys4u
ย 
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&CUIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&Csys4u
ย 
Promotions_2nd_SYS4U I&C
Promotions_2nd_SYS4U I&CPromotions_2nd_SYS4U I&C
Promotions_2nd_SYS4U I&Csys4u
ย 

Mais de sys4u (9)

Html5_SYS4U
Html5_SYS4UHtml5_SYS4U
Html5_SYS4U
ย 
Web Accessibility_SYS4U
Web Accessibility_SYS4UWeb Accessibility_SYS4U
Web Accessibility_SYS4U
ย 
iOS Human Interface Guidlines #15_SYS4U
iOS Human Interface Guidlines #15_SYS4UiOS Human Interface Guidlines #15_SYS4U
iOS Human Interface Guidlines #15_SYS4U
ย 
iOS Human Interface Guidlines #13_SYS4U
iOS Human Interface Guidlines #13_SYS4UiOS Human Interface Guidlines #13_SYS4U
iOS Human Interface Guidlines #13_SYS4U
ย 
UX Layout Design_SYS4U
UX Layout Design_SYS4UUX Layout Design_SYS4U
UX Layout Design_SYS4U
ย 
Advanced SWOT Analysis of e-commerce_SYS4U
Advanced SWOT Analysis of e-commerce_SYS4UAdvanced SWOT Analysis of e-commerce_SYS4U
Advanced SWOT Analysis of e-commerce_SYS4U
ย 
Proxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4UProxy_design_pattern_in_Java_SYS4U
Proxy_design_pattern_in_Java_SYS4U
ย 
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&CUIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
UIX UNIT_Several UI Teminologies Easy To Miss_SYS4U I&C
ย 
Promotions_2nd_SYS4U I&C
Promotions_2nd_SYS4U I&CPromotions_2nd_SYS4U I&C
Promotions_2nd_SYS4U I&C
ย 

JavaScript Profiling With The Chrome Developer Tools_SYS4U I&C

  • 1. ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์„ ์ด์šฉํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœํŒŒ์ผ๋ง ํ•˜๊ธฐ ์ €์ž: Zack Grossbart ์ž‘์„ฑ์ผ: 2012 ๋…„ 6 ์›” 12 ์ผ ๋Œ€์ƒ: ์ดˆ๊ธ‰ ๊ฐœ๋ฐœ์ž ๋ฒˆ์—ญ: ๊น€ํ˜•์„ ๋ฒˆ์—ญ์ผ: 2013 ๋…„ 2 ์›” 18 ์ผ ์›๋ฌธ์ฃผ์†Œ: http://coding.smashingmagazine.com/2012/06/12/javascript-profiling-chrome- developer-tools/ ์›น ์‚ฌ์ดํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ด์ œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ฐจ๋ก€๋‹ค. ์›น ์‚ฌ์ดํŠธ์˜ ์„ฑ ๋Šฅ์ด๋ผ๋Š” ๊ฒƒ์€ ๋‘ ๊ฐ€์ง€ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”๋ฐ, ํ•˜๋‚˜๋Š” ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„์ด๊ณ  ๋‹ค๋ฅธ ํ•˜ ๋‚˜๋Š” ํŽ˜์ด์ง€ ๋‚ด ์ฝ”๋“œ์˜ ์‹คํ–‰ ์†๋„๊ฐ€ ๊ทธ๊ฒƒ์ด๋‹ค. ๋ฏธ๋‹ˆ๋งˆ์ด์ €1๋‚˜ CDN2 ๋“ฑ ์ˆ˜๋งŽ์€ ์™ธ๋ถ€ ์„œ๋น„ ์Šค๋“ค์„ ์ด์šฉํ•˜๋ฉด ๋กœ๋”ฉ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฝ”๋“œ๊ฐ€ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ์˜จ์ „ํžˆ ์šฐ๋ฆฌ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋ชซ์ด๋‹ค. ์ฝ”๋“œ์ƒ์˜ ์•„์ฃผ ์ž‘์€ ๋ณ€๊ฒฝ์ด ์„ฑ๋Šฅ์— ์—„์ฒญ๋‚œ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ ์ €๊ธฐ์— ์‚ฐ์žฌ๋˜์–ด ์žˆ ๋Š” ๊ณ ์ž‘ ๋ช‡ ๊ฐœ์˜ ์ฝ”๋“œ ๋ผ์ธ๋“ค ๋•Œ๋ฌธ์— ์›น ์‚ฌ์ดํŠธ๊ฐ€ ๋น›์˜ ์†๋„๋กœ ์‘๋‹ตํ•  ์ˆ˜๋„, ํ˜น์€ ์•„์˜ˆ ๋‹ค์šด๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์‘๋‹ต์„ ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด(Chrome Developer Tools)์„ ์ด์šฉํ•˜์—ฌ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ๋‘์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•  ๊ฒƒ์ด๋‹ค. ๊ธฐ์ค€์  ์ •ํ•˜๊ธฐ ๋จผ์ € ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ(Color Sorter)๋ผ๋Š” ๊ฐ„๋‹จํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ดํŽด๋ณด๊ธฐ๋กœ ํ•˜์ž. ์ด ํ™”๋ฉด์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด์–ด๋ณด๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ฌด์ง€๊ฐœ ์ƒ‰์˜ ์›๋“ค์ด ๊ฒฉ์ž๋กœ ์ •๋ ฌ๋˜์–ด ๋ณด์—ฌ์งˆ 1 Minimizer. Javascript ๋“ฑ์˜ ์ฝ”๋“œ ๋‚ด์˜ ๊ณต๋ฐฑ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๋ณ€์ˆ˜/ํŽ‘์…˜ ์ด๋ฆ„์„ ์งง๊ฒŒ ๋งŒ๋“œ๋Š” ๋“ฑ, ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•˜๋Š” ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งํ•œ๋‹ค. 2 Content Delivery Network. ๋ฒˆ์—ญํ•ด์„œ ์ปจํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ๋ผ๊ณ  ํ•œ๋‹ค. ์‚ฌ์šฉ์ด ๋นˆ๋ฒˆํ•œ ์ปจํ…์ธ ๋ฅผ ์„œ๋ฒ„์— ์ €์žฅํ•œ ๋’ค, ๋ณ‘๋ชฉ์ง€์ ์„ ํ”ผํ•ด ๊ณ ์† ์„œ๋น„์Šคํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งํ•œ๋‹ค.
  • 2. ๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๊ฐ๊ฐ์˜ ์›์„ ๋“œ๋ž˜๊ทธ-์•ค๋“œ-๋“œ๋กญํ•˜์—ฌ ์ด๋ฆฌ์ €๋ฆฌ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์› ๋“ค์€ CSS๋กœ ์Šคํƒ€์ผ์ด ์ ์šฉ๋œ div ํƒœ๊ทธ์ด๋‹ค. (๋ฌด์ง€๊ฐœ ์ƒ‰์˜ div๋Š” โ€œMaking Annoying Rainbows in JavaScript.โ€๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค์—ˆ๋‹ค.) ์›น ํŽ˜์ด์ง€ ์ž์ฒด๋Š” ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋กœ๋”ฉ๋˜์ง€๋งŒ, ์ „์ฒด๊ฐ€ ๋‹ค ๊ทธ๋ ค์ง€๊ธฐ ์ „์— ๋ช‡ ๋ฒˆ ๊นœ๋นก์ด๋Š” ๊ฒƒ ์„ ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋ฐ”๋กœ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•  ์‹œ๊ฐ„์ธ ๊ฒƒ์ด๋‹ค. ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž‘์—…์„ ํ•  ๋•Œ์—๋Š” ํ•ญ์ƒ ์ด ํ”„๋กœ๊ทธ๋žจ์ด ์–ผ๋งˆ๋‚˜ ๋Š๋ฆฐ์ง€, ํ˜น์€ ์–ผ ๋งˆ๋‚˜ ๋นจ๋ผ์•ผ ํ•˜๋Š”์ง€ ๋“ฑ์„ ์ •์˜ํ•œ ๊ธฐ์ค€์ (baseline)์„ ๋งŒ๋“ค๊ณ  ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค. ๊ธฐ์ค€์ ์ด ์žˆ ์–ด์•ผ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•œ ์ž‘์—…์ด ์–ผ๋งˆ๋‚˜ ํšจ๊ณผ์ ์ด์—ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ทธ์— ๋”ฐ๋ฅธ ํŠธ๋ ˆ์ด ๋“œ์˜คํ”„ 3 ๋Š” ๋ฌด์—‡์ด๊ณ  ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฌธ์„œ์—์„œ๋Š” ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์„ ์ด์šฉ ํ•ด์„œ ์ด ์ž‘์—…์„ ์ง„ํ–‰ํ•  ๊ฒƒ์ด๋‹ค. 3 Tradeoff. Tradeoff๋Š” ์–ด๋–ค ์ผ์„ ๋ชฉ์ ์„ ์ด๋ฃจ๊ธฐ ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๋ฐ˜๋Œ€๊ธ‰๋ถ€์˜ ๋น„์šฉ ์„ ๋งํ•œ๋‹ค. (๋ฐ˜๋“œ์‹œ ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ) ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด tradeoff์˜ ์˜ˆ์ด๋‹ค.
  • 3. ํ”„๋กœํŒŒ์ผ๋Ÿฌ4๋Š” ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์˜ ํ•œ ๋ถ€๋ถ„์œผ๋กœ, ํฌ๋กฌ์ด ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์€ ๋ Œ์น˜ 5 ์•„์ด์ฝ˜์„ ํด๋ฆญํ•œ ๋’ค ๋„๊ตฌ(Tools) ๋ฉ”๋‰ด ํ•˜์œ„์˜ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ (Developer Tools) ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ์‹คํ–‰๋œ๋‹ค. 6 Firebug 7 ์—๋„ ํ”„๋กœํŒŒ์ผ๋ง ๊ธฐ๋Šฅ์ด ์žˆ๊ธด ํ•˜ ์ง€๋งŒ, ํฌ๋กฌ์ด๋‚˜ ์‚ฌํŒŒ๋ฆฌ ๊ฐ™์€ ์›นํ‚ท ๋ธŒ๋ผ์šฐ์ €๋“ค์ด ์ฝ”๋“œ๋ฅผ ํ”„๋กœํŒŒ์ผ๋ง ํ•˜๊ฑฐ๋‚˜ ํƒ€์ž„๋ผ์ธ์„ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ ๊ฐ€์žฅ ์ข‹๋‹ค. ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์€ ์Šคํ”ผ๋“œ ํŠธ๋ ˆ์ด์„œ(Speed Tracer 8 )๋ผ๊ณ  ํ•˜๋Š” ๋ฉ‹์ง„ ์ด๋ฒคํŠธ ํŠธ๋ ˆ์ด์Šค ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๊ธฐ์ค€์ ์„ ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋‹จ ํƒ€์ž„๋ผ์ธ์„ ํ™•์ธํ•˜๊ธฐ๋กœ ํ•˜์ž. ํƒ€์ž„๋ผ์ธ์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. (1) ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์„ ์ด์šฉํ•˜์—ฌ โ€œTimelineโ€ ํƒญ์„ ์—ด์–ด๋‘๊ณ  ์›น ํŽ˜์ด์ง€์— ์ ‘์†ํ•œ๋‹ค. (2) ์ขŒ์ธก ํ•˜๋‹จ์˜ ์ž‘์€ ๊ฒ€์€ ์ƒ‰ ์›์„ ํด๋ฆญํ•˜๋ฉด ํƒ€์ž„๋ผ์ธ ์ €์žฅ์ด ์‹œ์ž‘๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฒ€์€ ์ƒ‰ ์›์ด ๋ถ‰์€ ์ƒ‰์œผ๋กœ ๋ณ€ํ•œ๋‹ค. (3) ํ™”๋ฉด ์ƒ์—์„œ ํ”„๋กœํŒŒ์ผ๋ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ๋™์ž‘์„ ์‹คํ–‰ํ•œ๋‹ค. (4) (3)์—์„œ ๋ถ‰์€ ์ƒ‰์œผ๋กœ ๋ณ€ํ•œ ์ž‘์€ ์›์„ ํด๋ฆญํ•˜์—ฌ ์ €์žฅ์„ ์ข…๋ฃŒํ•œ๋‹ค. ํƒ€์ž„๋ผ์ธ ์ €์žฅ ๊ธฐ๋Šฅ์€ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์ด ์‹œ์ž‘๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์‹œ์ž‘๋˜์ง€ ์•Š๋Š”๋‹ค. (ํฌ๋กฌ์ด ๊ทธ ์ • ๋„๋Š” ๋˜‘๋˜‘ํ•˜๋‹ค.) ํ‰๊ท ์„ ๋‚ด๋ณด๊ธฐ ์œ„ํ•ด ์ด ์„ธ ๋ฒˆ์„ ์‹คํ–‰ํ•ด ๋ณด์•˜๋Š”๋ฐ, ํ•„์ž์˜ ์ปดํ“จํ„ฐ์—์„œ๋Š” ์ฒซ ๋ฒˆ์งธ ์‹œ๋„์—์„œ ๊ฐ€์žฅ ๋Šฆ๊ฒŒ ์‹คํ–‰๋˜์—ˆ๋‹ค. 4 ์ปดํ“จํ„ฐ ์‚ฌ์ด์–ธ์Šค์—์„œ ํ”„๋กœํŒŒ์ผ๋ง์ด๋ผ ํ•จ์€, ํ”„๋กœ๊ทธ๋žจ ๋ณต์žก๋„, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ๋“ฑ ํ”„๋กœ ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ƒํ™ฉ์— ๋Œ€ํ•ด ๋™์ ์œผ๋กœ ๋ถ„์„ํ•˜๋Š” ํ–‰์œ„๋ฅผ ๋งํ•œ๋‹ค. ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•˜๋Š” ๋ชฉ์ ์€ ๊ถ๊ทน์ ์œผ ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„๋‚ด๊ธฐ ์œ„ํ•จ์ด๋‹ค. ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•  ์ˆ˜ ์žˆ ๋„๋ก ๋„์™€์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 5 ์˜ˆ์ „ ๋ฒ„์ „์˜ ํฌ๋กฌ์—๋Š” ํ™”๋ฉด ์šฐ์ƒ๋‹จ์— ๋ Œ์น˜ ๋ชจ์–‘์˜ ์•„์ด์ฝ˜์ด ์žˆ์—ˆ์ง€๋งŒ, ํ˜„์žฌ๋Š” ไธ‰์ž ๋ชจ์–‘์˜ ์•„์ด ์ฝ˜์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค. 6 ํฌ๋กฌ ๊ฐœ๋ฐœ์ž ํˆด์€ CTRL+SHIFT+I๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ด ์ˆ˜๋„ ์žˆ๋‹ค. 7 http://getfirebug.com 8 https://developers.google.com/web-toolkit/speedtracer/
  • 4. ๊ธฐ์ค€์ ์„ ์žก๊ธฐ ์œ„ํ•ด ํƒ€์ž„๋ผ์ธ์„ ์ด์šฉํ•˜์—ฌ ์ธก์ •ํ•ด ๋ณธ ๊ฒฐ๊ณผ, ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ตœ์ดˆ ์š”์ฒญ์œผ๋กœ๋ถ€ํ„ฐ ํ™”๋ฉด์˜ ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ๊ทธ๋ ค์ง€๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„์„ ์ธก์ •ํ•ด ๋ณด๋‹ˆ, ํ‰๊ท  1.25์ดˆ๊ฐ€ ์†Œ์š”๋˜์—ˆ๋‹ค. ์•„์ฃผ ๋Š๋ฆฐ ๊ฒƒ์€ ์•„๋‹ˆ์—ˆ์ง€๋งŒ, ์ •๋ณด์˜ ์–‘์ด ๊ทธ๋ฆฌ ๋งŽ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•˜๋ฉด ๊ดœ์ฐฎ๋‹ค๊ณ  ํ•  ์ˆ˜ ์—†๋Š” ์ˆ˜์ค€์ด๋‹ค. ์ด์ œ ์‹คํ–‰ ์†๋„๋ฅผ ์ข€ ๋” ๋น ๋ฅด๊ฒŒ ํ•˜๊ณ  ์‹ถ์ง€๋งŒ, ๊ทธ๋Ÿฌ๋ ค๋ฉด ์ •ํ™•ํžˆ ์–ด๋–ค ์ด์œ  ๋•Œ๋ฌธ์— ๋Š๋ ค์ง€ ๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค. ์ด์ œ ํ”„๋กœํŒŒ์ผ๋Ÿฌ์˜ ๋„์›€์„ ๋ฐ›์„ ์ฐจ๋ก€์ด๋‹ค. ํ”„๋กœํŒŒ์ผ ํ•ด๋ณด๊ธฐ ํƒ€์ž„๋ผ์ธ์„ ๋ณด๋ฉด ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์•Œ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์–ด๋–ค ์ด์œ ๋กœ ๊ทธ ์ • ๋„์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜๋Š” ์—†๋‹ค. ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ์”ฉ ๋ฐ”๊ฟ”๊ฐ€๋ฉด์„œ ํƒ€์ž„๋ผ์ธ์„ ๊ณ„์† ์ธก ์ •ํ•ด ๋ณผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ๊ทธ์ € ๋•Œ๋ ค ๋งž์ถ”๋Š” ์ •๋„๋ผ๊ณ ๋ฐ–์— ํ•  ์ˆ˜ ์—†๋‹ค. โ€œProfilesโ€ ํƒญ์„ ์ด์šฉํ•˜๋ฉด ์‹ค์ œ๋กœ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€๋ฅผ ๋“œ๋””์–ด ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ์–ด๋–ค ๊ธฐ๋Šฅ์ด ๊ฐ€์žฅ ์‹œ๊ฐ„์„ ๋งŽ์ด ์†Œ๋น„ํ•˜๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด์ œ ํ”„๋กœํŒŒ์ผ ๊ธฐ์ค€์ ์„ ์žก๊ธฐ ์œ„ํ•ด โ€œProfilesโ€ ํƒญ์„ ์ด์šฉํ•˜๊ธฐ๋กœ ํ•ด ๋ณด์ž. ํ”„๋กœํŒŒ์ผ๋Ÿฌ ํƒญ์—์„œ ๋‹ค
  • 5. ์Œ ์„ธ ๊ฐ€์ง€ ํ”„๋กœํŒŒ์ผ๋ง ์œ ํ˜•์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. 1. JavaScript CPU profile: JavaScript ๊ฐ€ CPU ์‹œ๊ฐ„์„ ์–ผ๋งˆ๋‚˜ ์†Œ๋น„ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ”„๋กœํŒŒ์ผ๋ง ์ •๋ณด ์ˆ˜์ง‘ 2. CSS selector profile: CSS ์…€๋ ‰ํ„ฐ๊ฐ€ ์‹คํ–‰๋˜๋Š”๋ฐ CPU ์‹œ๊ฐ„์„ ์–ผ๋งˆ๋‚˜ ์†Œ๋น„ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ”„๋กœํŒŒ์ผ๋ง ์ •๋ณด ์ˆ˜์ง‘ 3. Heap snapshot: JavaScript ๊ฐ์ฒด์— ์˜ํ•ด ์†Œ๋น„๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ํ”„๋กœํŒŒ์ผ๋ง ์ •๋ณด ์ˆ˜์ง‘ ์ง€๊ธˆ ์ด ์ˆœ๊ฐ„์—๋Š” JavaScript์˜ ์‹œ๊ฐ„์  ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋ฏ€๋กœ, JavaScript CPU profile ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. ํƒ€์ž„๋ผ์ธ์„ ์ €์žฅํ–ˆ๋˜ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, โ€œProfilesโ€ ํƒญ์—์„œ ํ”„๋กœํŒŒ์ผ์„ ์‹œ์ž‘ํ•˜๊ณ , ํŽ˜์ด์ง€๋ฅผ ๊ฐฑ์‹ ํ•œ ๋’ค, ํ”„๋กœํŒŒ์ผ์„ ์ข…๋ฃŒํ•˜๋ฉด ๋œ๋‹ค. ํ”„๋กœํŒŒ์ผ๋ง ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ณ ์„œ ๋”ฑ ๋Š๋ผ๋Š” ์ ์€, ๋ญ”๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์ƒ‰ ์ƒ ์ •๋ ฌ๊ธฐ๋Š” jQuery์™€ jQuery UI๋ฅผ ์ด์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค ์•ˆ์—๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ด€๋ฆฌํ•œ๋‹ค๊ฑฐ๋‚˜ ์ •๊ทœํ‘œํ˜„์‹์„ ํŒŒ์‹ฑํ•˜๋Š” ๋“ฑ ์ˆ˜๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ ๋‹ค. ๋ฌผ๋ก  ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ์ธ decimalToHex ํŽ‘์…˜๊ณผ makeColorSorter ํŽ‘์…˜์ด ๋ชฉ๋ก์˜ ์ œ ์ผ ์œ„์ชฝ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒƒ๋„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋‘ ํŽ‘์…˜๋“ค์ด ํ•ฉ์ณ์„œ 13.2%์˜ CPU ์‹œ๊ฐ„์„
  • 6. ์†Œ๋น„ํ•˜๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์ด ์ฝ”๋“œ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์ž‘์—…์„ ์œ„ํ•œ ์ข‹์€ ์‹œ์ž‘์ ์ด ๋  ์ˆ˜ ์žˆ ์„ ๊ฒƒ์ด๋‹ค.9 ํŽ‘์…˜์˜ ์˜†์— ์žˆ๋Š” ๊ฒ€์€์ƒ‰ ์‚ผ๊ฐํ˜•์„ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ํŽ‘์…˜์— ๋Œ€ํ•œ ์ฝœ ์Šคํƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ ๋‹ค. decimalToHex ์˜†์˜ ์‚ผ๊ฐํ˜•์„ ํด๋ฆญํ•ด๋ณด๋‹ˆ, makeColorSorter๊ฐ€ decimalToHex๋ฅผ ํ˜ธ์ถœํ–ˆ ์œผ๋ฉฐ, makeColorSorter๋Š” $(document).ready๊ฐ€ ํ˜ธ์ถœํ•œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค. ์‹ค์ œ ์ฝ”๋“œ๋Š” ๋‹ค ์Œ๊ณผ ๊ฐ™๋‹ค. $(document).ready(function() { makeColorSorter(.05, .05, .05, 0, 2, 4, 128, 127, 121); makeSortable(); }); ์ด ํŽ‘์…˜๋“ค์ด ์–ด๋””์—์„œ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด๋ณด๋‹ˆ, ์ƒ‰์ƒ์„ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ10 ์ด ์„ฑ๋Šฅ์„ ์ข€๋จน๋Š” ์ฃผ๋œ ์š”์ธ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ณดํ†ต์€ ์ •๋ ฌ ๊ฐ€๋Šฅํ•œ ์š”์†Œ๋“ค ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€๋งŒ, ์ด ์ฝ”๋“œ์—์„œ๋Š” DOM 11 ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜ ๋Š” ๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์–˜๊ธฐ๋‹ค. ์ด์ œ ๋ฒ”์ธ์„ ์ฐพ์•˜์œผ๋‹ˆ ํŠœ๋‹์„ ์‹œ์ž‘ํ•˜๋ ค ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ ์ด์ „์—, ์•ž์œผ๋กœ ์ˆ˜์ •ํ•  ๋‚ด์šฉ์ด ๋‹ค๋ฅธ ์ฝ”๋“œ์— ์˜ํ–ฅ์„ ๋ฐ›๊ฑฐ๋‚˜ ๋ผ์น˜์ง€ ์•Š๋„๋ก ๊ณ ๋ฆฝํ•˜๊ณ  ์‹ถ๋‹ค. ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋”ฉ๋˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋งŽ ์€ ์ผ๋“ค์ด ์ผ์–ด๋‚˜๋Š”๋ฐ, ํŠœ๋‹์„ ํ•˜๊ณ  ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ด๋“ค์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌธ์ œ ์ง€์  ๊ณ ๋ฆฝ์‹œํ‚ค๊ธฐ ๋„ํ๋จผํŠธ(document)๊ฐ€ ์ค€๋น„(ready) ๋˜์—ˆ์„ ๋•Œ ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ๋Œ€์‹ ์—, ๋ฒ„ํŠผ ํ•˜๋‚˜ ๋ฅผ ํด๋ฆญํ•œ ๋’ค์—์•ผ ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ๊ฐ€ ๋กœ๋”ฉ๋˜๋„๋ก ํ•˜๋Š” ๋‘ ๋ฒˆ์งธ ๋ฒ„์ „์„ ๋งŒ๋“ค๋ ค ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ, ์šฐ๋ฆฌ์˜ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋„ํ๋จผํŠธ์˜ ๋กœ๋”ฉ์œผ๋กœ๋ถ€ํ„ฐ ๊ณ ๋ฆฝ(isolate)๋  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , ์ข€ ๋” 9 ๋‹จ์ˆœํžˆ CPU ์ ์œ ์œจ์ด ๋†’๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ ํŠœ๋‹์ด ๋Œ€์ƒ์ด ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์ข‹์€ ์‹œ์ž‘์ ์ด ๋  ์ˆ˜๋Š” ์žˆ๋‹ค. 10 ์—ฌ๊ธฐ์„œ๋Š” makeSortable() ํŽ‘์…˜ 11 Document Object Model. DOM์€ W3C์—์„œ ๊ฐœ๋ฐœํ•œ ๊ทœ๊ฒฉ์œผ๋กœ, HTML์ด๋‚˜ XML ๋ฌธ์„œ์˜ ์ •๋ณด๋ฅผ ๊ฐ์ฒดํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค. DOM์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์„ค๋ช…์€ http://en.wikipedia.org/wiki/Document_Object_Model๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค.
  • 7. ์‰ฝ๊ฒŒ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ๋‚˜์ค‘์— ์„ฑ๋Šฅ ํŠœ๋‹์ด ๋๋‚˜๊ณ  ๋‚˜๋ฉด ์ด ๋ถ€๋ถ„๋งŒ ์˜ˆ์ „ ๋ฐฉ์‹์œผ๋กœ ๋Œ๋ ค๋†“๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ์•„๋ž˜์™€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด์„œ ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ๊ฐ€ ๋™์ž‘ํ•˜๋„๋ก โ€œclickMeโ€ ๋ฒ„ํŠผ๊ณผ testColorSorter() ํŽ‘ ์…˜์„ ์ž‘์„ฑํ•˜๊ธฐ๋กœ ํ•˜์ž. function testColorSorter() { makeColorSorter(.05, .05, .05, 0, 2, 4, 128, 127, 121); makeSortable(); } <button id="clickMe" onclick="testColorSorter();">Click me</button> ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ ๋’ค ํ”„๋กœํŒŒ์ผ๋ง์„ ๋‹ค์‹œ ํ•ด ๋ณด์ง€ ์•Š์œผ๋ฉด, ์˜ˆ์ธกํ•˜์ง€ ๋ชปํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์„ฑ๋Šฅ ๋ฌธ ์ œ๊ฐ€ ๋ฐ”๋€Œ์–ด ์งˆ ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฌผ๋ก  ์ด ์ •๋„ ์ˆ˜์ •์€ ๋ณ„ ๋ฌธ์ œ ์—†์–ด ๋ณด์ด์ง€๋งŒ, ๊ทธ๋ž˜๋„ ๋ญ”๊ฐ€ ์ž˜ ๋ชป ๋ฐ”๊พผ ๊ฒƒ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•ด ๋ณด์ž. ์œ„์—์„œ ํ•ด ๋ณธ ๋ฐฉ ๋ฒ•์œผ๋กœ ํ”„๋กœํŒŒ์ผ ์ €์žฅ ๋ฒ„ํŠผ์„ ์ด์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ”„๋กœํŒŒ์ผ์„ ์ €์žฅํ•ด ๋ณด์•˜๋‹ค.
  • 8. ๋”ฑ ๋ณด๋‹ˆ, ๋‹ค์‹œ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ•ด ๋ณธ ๊ฒฐ๊ณผ๋„ decimalToHex๊ฐ€ 4.23%๋กœ ๊ฐ€์žฅ ์˜ค๋žœ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ๋‹ค. ์ด์ œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ํƒ€์ž„๋ผ์ธ์„ ํ™•์ธํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ์ค€์ ์„ ํ™•์ธํ•ด ๋ณด๋„๋ก ํ•˜์ž. ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ธฐ ์ „์— ๋ช‡ ๊ฐ€์ง€ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธด ํ•˜์ง€๋งŒ, ์ง€๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์•ผ ํ•  ๋ถ€๋ถ„์€ ๋ฒ„ํŠผ์ด ํด๋ฆญ๋œ ํ›„๋ถ€ํ„ฐ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ๊ฐ€ ๊ทธ๋ ค์ง€๊ธฐ๊นŒ์ง€ ์–ด๋Š ์ • ๋„ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š”์ง€ ์ด๋‹ค. ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์€ 390ms์— ํด๋ฆญ๋˜์—ˆ๊ณ , ๊ทธ ๋’ค๋กœ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋Š” ์ž‘์—…์€ 726ms์— ์‹คํ–‰์ด ์‹œ์ž‘๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 726 โ€“ 390์€ 336์ด๋ฏ€๋กœ ์ƒˆ๋กœ์šด ๊ธฐ์ค€์  ์€ 336ms๊ฐ€ ๋œ๋‹ค. ๋ฌผ๋ก  ์ด ๊ฐ’์€, ์ฒ˜์Œ์— ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํƒ€์ž„๋ผ์ธ์„ ์„ธ ๋ฒˆ ์ธก์ •ํ•˜ ์—ฌ ํ‰๊ท ์„ ๋‚ธ ๊ฒฐ๊ณผ์ด๋‹ค. ์ด์ œ ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ , ๊ทธ ์ฝ”๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ CPU ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๋Š”์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด์ œ๋ถ€ํ„ฐ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•˜๊ธฐ๋กœ ํ•ด ๋ณด์ž.
  • 9. ์†๋„ ๊ฐœ์„ ํ•˜๊ธฐ ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋Š” ์–ด๋–ค ํŽ‘์…˜์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ์•Œ๋ ค์ค„ ๋ฟ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ทธ ํŽ‘์…˜์ด ์™œ ๋ฌธ์ œ ๊ฐ€ ์žˆ๋Š”์ง€๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์•Œ์•„๋ณด๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. function decimalToHex(d) { var hex = Number(d).toString(16); hex = "00".substr(0, 2 - hex.length) + hex; console.log('converting ' + d + ' to ' + hex); return hex; } ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ ๋‚ด์— ํฌํ•จ๋œ ํ•˜๋‚˜ํ•˜๋‚˜์˜ ์›๋“ค์€ 16์ง„์ˆ˜๋กœ ๋œ(์˜ˆ๋ฅผ ๋“ค์–ด #86F01B๋‚˜ #2456FE) ๋ฐฐ๊ฒฝ์ƒ‰ ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ‰์ƒ์ด ํ‘œ์‹œ๋œ๋‹ค. ์ด ๊ฐ’์€ ์•ž์—์„œ ๋‘ ์ž๋ฆฌ์”ฉ Red, Green, Blue ๊ฐ’์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์˜ ๋ฐฐ๊ฒฝ์ƒ‰์€ #2456FE์ธ๋ฐ, ์ด ๊ฐ’์€ 10์ง„์ˆ˜๋กœ R = 36, G = 85, B = 254์ด๋‹ค. ๋ฌผ๋ก  ๊ฐ๊ฐ์˜ ๊ฐ’์€ 0๋ถ€ํ„ฐ 255 ์‚ฌ์ด์˜ ์ •์ˆ˜์ด๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ decimalToHex ํŽ‘์…˜์€ 10์ง„์ˆ˜ ์ƒ‰์ƒ๊ฐ’์„ ๋ฐ›์•„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ 16์ง„์ˆ˜ ์ƒ‰์ƒ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ธฐ๋Šฅ ์ž์ฒด๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•œ๋ฐ, ์ผ๋‹จ ์ฝ˜์†”์— ๋กœ๊ทธ ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋กœ๊ทธ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•œ ๋’ค ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ๋ณด๋‹ˆ, 16์ง„์ˆ˜์˜ ๊ธธ์ด๊ฐ€ 2์ž๋ฆฌ๊ฐ€ ์•ˆ ๋  ๊ฒฝ์šฐ โ€˜0โ€™์„ ์™ผ์ชฝ์— ๋ง๋ถ™์ด๋Š” ์ž‘์—… 12์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋ณด์ธ๋‹ค. 13 ์ด ๊ธฐ๋Šฅ ์ž์ฒด๋ฅผ ์—†์•จ ์ˆ˜๋Š” ์—†๋Š” ์ด ์œ ๋Š”, CSS๊ฐ€ ์ƒ‰์ƒ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด 16์ง„์ˆ˜ ๊ฐ’์€ ํ•ญ์ƒ ๋‘ ์ž๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ ์ด๋‹ค. ์ฆ‰, 10์ง„์ˆ˜๋กœ 0๋ถ€ํ„ฐ 15๊นŒ์ง€์˜ ์ˆ˜๋Š” 16์ง„์ˆ˜๋กœ ํ•œ ์ž๋ฆฌ ์ˆ˜(๋˜๋Š” ๋ฌธ์ž)๋กœ ํ‘œ์‹œ๋˜๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ ์•ž์— 0์„ ๋ถ™์—ฌ์ค˜์•ผ ํ•œ๋‹ค๋Š” ๋ง์ด๋‹ค. ์ด ์ฝ”๋“œ๋ฅผ ์‚ผํ•ญ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์•ฝ๊ฐ„ ์ˆ˜์ • ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. function decimalToHex(d) { var hex = Number(d).toString(16); return hex.length === 1 ? '0' + hex : hex; } 12 ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฐ ์ž‘์—…์„ ํŒจ๋”ฉ(padding)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์™ผ์ชฝ์— ๋ง๋ถ™์ด๋Š” ๊ฒƒ์„ LPAD, ์˜ค๋ฅธ์ชฝ์— ๋ง ๋ถ™์ด๋Š” ๊ฒƒ์„ RPAD๋ผ๊ณ  ํ•œ๋‹ค. 13 โ€œhex = "00".substr(0, 2 - hex.length) + hex;โ€œ ์ฝ”๋“œ๋ฅผ ๋งํ•œ๋‹ค. ๋ถ„๋ช…ํžˆ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, if๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋ณด๋‹ค ์ฐธ์‹ ํ•˜๊ธด ํ•˜๋‹ค.
  • 10. ์„ธ ๋ฒˆ์งธ ๋ฒ„์ „ 14 ์€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ํŒจ๋”ฉ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์“ธ๋ฐ์—†์ด substr์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝํ•œ ๊ฒƒ์ด๋‹ค. ์ด ๋ฒ„์ „์„ ์ด์šฉํ•˜์—ฌ ๋‹ค์‹œ ํ”„๋กœํŒŒ์ผ๋ง์„ ์ˆ˜ํ–‰ํ•ด๋ณด๋‹ˆ ์ด์ œ ์‹คํ–‰ ์‹œ๊ฐ„์ด 137ms๋กœ ์ค„์–ด๋“  ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ œ decimalToHex ํŽ‘์…˜์ด ์ „์ฒด ์‹œ๊ฐ„ ์ค‘ 0.04%๋งŒ์„ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. โ€“ ๋ชฉ๋ก์˜ ์•„๋ž˜์ชฝ์œผ๋กœ ๋‚ด๋ ค๊ฐ„ ๊ฒƒ์ด๋‹ค. ์ด์ œ jQuery์˜ e.extend.merge๊ฐ€ ๋ชฉ๋ก์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๊ณ  ๊ฐ€์žฅ ์˜ค๋žœ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๋Š” ๊ฒƒ ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ํŽ‘์…˜์ด ์ •ํ™•ํžˆ ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์–ด๋ ค์šด๋ฐ, ๊ทธ ์ด 14 ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊พธ๋Š” ๊ฒƒ๊ณผ ์ด ์ฝ”๋“œ๋Š” ์–ด๋–ค ๊ฒƒ์ด ๋” ๋น ๋ฅผ๊นŒ? return d < 16 ? '0' + hex : hex;
  • 11. ์œ ๋Š” jQuery๊ฐ€ ์ตœ์†Œํ™”(minimized)๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 15 jQuery์˜ ๊ฐœ๋ฐœ์ž ๋ฒ„์ „์„ ์ด์šฉํ•˜ ์—ฌ ํ™•์ธํ•ด ๋ณผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ƒ๊ฐํ•ด๋ณด๋‹ˆ makeColorSorter ํŽ‘์…˜์ด e.extend.merge ํŽ‘์…˜์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ makeColorSorter๋ฅผ ํŠœ๋‹ ํ•ด๋ณด๊ธฐ๋กœ ํ•˜์ž. ์ปจํ…์ธ  ๋ณ€๊ฒฝ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ์˜ ๋ฌด์ง€๊ฐœ๋น› ์ƒ‰์ƒ๋“ค์€ ์‚ฌ์ธ(sine) ๊ณก์„ ์„ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ์ฝ”๋“œ๋Š” ์ƒ‰์ƒ ์ŠคํŽ™ํŠธ๋Ÿผ์˜ ์ค‘์‹ฌ์ ์„ ํ™•์ธํ•˜๊ณ  ๊ทธ ์ง€์ ๋ถ€ํ„ฐ ์ง€์ •๋œ ๋„ˆ๋น„๊นŒ์ง€ ์–ด๋–ค ํŒŒํ˜•(wave)๋ฅผ ์ƒ์„ฑํ•œ ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ƒ‰์ƒ์ด ๋ฌด์ง€๊ฐœ๋น›์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  Red, Green, Blue์˜ ์ฃผํŒŒ ์ˆ˜(frequency)๋ฅผ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ ๋ฌด์ง€๊ฐœ๋น› ์ƒ‰์ƒ์„ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ๋‹ค. function makeColorSorter(frequency1, frequency2, frequency3, phase1, phase2, phase3, center, width, len) { for (var i = 0; i < len; ++i) { var red = Math.floor(Math.sin(frequency1 * i + phase1) * width + center); var green = Math.floor(Math.sin(frequency2 * i + phase2) * width + center); var blue = Math.floor(Math.sin(frequency3 * i + phase3) * width + center); console.log('red: ' + decimalToHex(red)); console.log('green: ' + decimalToHex(green)); console.log('blue: ' + decimalToHex(blue)); var div = $('<div class="colorBlock"></div>'); div.css('background-color', '#' + decimalToHex(red) + decimalToHex(green) + decimalToHex(blue)); $('#colors').append(div); } } ํŠœ๋‹์„ ์‹œ์ž‘ํ–ˆ์œผ๋ฉด, ๋‹น์—ฐํžˆ ๋กœ๊ทธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ œ๊ฑฐํ•œ๋‹ค. ์ด๋Ÿฐ ๋ฅ˜์˜ ๋กœ๊ทธ ์ฝ”๋“œ๋Š” ๋ถˆํ•„์š”ํ•œ ๋ฐ, ์ƒ๊ฐํ•ด๋ณด๋ฉด decimalToHex ํŽ‘์…˜์—์„œ๋„ ๋™์ผํ•œ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ–ˆ์œผ๋‹ˆ ๋‘ ๋ฒˆ ์ด์ƒ ์“ธ๋ฐ์—† 15 ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํŠœ๋‹์„ ๋Œ€์ƒ์ด๋ผ๊ณ  ๋ณด๊ธฐ ์–ด๋ ต๋‹ค.
  • 12. ๋Š” ๋กœ๊ทธ ๋ถ€ํ•˜๋ฅผ ์ค€ ๊ฒƒ์ด๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ ๋ญ”๊ฐ€ DOM์— ๋งŽ์€ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋งค for๋ฌธ์„ ์ˆœํšŒํ•˜๋ฉด์„œ colors๋ผ๋Š” ๊ฐ์ฒด์— ์ƒˆ๋กœ์šด div ํƒœ๊ทธ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ๋ณด์ธ๋‹ค. ์ด๊ฒƒ์ด e.extend.merge๋ฅผ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ด ํ˜ธ์ถœํ•˜๋Š” ๋ฒ”์ธ์ผ๊นŒ? ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•œ ์‹คํ—˜์œผ๋กœ ์ด๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ, div ํƒœ๊ทธ๊ฐ€ for๋ฌธ ์•ˆ์—์„œ #colors์— ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ผ ๋‹จ colors๋ผ๋Š” ๋ฌธ์ž์—ด์— ์ถ”๊ฐ€ํ•˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ colors ๋ฌธ์ž์—ด์„ #colors์— ํ•œ ๋ฒˆ๋งŒ ์ถ”๊ฐ€ํ•˜ ๋„๋ก ๋ณ€๊ฒฝํ•ด๋ณด์ž. function makeColorSorter(frequency1, frequency2, frequency3, phase1, phase2, phase3, center, width, len) { var colors = ""; for (var i = 0; i < len; ++i) { var red = Math.floor(Math.sin(frequency1 * i + phase1) * width + center); var green = Math.floor(Math.sin(frequency2 * i + phase2) * width + center); var blue = Math.floor(Math.sin(frequency3 * i + phase3) * width + center); colors += '<div class="colorBlock" style="background-color: #' + decimalToHex(red) + decimalToHex(green) + decimalToHex(blue) + '"></div>'; } $('#colors').append(colors); } ์ฝ”๋“œ๋ฅผ ์•„์ฃผ ์กฐ๊ธˆ๋งŒ ๋ณ€๊ฒฝํ•˜์˜€์ง€๋งŒ, DOM์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์€ ๋‹จ ํ•œ ๋ฒˆ์œผ๋กœ ์ œํ•œ๋œ๋‹ค. ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ํƒ€์ž„๋ผ์ธ์„ ํ™•์ธํ•ด๋ณด๋‹ˆ ์ด์ œ ์‹คํ–‰์†๋„๊ฐ€ 31ms๋กœ ์ค„์–ด๋“  ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. DOM์„ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜์ •ํ•˜๋Š” ๋„ค ๋ฒˆ์งธ ๋ฒ„์ „์„ ์ด์šฉํ–ˆ๋”๋‹ˆ ์•ฝ 87%์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค. ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ”„๋กœํŒŒ์ผ๋Ÿฌ๋กœ ํ™•์ธํ•ด๋ณด๋ฉด e.extend.merge ํŽ‘์…˜์ด ๋ชฉ๋ก์—์„œ ๋ณด์ด์ง€ ์•Š์„ ๋งŒํผ ๋นจ๋ผ์กŒ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ decimalToHex ํŽ‘์…˜์„ ์‚ฌ์šฉํ•  ํ•„์š”๋„ ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค. CSS 16์ง„์ˆ˜ ์ƒ‰์ƒ ์ฝ” ๋“œ ๋Œ€์‹  10์ง„์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๊ณ , ์ด๊ฒƒ์„ ์ด์šฉํ•˜๋ฉด ๊ตณ์ด 10์ง„์ˆ˜๋ฅผ 16์ง„์ˆ˜๋กœ ๋ณ€๊ฒฝํ•  ํ•„์š”๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. decimalToHex ํŽ‘์…˜์„ ์ œ๊ฑฐํ•œ makeColorSorter ํŽ‘์…˜์€ ๋‹ค ์Œ๊ณผ ๊ฐ™๋‹ค.
  • 13. function makeColorSorter(frequency1, frequency2, frequency3, phase1, phase2, phase3, center, width, len) { var colors = ""; for (var i = 0; i < len; ++i) { var red = Math.floor(Math.sin(frequency1 * i + phase1) * width + center); var green = Math.floor(Math.sin(frequency2 * i + phase2) * width + center); var blue = Math.floor(Math.sin(frequency3 * i + phase3) * width + center); colors += '<div class="colorBlock" style="background-color: rgb(' + red + ',' + green + ',' + blue + ')"></div>'; } $('#colors').append(colors); } ๋‹ค์„ฏ ๋ฒˆ์งธ ๋ฒ„์ „์„ ์ด์šฉํ•˜๋ฉด ์ „์—๋Š” 28๋ผ์ธ์„ ์ด์šฉํ–ˆ๋˜ ์ฝ”๋“œ๊ฐ€ 26ms๊ฐ€ ๊ฑธ๋ฆฌ๋Š” 18๋ผ์ธ ์ฝ” ๋“œ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ฒฐ๋ก 16 ๋ฌผ๋ก  ์‹ค์ œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ๋ณด๋‹ค ํ›จ์”ฌ ๋ณต์žกํ•  ๊ฒƒ์ด์ง€๋งŒ, ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ํŠœ๋‹์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค. 1. ๊ธฐ์ค€์  ์„ธ์šฐ๊ธฐ: ํŠœ๋‹์„ ์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ• ์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 2. ๋ฌธ์ œ์  ๋ถ„๋ฆฌํ•˜๊ธฐ: ํŠœ๋‹์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ์ฝ”๋“œ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. 3. ํŠœ๋‹ํ•˜๊ธฐ: ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด ๊ฐ€๋ฉด์„œ ์ง€์†์ ์œผ๋กœ ํƒ€์ž„๋ผ์ธ๊ณผ ํ”„๋กœํŒŒ์ผ์„ ํ™•์ธํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค. ์„ฑ๋Šฅ ํŠœ๋‹์„ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ทœ์น™์ด ์žˆ๋Š”๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 16 ์ด ๋ฌธ์„œ๋Š” JavaScript๋ฅผ ํŠœ๋‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ํŠœ๋‹ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ทœ ์น™์€ ๋ชจ๋“  ์–ธ์–ด์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ๋™์ผํ•œ ๋ฐฉ๋ฒ•์ด Java, ํ˜น์€ C# ์–ธ์–ด๋กœ ๋งŒ๋“ค์–ด์ง„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŠœ๋‹ํ•˜๊ธฐ ์œ„ํ•ด ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
  • 14. 1. ๊ฐ€์žฅ ๋Š๋ฆฐ ๊ฒƒ๋ถ€ํ„ฐ: ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐ€์žฅ ํ™•์‹คํžˆ ํŠœ๋‹์˜ ํšจ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 2. ๊ฐ€์™ธ ํ™˜๊ฒฝ์„ ํ†ต์ œํ•˜๋ผ: ์ปดํ“จํ„ฐ๋ฅผ ๋ฐ”๊พธ์—ˆ๊ฑฐ๋‚˜ ์ฝ”๋“œ์— ๋ญ”๊ฐ€ ๋ณ€๊ฒฝ์„ ํ•˜์˜€๋‹ค๋ฉด ๊ธฐ์ค€์ ์„ ๋‹ค์‹œ ์„ธ์›Œ์•ผ ํ•œ๋‹ค. 3. ๋ฐ˜๋ณตํ•ด์„œ ๋ถ„์„ํ•˜๋ผ: ๋ช‡๋ช‡ ๋ณ€์น™๋“ค์ด ์ธก์ • ๊ฒฐ๊ณผ๋ฅผ ์™œ๊ณกํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์•„์•ผ ํ•œ๋‹ค. ๋ˆ„๊ตฌ๋‚˜ ์ž์‹ ์˜ ์›น ์‚ฌ์ดํŠธ๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค. ๋ฐ˜๋Œ€๋กœ ์›น ์‚ฌ์ดํŠธ์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋” ํ™”๋ คํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ์ž‘์—…๋“ค์€ ๋Œ€์ฒด๋กœ ์›น ์‚ฌ์ดํŠธ๊ฐ€ ๋Š๋ ค์ง€๊ฒŒ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ž˜์„œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ทธ๋งŒํผ์˜ ์‹œ๊ฐ„์  ์ธ๋ ฅ์  ๋น„์šฉ์„ ๋“ค์—ฌ์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ํŠœ๋‹์„ ์ด์šฉํ•œ ์ƒ‰์ƒ ์ •๋ ฌ๊ธฐ ์ตœ์ข…๋ฒ„์ „์˜ ์‹คํ–‰ ์‹œ๊ฐ„์€ 92%์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ด๋ฃจ์–ด ๋ƒˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์˜ ์›น ์‚ฌ์ดํŠธ๋Š” ์–ผ๋งˆ๋‚˜ ๋นจ๋ผ์งˆ ์ˆ˜ ์žˆ์„๊นŒ?