์ฆ๊ธฐ๋ค.
labjs๋ฅผ ํตํด ๋๋ ์๊ตฌํฉ๋๋ค.
๋ด "boilerplate" load.js ํ์ผ์๋ LABjs๊ฐ ์ธ๋ผ์ธ๋์ด ์์ผ๋ฉฐ ์ด๋ฅผ ์ฌ์ฉํ์ฌ jquery, GA ๋ฐ ํ๋์ ์ฌ์ดํธ js ํ์ผ์ ๋ก๋ํฉ๋๋ค. ๋์์ด๋๋ค๋ฉด http://bit.ly/dAiqEG ํ๋์ ํ์ผ์ RequireJS+jQuery๊ฐ ํตํฉ๋์ด ์์ต๋๋ค. ;)
๋ํ ์ด๊ฒ์ด ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ถ์ํ๋ ๋น๋ ์คํฌ๋ฆฝํธ์ ๊ธฐ๋์ ์ด๋ป๊ฒ ์์ฉํฉ๋๊น? ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ด ์ต์ ์ด์ด์ผ ํฉ๋๊น?
kyle: " @paul_irish ๋์ํ์ง ์์ต๋๋ค. http://bit.ly/9IfMMN ์บ์ ๊ฐ๋ฅ์ฑ(์ธ๋ถ CDN), ๋ณ๋ ฌ ๋ค์ด๋ก๋, ์คํฌ๋ฆฝํธ ๋ณ๊ฒฝ-ํ๋ฐ์ฑ..."
James burke: " @fearphage @getify RequireJS์๋ ์คํฌ๋ฆฝํธ ๋ฒ๋ค๋ง/์ถ์๋ฅผ ์ํํ๋ ๋น๋ ๋๊ตฌ๊ฐ ์์ผ๋ฏ๋ก ๋์ ๋ฐ ์ฌ์ ๋น๋ ๋ ๋ค์ ์ฅ์ ์ ๋ชจ๋ ๊ฐ์ง ์ ์์ต๋๋ค."
๊ฐ๋ฐ์๊ฐ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ ์์ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ $Lab.js๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉด ์ด๋ฏธ ๋ง์ jQuery ์ฌ์ฉ์์๊ฒ ์ต์ํ ์ฐ๊ฒฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋๊ท๋ชจ ์ํฐํ๋ผ์ด์ฆ ์ฑ์ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ ํ์ํ ๊ฒฝ์ฐ ํญ์ require.js๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ต๋๋ค.
ํ์ฌ ์ธ ๊ฐ์ง ์ฃผ์ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ๊ธฐ์ ์ด ์์ต๋๋ค:
์ฌ์ฉ ์ฌ๋ถ, ์ด๋ ๊ฒ์ ์ฌ์ฉํ ์ง๋ ๋ค์ ๋ ผ์์ ์ฌ์ง๊ฐ ์์ต๋๋ค. http://blog.getify.com/2010/12/on-script-loaders/
HeadJS ControlJS ๋ฐ LabJS์ ๋ํ ๋์์ ์๋ ค ์ฃผ๊ธฐ ์ํ requireJS ๋ฐ EnhanceJS๋ ์์ต๋๋ค. ์ฌ์ง์ด ์ผํ์ ๊ตฌ๊ธ๋ ๋น์ทํ ๊ฒ์ ์ ๊ณตํ๋ค.
jQuery 1.5 ๋ฐ deferreds( http://www.erichynds.com/jquery/using-deferreds-in-jquery/ ) ์ ๋ฆด๋ฆฌ์ค์ ํจ๊ป Boris Moore๋ ์๋ก์ด ์คํฌ๋ฆฝํธ ๋ก๋ ํ๋ก์ ํธ์ธ DeferJS( https://github) ์์ ์ด๋ฅผ ํ์ฉํ๊ณ ์์ต๋๋ค
๊ธฐ๋ณธ์ ์ผ๋ก ์คํฌ๋ฆฝํธ ๋ก๋๋ ๋ค๋ฅธ ๋ชจ๋ ๋ค์ด๋ก๋๋ฅผ ์ค์งํ๋ฏ๋ก ํค๋์์ modernizr์ ๋ค์ด๋ก๋ํ๋ ๊ฒ์ ์ข์ง ์์ต๋๋ค. ์ธ๋ผ์ธ ๋ก๋๋ ๋ก๋๊ฐ ์ฐจ๋จ ๋ชจ๋๊ฐ ์๋ ๋ณ๋ ฌ๋ก ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ด๋ก๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ชจ๋ modernizr ๊ธฐ๋ฅ์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ 6kb์ ๋ถ๊ณผํ head.min.js ๋๋ modernizr์ ์ฌ์ฉ์ ์ ์ ๋น๋(http://modernizr.github.com/Modernizr/2.0-beta/)๋ฅผ ์ธ๋ผ์ธํ ์ ์์ต๋๋ค. CSS ์ธ๋ผ์ธ๋ ๋๋๋ก ์๋ฏธ๊ฐ ์์ต๋๋ค. Google์ ์ธ๋ผ์ธ์ ์ฌ์ฉํ๋ฉฐ CSS, js ๋ฐ datauri๋ฅผ ํตํด ๋น 1x1 gif๋ฅผ ์ธ๋ผ์ธํฉ๋๋ค.
LabJS๋ ๊ฝค ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ ์ข์ ์๋ฃจ์ ์ ๋๋ค. ๋ํ ๋น๋๊ธฐ์์ผ๋ก ํฌํจ๋ ์ ์์ผ๋ฏ๋ก ์ฐจ๋จํ ํ์๊ฐ ์์ต๋๋ค.
http://blog.getify.com/2010/12/on-script-loaders/ ๋ ์์ฑ์์ ๊ฒ์ ๋๋ค.
http://yepnopejs.com/์ ๋ง 1.0์ด ๋์๊ณ LAB ๋ฐ head.js์ ๋ฌ๋ฆฌ ์๋ก์ด ์นํท์์ ๊นจ์ง์ง ์์ต๋๋ค. ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ด ์ด๋ ต์ต๋๋ค.
yepnope๋ Modernizr.load
๋ก Modernizr์๋ ํตํฉ๋์์ต๋๋ค. http://modernizr.github.com/Modernizr/2.0-beta/
๋ฐ๋ผ์ ๊ณง Modernizr.load๋ฅผ ํตํด h5bp์ ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ๊ฐ๊ฒ ๋ ๊ฒ์ ๋๋ค.
๋๋ ๊ทธ๊ฒ์ด 1.0์ ๋ง๋ค ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ง๋ง ์ผ๋จ Modernizr๋ฅผ 1.8๊น์ง ๊ฐ์ ธ ๊ฐ๋ฉด ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ h5bp 1.1๋ก ๋์ง ๊ฒ์ ๋๋ค. ์
์๋ ํด
H5BP๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๊ธฐ์กด ์ฌ์ดํธ๋ฅผ ์ด์ํ๊ณ ์์ผ๋ฉฐ yepnope.js ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค. ๋น์ ์ด ํ ๊ฒ์ฒ๋ผ ๋ชจ๋ ๋นํธ์ ๋ด์ด ํจ๊ป ๊ฒฐํฉ๋๋ ๊ฒ์ ๋ณด๋ ๊ฒ์ ์ ๋ง ์ข์ต๋๋ค.
ํ์ฌ ์ด๋ค ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๊น?
๊ทธ๊ฒ์ ํฌํจํ๋ ์ต์ ์ ๋ฐฉ๋ฒ์ ๊ด๊ณ์์ด yepnope,js๋ก ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
https://github.com/paulirish/html5-boilerplate/blob/master/index.html#L52 ๊ทธ๋ฆฌ๊ณ yepnope๋ฅผ ์ฌ์ฉํ์ฌ jQuery ๋ฐ ๊ธฐํ ์คํฌ๋ฆฝํธ์ CDN/๋ก์ปฌ ๋ณต์ฌ๋ณธ์ ๋ก๋ํด์ผ ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ธ๋ถ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค๊ณ ์๊ฐํ์ญ๋๊น? html ๋ด์์ ์คํฌ๋ฆฝํธ ๋ธ๋ก์ ํฌํจํ๊ฑฐ๋ ๋ ๋๋งํ ๋ค์ yepnope.js๋ฅผ ํตํด ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํฉ๋๊น?
๊ฐ์ฌํฉ๋๋ค.
์ค๋
์ ๊ทธ๋ฆฌ๊ณ ๋ ํ๋.
yepnope๋ css๋ฅผ ํตํด ๋ก๋ํ ์ ์์ผ๋ฏ๋ก ํ์์ ๊ฐ์ด ๊ธฐ๋ณธ CSS๋ฅผ ํฌํจํ๊ณ yepnope๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์์ ์ฌํญ์ ๋ํด์๋ง CSS๋ฅผ ํฌํจํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ด์ ๋ฒ์ ์ IE์๋ง โโ์ ์ฉ๋๋ ์ผ๋ถ CSS๋ฅผ ํฌํจํฉ๋๋ค.
ํธ์นดํฌ์นด,
Modernizr์ ๋ฒ ํ ๋ฒ์ ์ ์ฌ์ฉํ์ญ์์ค.. ํ์ํ ๊ฒ์ ํฌํจํ๊ณ ( Modernizr.load()
) ํ์ด์ง ์๋จ์ ๋ฃ์ผ์ญ์์ค.
yepnope๋ฅผ ์ฌ์ฉํ jquery ํด๋ฐฑ์ ์ค์ ์ฝ๋๋ http://yepnopejs.com/์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค ์ ๋ IE CSS์ ์กฐ๊ฑด๋ถ ๋ก๋์ ๋ํ ๊ทํ์ ์์ด๋์ด๋ฅผ ์ข์ํฉ๋๋ค.
์คํฌ๋ฆฝํธ ๋ก๋์ ์ฑ๋ฅ์ ๋ํ ๋งน์ ์ด ๋๋ฌด ๋ง๊ณ ์ด๊ฒ์ด ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ๋งํ ์ค๋น๊ฐ ๋์ด ์์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์คํฌ๋ฆฝํธ ๋ก๋ฉ์ ๋ํ ํ๋ช ํ ๊ถ์ฅ ์ฌํญ์ ๋ํ๋ด๋ ํ์ผ ํฌ๊ธฐ, ๋์ญํญ ๋ฐ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๋ํด ๋ ๋ง์ ์ฐ๊ตฌ๊ฐ ํ์ํ์ง๋ง ํ์ฌ ์ด ๋ถ์ผ๋ ์ด๊ธฐ ๋จ๊ณ์ด๋ฉฐ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ ๋ํ ํฌ๊ด์ ์ธ ์๋ฃจ์ ์ ์ถ์ฒํ๋ ๊ฒ์ ์์งํฉ๋๋ค.
๊ทธ๋์.
์ด ํฐ์ผ์ ๋ซ๊ณ ๊ฐ๋ฐ์๊ฐ ์ด์ ๋ํ ํ๋ช ํ ์ ํ์ ๋ ์ฝ๊ฒ ํ๊ธฐ ์ํด ํ์ํ ํฌ๊ด์ ์ธ ์ฐ๊ตฌ ๋ฐ ์ถํ์ ๊ด์ฌ ์๋ ๋ชจ๋ ์ฌ๋์๊ฒ ์์ฒญํฉ๋๋ค.
๋๋ concat ๋ ๋ณ๋ ฌ ๋ก๋์ ๋ํด ๊ฝค ๋ง์ ์ฐ๊ตฌ๋ฅผ ํ์ต๋๋ค. ๋๋ ์ฌ์ ํ ์์ฝ ์์ด ๋ชจ๋ js๋ฅผ ํ๋์ ํ์ผ๋ก ๋จผ์ ๊ฒฐํฉํ ๋ค์ 2-3๊ฐ์ ๋์ผํ ํฌ๊ธฐ์ ์ฒญํฌ๋ก ์ฒญํฌํ๊ณ ๋ณ๋ ฌ๋ก ๋ก๋ํ๋๋ก ๊ถ์ฅํฉ๋๋ค.
๋๋ ๋ด ์ฐ๊ตฌ๋ฅผ ๊ฐ์ ธ์ ๋๋ฆฌ ํผ๋จ๋ฆฌ๊ณ ํ์ฅํ์ฌ ์ด ๋ถ์ผ์์ "์ฌ์ค"๋ก ์คํ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ ์ถ์ต๋๋ค. ๋ฌธ์ ๋ ์ค์ ๋ก ๋๊ท๋ชจ ํ ์คํธ๋ฅผ ์คํํ๋ ๋ฐ ๋ง์ ๋น์ฉ์ด ๋ค์ง ์๋ ํธ์คํ ๋์ญํญ์ ์ฐพ์ผ๋ ค๊ณ ๋ ธ๋ ฅํ์ง๋ง ์์ง ํด๋น ํธ์คํ ์ ๊ณต์ ์ฐพ์ง ๋ชปํ๋ค๋ ๊ฒ์ ๋๋ค.
ํ ์คํธ๋ฅผ ์ํ ๋์ญํญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค๋ฉด ๋ณ๋ ฌ ๋ก๋ฉ ์ด๋ก ์ด ์ค์ ๋ก ์คํ ๊ฐ๋ฅํ์ง ์์๋ณด๊ธฐ ์ํด ์คํํ ์ ์๋ ํ ์คํธ๊ฐ ์์ต๋๋ค.
@getify ํ ์คํธ ์ฅ๋น๊น์ง ๋ฌด์์ด ํ์ํฉ๋๊น?
ํ์ฌ ์ฌ์ฉ ์ค์ธ ๊ฒ๋ณด๋ค ๊ฐ์ธ ์๋ฒ์์ ์ฝ 1.5TB ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. Nginx๊ฐ ์ค์น๋์ด ์์ผ๋ฉฐ ๋ง์ดํฌ๋ก์ด๋น ์ฝ 4์กฐ ์กฐ์ ํํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๊ธฐ์ ์ด ์ฅ๋ฒฝ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์์น๊ฐ ๊ฑฑ์ ๋๋ ๊ฒฝ์ฐ ๋๊ธฐ ์๊ฐ์ด ๋ ๊ธด ๊ฒ์ผ๋ก ์์ฅํ๊ฑฐ๋ ์์์ ์ฝ๊ฐ์ ์ฌ์ ๊ณต๊ฐ์ด ์๋ ๋ค๋ฅธ ๋ ์ฌ๋์ ์ฐพ์ ์ ์์ต๋๋ค.
BTW, ๋๋ "๋งน๋ชฉ์ ์ธ ๋ฏฟ์"์ ๋ํด ์ฝ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ์๋ ๋ง์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ ๊ธฐ์กด ์ฌ์ดํธ๊ฐ ์๋ ๊ฒฝ์ฐ ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋(๋ค๋ฅธ ๋ณ๊ฒฝ ์ฌํญ ์์)๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ด ํฅ์๋๋ค๋ ๊ฒ์ ์ฝ๊ณ ์ ์ฆ ๊ฐ๋ฅํ๋ฉฐ ๊ฑฐ์ ์์ฌ์ ์ฌ์ง๊ฐ ์๋ ์ฌ์ค์ ๋๋ค. ์ต์ ๋ธ๋ผ์ฐ์ ๋ผ๋ DOM ์ค๋น ์ฐจ๋จ์์ ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ๊ณ ์ ํด์ ํ ์ ์๊ธฐ ๋๋ฌธ์(๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒ ์๊ฐํ์ง๋ ์์ต๋๋ค.) ์ด๊ฒ์ ์ฌ์ค์ ๋๋ค. ๋ฐ๋ผ์ ์ต์์ ๋ธ๋ผ์ฐ์ ๋ก๋ฉ์์๋ ๋ค๋ฅธ ์ด์ ์ด ์๋ค๋ฉด ์ฌ์ดํธ์์ DOM ์ค๋น ์๋๋ฅผ ํฌ๊ฒ ๋์ด๋ ๊ฒ์ด ๊ฑฐ์ ํญ์ ์น๋ฆฌํฉ๋๋ค(์ฌ์ฉ์์ UX์ ๊ฒฝ์ฐ).
๊ทํ์ ์ง์ ์ ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ ์ฌ์ดํธ์ ๋ํด ์คํฌ๋ฆฝํธ ์ฐ๊ฒฐ๊ณผ ๋ณ๋ ฌ ๋ก๋๋ฅผ ๋น๊ตํ๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ ์๋ชป๋ ์ ์ ์ ๋๋ค. ์น์์ ๋๋ถ๋ถ์ ์ฌ์ดํธ๋ ์ค์ ๋ก script-concat์ ์ฌ์ฉํ์ง ์์ต๋๋ค/์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ค์ ๋ก ๋น๊ต(๋๋ถ๋ถ์ ๊ฒฝ์ฐ)๋ ๋น์ ์ด ๊ฐ์ ํ๋ ๊ฒ๋งํผ ๋ฏธ๋ฌํ๊ณ ๋ณต์กํ์ง ์์ต๋๋ค. ์คํฌ๋ฆฝํธ ์ฐ๊ฒฐ์ ์ฌ์ฉํ์ง ์๊ฑฐ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ(์ด๋ค ์ด์ ๋ก๋ ) ๋น๊ต๋ ๊ฐ๋จํฉ๋๋ค. ๋ณ๋ ฌ ๋ก๋ฉ์ ๊ฑฐ์ ํญ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ณด๋ค ์ ๋ฆฌํฉ๋๋ค.
๊ทธ๋ค์ด script-concat์ ์ด๋ ค ์๋ค๋ฉด(๋๋ ์ด๋ฏธ ๊ทธ๊ฒ์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด), ๋ณ๋ ฌ ๋ก๋ฉ์ด ๋์์ด ๋ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์กฐ๊ธ ๋ ๋ฏธ๋ฌํ๊ฑฐ๋ ๋ณต์กํด์ง๋๋ค. ๊ทธ๋ฌ๋ script-concat์ ๋ง๋ฅ ์๋ฃจ์ ์ด ์๋๋ฏ๋ก ๋ณ๋ ฌ ๋ก๋ฉ์ด ์ ํธ๋๊ณ ์ต์์ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๋จ์ ์๋ ์ฌ์ดํธ๊ฐ ๋ง์ด ์์ต๋๋ค.
์ผ๋ถ ์ฌ์ดํธ๊ฐ ๋ณ๋ ฌ ๋ก๋ฉ๊ณผ ์คํฌ๋ฆฝํธ ์ฐ๊ฒฐ ์ฌ์ด๋ฅผ ๊ฒฐ์ ํ๋ ๋์์ค/๋ณต์ก์ฑ์ ๋ค๋ฃฌ๋ค๊ณ ํด์ ๋ณ๋ ฌ ๋ก๋ฉ ๋ ์คํฌ๋ฆฝํธ ํ๊ทธ์ ๋ํ ๋ ํฐ(๋ ์ํฅ๋ ฅ ์๋) ๋ ผ์๊ฐ ๋ฏน์ค์์ ์์ค๋์ด์ผ ํจ์ ์๋ฏธํ์ง๋ ์์ต๋๋ค. ์ ์๋ ์ฆ๋ช ํ๊ธฐ ์ด๋ ต์ง๋ง ํ์๋ ์ด ์์ ์์ ๊ฑฐ์ ์ฃผ์ด์ง๋ค.
์ด ๋ชจ๋ ๊ฒ์ ๋ชจ๋ ๊ฒ์ ๊ณ ๋ คํ ๋ IMHO ์์ฉ๊ตฌ๊ฐ ๊ธ์ ์ ์ธ ๋ฐฉํฅ์ผ๋ก ๊ฐ์ฅ ํฐ ์ํฅ์ ๋ฏธ์น๋ ํจํด์ ์ฅ๋ คํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ค๋๋ ์ธํฐ๋ท์ ์๋ ์ฌ์ดํธ์ 80%๊ฐ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๊ณ ๋๋ถ๋ถ์ด ์คํฌ๋ฆฝํธ ํ๊ทธ์์ ๋ณ๋ ฌ ๋ก๋ฉ์ผ๋ก ์ด๋ํจ์ผ๋ก์จ ์ด์ ์ ์ป๋๋ค๋ฉด ๋ณ๋ ฌ ๋ก๋ฉ์ ์์ฉ๊ตฌ์ ์์์ ์ผ๋ก ์ ์ํ๊ธฐ์ ๋งค์ฐ ๊ฑด์ ํ ๊ฒ์ ๋๋ค.
์คํฌ๋ฆฝํธ ์ฐ๊ฒฐ ๋ ๋ณ๋ ฌ ๋ก๋๋ฅผ ํ์ํ์ฌ ์ ์ฌ์ ์ผ๋ก ๋ ๋ง์ ์ด์ ์ ์ป์ ์ ์๋ ์ฌ์ดํธ์ ํจ์ฌ ์์ง๋ง ์ค์ํ ํ์ ์น์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์์ ์ฌ์ฉ ์ฌ๋ก๋ ์์ฉ๊ตฌ์์ ์ต์ ํ๋์ด์ผ ํ๋ ๋์์ด ์๋๋๋ค.
๋ด ๋ช ์ผํธ.
@paulirish @slexaxton --
๋์ญํญ์ด ํ์ํ ํ, 10,000๋ช (์ ํํ ์ํ๋ง์ด ํ์ํ๋ค๊ณ ๋๊ผ์)์ด ํ ์คํธ๋ฅผ ํ ๋ฒ ์คํํ๊ฒ ํ๋ ค๋ฉด(๋ง์ ์ฌ๋๋ค์ด ์ฌ๋ฌ ๋ฒ ์คํํ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค), ๋๋ต 200GB์ ๋์ญํญ์ด ์ฌ์ฉ๋์์ต๋๋ค. ์ด๋ค ์ฌ๋๋ค์๊ฒ๋ ์๋์ด์ ํ ๋ฐฉ์ธ์ ๋๋ค. ๋๋ฅผ ์ํด, ๋ฉฐ์น ๋ง์ 200GB์ ๋์ญํญ์ ๋ด ์๋ฒ ํธ์คํ ๋น์ฉ์ ์๋์ ์ ๋๋ค. ๊ทธ๋์, ๋๋ ๊ทธ ์ด์ ๋ง์ผ๋ก ํ ์คํธ ํ์ฅ์ ์ถ๊ตฌํ์ง ์์์ต๋๋ค.
๊ฒ๋ค๊ฐ, ๋๋ ์ฐ๋ฆฌ๊ฐ ํ๊ตฌํด์ผ ํ๋ค๊ณ ์๊ฐํ๋ ์ด ํ ์คํธ์ 12๊ฐ์ง ์ด์์ ๋ณํ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ 100-200GB์ ๋์ญํญ์ ์์ญ ๋ฒ ์ฌ์ฉํ๋ ๊ฒ์ ๋น์ฉ์ ๋ถ๋ดํ๊ธฐ์๋ ์๋นํ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค. ์์ ์ ์๋ฃํ๊ธฐ์ ์ถฉ๋ถํ ๋์ญํญ์ด ์๋ค๊ณ ํ์ ํ์ง ์๋ ํ ๊ทธ ๊ธธ์ ์์ํ๊ณ ์ถ์ง ์์์ต๋๋ค.
๊ทธ๊ฒ๋ค์ ๋จ์ง ์ ์ ํ์ผ์ด๊ณ ํ ์คํธ์๋ ๋ง์ ๋์ ์ฌ์ฉ์๊ฐ ํ์ํ์ง ์์ผ๋ฏ๋ก CPU ๋ฑ๊ณผ ๊ฐ์ ๊ธฐ์กด ํ์ฅ ๋ฌธ์ ์ ๋ํ ์ค์ง์ ์ธ ์ฐ๋ ค๊ฐ ์์ต๋๋ค. ๋์ญํญ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค.
ํ ์คํธ์ ๋ํ ๋๋จธ์ง ๋ ผ์๋ฅผ ์คํ๋ผ์ธ์ผ๋ก ์ ํํ๊ณ ์ด๋ฉ์ผ์ด๋ IM์ ํตํด ์งํํ ์ ์์ต๋๋ค. ๋๋ ๋ง์นจ๋ด ํ ์คํธ๋ฅผ ํ์ฅํ๊ณ ์ด ๋ฌธ์ ๋ฅผ "ํด๊ฒฐ"ํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๊ฒ์ ์ง๊ธ ์ผ๋ ์ ๋ ๋์ ๋ถ๋ถ์ ์ํด ๋ด ๋์ ๋ค์ชฝ์ ๋งค๋ฌ๋ ค ์์ต๋๋ค.
๋ด dreamhost VPS์์ ๋ฌด์ ํ TB๋ฅผ ์ํํ ์ ์์ผ๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ์ง๊ธ์ 72GB/์ผ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ํจ์ฌ ๋ ๋ง์ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. :)
๋๋ paul์ ๋ง์ ๋์ํ๋ฉฐ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์ธ์ ์ด๋ป๊ฒ ๋๊ตฐ๊ฐ์๊ฒ ๋์์ด ๋ ๊ฒ์ธ์ง์ ๋ํ ์๋ชป๋ ์ ๋ณด๊ฐ ๊ฝค ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ๋จ๋ฝ์ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฒ์ด '์ฝ๊ณ ', '์ฆ๋ช ๊ฐ๋ฅํ๊ณ ' '์์ฌํ ์ฌ์ง ์์ด'๋ผ๊ณ ๋งํฉ๋๋ค.
๋๋ ์ผ๋ง ์ ์ @jashkenas ์ ๋น์ทํ ๊ฐ์ ์
https://github.com/SlexAxton/AssetRace
์ฝ๋๊ฐ ๋ค ์์ต๋๋ค. ๋ถ๋ช ํ ํ ์คํธ ๋์์ด ๋ง์ง๋ ์์์ง๋ง ๊ฒฐ๊ณผ๋ ๊ธฐ๊ปํด์ผ ์ด ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ concat ๋ฉ์๋(์ ์ฌํ ํฌ๊ธฐ์ 3๊ฐ ํ์ผ ๋ณ๋ ฌ ๋ก๋ ์ง์นจ์ ๋ฐ๋ฆ)์ ๊ฑฐ์ ๊ฐ์ ์๋์์ผ๋ฉฐ ์ต์ ์ ๊ฒฝ์ฐ ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋๋ ํจ์ฌ ๋ ๋ค์ํ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ค์ฐจ ๋ฒ์ ๋ด์์ ๋ ๋๋ ธ์ต๋๋ค. ํ๋์ ๋ธ๋ผ์ฐ์ ์์ ๊ทํ์ ์ปดํจํฐ์ ์๋๋ผ๋ ์์ ๋กญ๊ฒ ๋ถ๊ธฐํ์ฌ ๋น์ฌ ๋๋ ๋น์ฌ ๋ชจ๋๋ฅผ ๋ฅ๊ฐํ๋ ์๋ฃจ์ ์ ์ฐพ์ผ์ญ์์ค.
h5bp๋ ์ฌ๋๋ค์ด js๋ฅผ ์ฐ๊ฒฐํ๋ค๊ณ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ "๊ฑฐ์ง ์ ์ "์ ๊ดํด์๋. h5bp๋ ์ฐ๊ฒฐ ๋ฐ ์ถ์๊ฐ ํฌํจ๋ ์คํฌ๋ฆฝํธ ๋น๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ด ์ธ์๋ ์์ ํ ์ ํจํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ณ๋ ฌ ๋ก๋ฉ์ด ๊ฑฐ์ ํญ์ ์ฌ๋ฌ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ณด๋ค ๋ซ๋ค๋ ์ฃผ์ฅ์ ์ฌ์ค์ผ ์ ์์ง๋ง ํ์ฌ h5bp๊ฐ ์ ๊ณตํ๋ ๊ฒ๋ณด๋ค ์ข์ง๋ ์์ต๋๋ค. ์ด๊ฒ์ด ์ด ํ ๋ก ์ ๋งฅ๋ฝ์ ๋๋ค.
์ต์ ์ ์๋๋ฆฌ์ค๋ ์ฌ๋๋ค์ด yepnope ๋๋ lab.js์ ๊ฐ์ ๊ฒ์ ๊ฐ์ ธ์ ์คํฌ๋ฆฝํธ ํ๊ทธ ํด๋ฆฌํ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ์ ๋์ ์ผ๋ก ๋๋ฆฐ ๋ก๋ฉ(19๊ฐ์ JS ๋ฐ 34๊ฐ์ CSS ํ์ผ ์ค)์ ์ด๋ํ ๋ฟ๋ง ์๋๋ผ ์์ ํ ์ธ์ํ์ง ๋ชปํ ์๋ง์ ์ญ๋ฐฉํฅ ๋ฐ ์ ๋ฐฉ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ๋์ ํฉ๋๋ค.
์ ๋ ์ฌ๋๋ค์๊ฒ _boilerplate_์ ๋ํด ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ด๊ณ ์ฑ๋ฅ์ด ์ข์ผ๋ฉฐ ํธํ ๊ฐ๋ฅํ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋ค๋ ์ ์ ์ผ๋ก ๋น๋ ๋๊ตฌ๋ ์ด ์ธ ๊ฐ์ง๋ฅผ ๋ชจ๋ ๋ณด์ฅํ๊ธฐ ์ํด ํจ์ฌ ๋ ๋์๊ฐ๋๋ค.
@slexaxton
... ๊ฒฐ๊ณผ๋ ์ด ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ concat ๋ฐฉ๋ฒ๊ณผ ๊ฑฐ์ ๊ฐ์ ์๋์์ ๋ณด์ฌ์ฃผ์์ต๋๋ค(๋น์ทํ ํฌ๊ธฐ์ 3๊ฐ ํ์ผ ๋ณ๋ ฌ ๋ก๋ ์ง์นจ์ ๋ฐ๋์ต๋๋ค)...
๋๋ ๊ธฐ๊บผ์ด ๋น์ ์ด ํจ๊ป ๋ง๋ ํ ์คํธ๋ฅผ ์ดํด๋ณผ ์๊ฐ์ ๊ฐ์ง ๊ฒ์ ๋๋ค. ๋๋ ๋น์ ๋ค์ด ๋น์ ์ดํ๋ ์ผ์ ์๊ณ ์๋ค๊ณ ํ์ ํ๋ฏ๋ก ๋น์ ์ ํ ์คํธ๊ฐ ์ ํจํ๊ณ ์ ํํ๋ค๊ณ ํ์ ํฉ๋๋ค.
OTOH, ๋๋ ๋ง์ ๋ชจ์๋ ์ฆ๊ฑฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ด ๋๋ถ๋ถ์ ์ฌ์ดํธ์ ๋ญ๋น์ด๊ฑฐ๋ ๋์์ด ๋์ง ์๋๋ค๋ ์ค๋๋ ฅ ์๋ ๋ด์ฉ์ ๋ณธ ์ ์ด ์๋ค๋ฉด LABjs๋ผ๋ ๋ฏธ์น ์๊ฐ ์ฑํฌ๋ฅผ ์ด๋ฏธ ์ค๋ ์ ์ ํฌ๊ธฐํ์ ๊ฒ์ ๋๋ค.
์ ๋ 2๋ ๋์ ์ฌ๋๋ค์ ์ํด LABjs๋ฅผ ๊ณต๊ฐํ๋ ๋ฐ ๋์์ ์ฃผ๋ฉด์ LABjs๊ฐ ์คํฌ๋ฆฝํธ ํ๊ทธ ๋์๋ณด๋ค ๋๋ฆฐ ์ํฉ์ ๋ฐ๊ฒฌํ ์ ์ด ์๋ค๊ณ 100% ํ์ ํ ์ ์์ต๋๋ค. _๋์๊ฒ_ ๊ทธ๋ฐ ์ผ์ด ๋ฐ์ํ ์ ์ด ํ ๋ฒ๋ ์์ต๋๋ค. ์ฌ๋๋ค์ด ๋ง์ ์ด์ ์ ๋ณด์ง ๋ชปํ๋ค๊ณ ๋งํ ์ ์ด ๋ช ๋ฒ ์์ต๋๋ค. ์ฌ๋๋ค์ด 100๊ฐ ์ด์์ ํ์ผ์ ๋ก๋ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ช ๋ฒ ์์๊ณ ๋ง์ ์ฐ๊ฒฐ์ ๋ฏธ์น ์ค๋ฒํค๋๋ก ์ธํด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋ณผ ์ ์์๋ ๋ชจ๋ ์ด์ ์ด ์ฌ๋ผ์ก์ต๋๋ค. ํ์ง๋ง LABjs๊ฐ ์ฌ์ดํธ๋ฅผ ๋๋ฆฌ๊ฒ ๋ง๋ค์๋ค๋ ๋ง์ ํ ๋ฒ๋ ๋ค์ด๋ณธ ์ ์ด ์์ต๋๋ค.
๋๋ ๋ง ๊ทธ๋๋ก 50๊ฐ ์ด์์ ์๋ก ๋ค๋ฅธ ์ฌ์ดํธ๊ฐ ์คํฌ๋ฆฝํธ ํ๊ทธ์์ LABjs๋ก ์ด๋ํ๋ ๊ฒ์ ๋์๊ณ ์ฌ์ดํธ๋ ์คํจ ์์ด ์ฆ์ ์ฑ๋ฅ ํฅ์์ ๋ณด์์ต๋๋ค. ๋ ธ๋ ฅ ์ด๊ธฐ์ ๋ด๊ฐ ๋์์ ์ค 7~8๊ฐ ์ฌ์ดํธ์์ ์ํ๋ง์ ํ๊ณ , ๋ก๋ ์๋๊ฐ ํ๊ท ์ ์ผ๋ก ์ฝ 15% ํฅ์๋์์ต๋๋ค. ์ ๊ฐ ๊ด๋ฆฌํ๋ 4~5๊ฐ ์ฌ์ดํธ์ ๊ฒฝ์ฐ ๋น์ฐํ LABjs๋ฅผ ๊ตฌํํ๊ณ ๋ก๋ฉ ์๋๊ฐ 3๋ฐฐ๋ ๋นจ๋ผ์ก์ต๋๋ค.
๋ฌผ๋ก LABjs๊ฐ ์ฒ์ ๋์์ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๋ ฌ๋ก ๋ก๋ํ๋ ๊ฒ์ ์ต์ฒจ๋จ์ด์์ต๋๋ค(๋ช๋ช๋ง์ด ๊ทธ๋ ๊ฒ ํ๊ณ ์์์ต๋๋ค). ๊ทธ๋์ ๊ทธ ์ด์ต์ ๊ฑฐ๋ํ๊ณ ๊ฐ์์ ์ด์์ต๋๋ค. ์ด์ ๊ฑฐ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ณ๋ ฌ ๋ก๋๋ฅผ ์ํํ๋ฏ๋ก ์ด์ ์ด ๋ ์ด์ ๊ธ๊ฒฉํ์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ถ์ธํ ์ ์๋ ํ ๊ฐ์ง๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์คํฌ๋ฆฝํธ ํ๊ทธ ๋ก๋๋ฅผ ์ํด DOM ์ค๋น ์ด๋ฒคํธ๋ฅผ ๋ชจ๋ ์ฐจ๋จํ๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ค์ document.write()
๋ฅผ ์ฐพ์ ๊ฐ๋ฅ์ฑ ๋๋ฌธ์ _ํด์ผ ํฉ๋๋ค_. ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ ๋ณธ์ง์ ์ผ๋ก "๋ธ๋ผ์ฐ์ , ๋๋ ๋น์ ์ด document.write๋ฅผ ๋ค๋ฃฐ ํ์๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์ฝ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ด์ง๋ฅผ ๊ณ์ ์งํํ์ญ์์ค"๋ผ๊ณ ๋งํฉ๋๋ค.
์ด ์๋ฃ์ ์ฌ๋ผ์ด๋ 10์ ์๋ ๋ ๊ฐ์ ๋ค์ด์ด๊ทธ๋จ์ ์ดํด๋ณด์ญ์์ค.
http://www.slideshare.net/shadedecho/the-once-and-future-script-loader-v2
ํ๋์ ์ ์ ์์น๋ฅผ โโ๋น๊ตํ์ญ์์ค(DOM ์ค๋น๋จ). ์ด๋ ์ ์ฒด ํ์ด์ง ๋ก๋ ์๊ฐ(๋๋ ๋ชจ๋ ์์ฐ ๋ก๋๋ฅผ ์๋ฃํ๋ ์๊ฐ)์ด ๋ ๋์์ง์ง ์๋๋ผ๋ ์ธ์ง๋ ์ฑ๋ฅ(UX)์ด ํฌ๊ฒ ๊ฐ์ ๋์์ต๋๋ค.
...h5bp๋ ์คํฌ๋ฆฝํธ ๋น๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค...
์ฌ๊ธฐ์ ์๋ชป๋ ๊ฐ์ ์ h5bp๊ฐ ์ด ๋๊ตฌ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ h5bp์ ๋ชจ๋ (๋๋ ๋๋ถ๋ถ์) ์ฌ์ฉ์๊ฐ ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. h5bp ์ฌ์ฉ์์ 100%๊ฐ ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ค๊ณ ํด์ h5bp๊ฐ ์ธํฐ๋ท์ ๋กฑํ ์ผ(long-tail)๋ก ๋กค์์๋๋ค๋ฉด ๋ชจ๋ ์ฌ๋๋ค์ด ๊ทธ concat ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ผ๋ ์๋ฏธ๋ ์๋๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ฝ๊ฒ ๋ง์ ์์๋ ๋ง์ ๋ค๋ฅธ ์์๊ฐ ์์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์คํฌ๋ฆฝํธ ํ๊ทธ ์ฌ์ฉ์์ ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋ ์ฌ์ฉ์ผ๋ก ์ด๋ํ ์ ์๋ ์ด์ ๋ _๋งค์ฐ ์ ์ต๋๋ค_.
๋ฐ๋ผ์ ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ ์ฌ์ ํ โโ์ธํฐ๋ท์ ๋กฑํ ์ผ์ ๋ ๊ด๋ฒ์ํ ๋งค๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ์คํฌ๋ฆฝํธ ๋ก๋ฉ ์ต์ ํ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๋๋ถ๋ถ์ ์ฌ์ดํธ๋ ์๋ฌด๊ฒ๋ ์๋ ์ํ์์ ๋ค๋ฅธ ์ํ๋ก ์ด๋ํ๋ ๊ฒ์ด ์ฌ์ ํ ๋ ์ฝ๊ณ ์ฑ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฌํ ๋กฑํ ์ผ ์ฌ์ดํธ ์ค ์ ๋ ดํ ์ 6๋ฌ๋ฌ, ๋๋ ๊ณต์ ํธ์คํ , CDN์ด ์๋ ์น ํธ์คํ ํ๊ฒฝ์์ ์๋ํ๋ ์คํฌ๋ฆฝํธ ๋น๋ ๋๊ตฌ์ ๋ ธ๋ ฅ์ ๋ค(๋๋ ๊ฒฝํํ๋ ๊ธฐ์ ์ด ์๋) ์ฌ๋์ ๊ฑฐ์ ์์ต๋๋ค.
์ต์ ์ ์๋๋ฆฌ์ค๋ ์ฌ๋๋ค์ด yepnope ๋๋ lab.js์ ๊ฐ์ ๊ฒ์ ๊ฐ์ ธ์ ์คํฌ๋ฆฝํธ ํ๊ทธ ํด๋ฆฌํ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋ก๋ฉ์ด ๋๋ ค์ง๋๋ค...
๋๋ ์ด ๋ง์ ๋ ๋์ํ ์ ์์๋ค. LABjs๋ ์คํฌ๋ฆฝํธ ํ๊ทธ ํด๋ฆฌํ๋ก ํน๋ณํ ์ค๊ณ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ ์คํฌ๋ฆฝํธ ํ๊ทธ(๋น๋ถ๊ฐ ์คํฌ๋ฆฝํธ ์ฐ๊ฒฐ ๋ฌด์)์ ๋ํ LABjs์ ๊ฐ์ ์ฌํญ์ ์ ํ๋ฆฝ๋์ด ์์ผ๋ฉฐ ์ฌ๊ฐํ๊ฒ ๋ฐ๋ฐ๋ ์ ์ด ์์ต๋๋ค. LABjs๋ฅผ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์(๋๋ ๋ง์) ์ฌ์ดํธ๊ฐ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ก ๋์๊ฐ๋ ๊ฒ์ด ๋ ๋ซ๋ค๋ ์ฆ๊ฑฐ๊ฐ ์๋ค๋ฉด ๊ณต์ ํ์ญ์์ค.
๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ด ๋ธ๋ผ์ฐ์ ๊ฐ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ก ๋ฌ์ฑํ ์ ์๋ ๊ฒ๋ณด๋ค ๋๋ฆฐ ๋ก๋ฉ์ ์ด๋ํ ์ด์ ๋ ์ ํ ์์ต๋๋ค. ์๋ฏธ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์์ ์ค์ ํ ๊ฒ์ฒ๋ผ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ ํญ์ DOM ์ค๋น๋ฅผ ์ฐจ๋จํ์ง๋ง ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ ๊ทธ๋ ์ง ์์ต๋๋ค.
๊ทธ๋ค์ ์์ ํ ์ธ์ํ์ง ๋ชปํ ๋ง์ ์ญ๋ฐฉํฅ ๋ฐ ์๋ฐฉํฅ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ๋์ ํฉ๋๋ค.
์ด๋ค ํธํ์ฑ ๋ฌธ์ ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น? LABjs์ ๋ธ๋ผ์ฐ์ ์ง์ ๋งคํธ๋ฆญ์ค์๋ ์ ์ธ๊ณ ๋ชจ๋ ์น ๋ธ๋ผ์ฐ์ ์ ์ ๋ ๋ค์๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ด ์นจ์ ํ๋ ๋ฏธ์น ์์ ๋ธ๋ผ์ฐ์ ๋ ๋ถ๋ช ํ ์ด์ ์ด ์๋ ๋ง์ ์์ ๋ธ๋ผ์ฐ์ ๋ณด๋ค ํจ์ฌ ์ค์ํฉ๋๋ค.
LABjs 1.x์๋ ์บ์ ์ฌ์ ๋ก๋์ ๊ฐ์ ๋ฏธ์น ํดํน์ด ๋ง์ด ํฌํจ๋์ด ์์๋๋ฐ, ์ด๋ ์ค์ ๋ก ๋ธ๋ผ์ฐ์ ์์์ ๋ํ ์ฃผ์ ์ฐ๋ ค ์ฌํญ์ด์์ต๋๋ค. LABjs 2.x๋ ์ด๋ฅผ ์์ ํ ๋ค์ง์์ผ๋ฉฐ ์ด์ ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ณ๋ ฌ ๋ก๋์ ๋ํด ์์ ์ ์ด๊ณ ํ์คํ๋ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๊ณ ์ด์ ์นํท ๋ธ๋ผ์ฐ์ ์ ๋ํ ํดํน๋ง ์ฌ์ฉํฉ๋๋ค. ๋ํ LABjs 2.x์๋ "์ค์ ์ฌ์ ๋ก๋"์ ๊ฐ์ ๊ณง ์ถ์๋ ์คํฌ๋ฆฝํธ ๋ก๋ ๊ธฐ์ (๊ณง ํ์คํ๋ ์์ )์ ๋ํ ๊ธฐ๋ฅ ํ ์คํธ๊ฐ ์ด๋ฏธ ํฌํจ๋์ด ์์ต๋๋ค.
๋ค๋ฅธ ์คํฌ๋ฆฝํธ ๋ก๋์ ๋ํด ํ์คํ ๋งํ ์๋ ์์ต๋๋ค. ๋ง์ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์ฌ์ ํ ํดํน์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ํ์ง๋ง LABjs์ ๊ฒฝ์ฐ ์ด๊ฒ์ด ์๋ฐฉํฅ ๋๋ ์ญ๋ฐฉํฅ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋ค๋ ์ฃผ์ฅ์ ๋นํฉํฉ๋๋ค. ์ด๋ ๋ช ๋ฐฑํ ์คํด์ ์์ง๊ฐ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฃผ์ฅํ๋ค.
LABjs๊ฐ ์ค์ ๋ก ์คํฌ๋ฆฝํธ ํ๊ทธ ํด๋ฆฌํ์ด ๋๋๋ก ์๋ํ ์ด์ ์ ๋ํด ์ฝ๊ฐ ์ค๋ช ํ๊ธฐ ์ํด...
document.write()
๊ฐ ์จ์ด ์์ ์ ์๋ค๊ณ ์ฌ์ ํ ๋น๊ด์ ์ผ๋ก ๊ฐ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.๋ฐ๋ผ์ ์ต์ ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ LABjs๋ ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ์ํํ ์ ์๋ ๋ฐฉ์์ผ๋ก ๋ธ๋ผ์ฐ์ ์ "๋น DOM ์ค๋น ์ฐจ๋จ ์คํฌ๋ฆฝํธ ๋ก๋"๋ฅผ ๊ฐ์ ธ์จ๋ค๋ ์๋ฏธ์์ "ํด๋ฆฌํ"์
๋๋ค. ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์๋ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ทผํ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ defer
์ ํจ๊ป ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค( async
๋ ์์๋ฅผ ์ ์งํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ช
ํ ์๋ํ์ง ์์ต๋๋ค) . ๊ทธ๋ฌ๋ defer
์๋ ์ฌ๋ฌ ๊ฐ์ง ๋จ์ ์ด ์์ผ๋ฉฐ ์ง์์ด ์คํ ๊ฐ๋ฅํ ์๋ฃจ์
์ด ๋ ๋งํผ ๊ด๋ฒ์ํ์ง ์์ต๋๋ค(๋น์ฐ๊ธฐ์ ๋ํ ๋์ฒด๋ ๋์ ์ฑ๋ฅ์). ๋ฐ๋ผ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ์ฐ์ LABjs๋ ์คํฌ๋ฆฝํธ ํ๊ทธ defer
(์ ํํ์ง๋ ์์ง๋ง)์ ์ฑ๋ฅ ํน์ฑ์ ๋ํ ํด๋ฆฌํ์ด๋ผ๊ณ ๋งํ ์ ์์ต๋๋ค.
์์งํ, ๋๋ ์ฌ์ ํ ์ฐ๋ฆฌ๊ฐ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ๊ฐ์ฒด์ ๋ํ ํ์ค์ ์ฒญ์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์บ์๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ธฐ ์ํด ํ ์คํธ/์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๋ค๋ฅธ ์ ํ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ(๋๋ ๋ ๋์ ๊ฒฝ์ฐ์๋ ๊ฐ์ฒด ํ๊ทธ๋ ์ด๋ฏธ์ง ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ธ๊ธฐ ์๋ ๋ธ๋ผ์ฐ์ ์ ์ ๋ฒ์ ์ ํ์ํ ๊ฒ์ด๋ฉด ๋ฌด์์ด๋ ์ฌ์ฉ) ์๋ฌด ๊ฒ๋ ์์ด ๋ง์ ์ด๋ ค์์ ๊ฒช์ ์ ์์ต๋๋ค. ์ฑ๋ฅ์ ๋๋ฌด ๋ง์ ๋ณ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ ํ dom ๋ ธ๋ ์ฝ์ ์ ์ฌ์ฉํ์ฌ ์คํ์ผ์ํธ๋ฅผ ๋ก๋ํ๋ค๋ ๊ฒ์ ์ดํดํ ์ ์์ง๋ง(์์ ๋๋ฌธ์ผ ๋ฟ์ ๋๋ค) ์คํฌ๋ฆฝํธ์ ๊ดํด์๋ ๋ ์ด์ ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค(Google์ด ๋๋ถ๋ถ์ ๊ฒฝ์ฐ document.write ์ฌ์ฉ์ ์ค๋จํ์ผ๋ฉด ํฉ๋๋ค. ๊ทธ๋ค์ ๋๋ณธ์ด์ง๋ง ๊ทธ๊ฒ์ ์์ ํ ๋ค๋ฅธ ์ด์ผ๊ธฐ์ ๋๋ค).
๋ํ ์ฌ๊ธฐ์์ ์คํฌ๋ฆฝํธ ๋ก๋์ ๊ดํ ๊ฐ์ฅ ํฐ ์์ ์ ๋์น๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ชจ๋ ๊ฒ์ ๋ฏธ๋ฆฌ ๋ก๋ํ๋ ๋์ js ์ฝ๋๋ฅผ ์จ๋๋งจ๋๋ก ๋ก๋ํ ์ ์๋ค๋ ๊ฒ ์ฌ์ํ์ง ์์ ์์ ์ฐ๊ฒฐ๋ ์คํฌ๋ฆฝํธ๋ก ์ถ์ ํจ). UI ์ํธ ์์ฉ ํ ์ฝ๊ฐ์ ๋๊ธฐ ์๊ฐ์ด ์๋ ๊ฒ์ ์์ ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์กฐ๊ธ์ด๋ผ๋ "๋ฉ์ถ๋" ๊ฒ๋ณด๋ค ๋ฌธ์ ๊ฐ ํจ์ฌ ์ ์ต๋๋ค(DOM์ ์ ์ค๋น๋ ์ ์์ง๋ง ํ์ด์ง๋ฅผ ํฅ์์ํค๋ ์ฝ๋๊ฐ ์์ผ๋ฉด ๋ฌด์จ ์์ฉ์ด ์์ต๋๊น? ์ถ๊ฐ ๋ฐ๋ณต ์์ ์ด ์์ง ์คํ๋์ง ์์์ต๋๋ค. ์ผ๋ถ ์ฌ์ดํธ๊ฐ ์ฆ์ ๋ก๋๋ ๋ค์ ํฌ๋ฐํ ์ผ์ด ๋ฐ์ํ๋ ๋ฐฉ๋ฒ์ ์์์ฐจ๋ฆฐ ์ ์ด ์์ต๋๊น?).
๋ฐ๋ผ์ ์๊ฒฉํ ์ฑ๋ฅ ์ธก์ ์ ๋ชจ๋ ํ๋ฅญํ๊ณ ๋ฉ์ง์ง๋ง ์ฌ์ ํ ์ธ์ง๋ ์ฑ๋ฅ์ด ๊ถ๊ทน์ ์ธ ๋ชฉํ๋ผ๊ณ ์๊ฐํฉ๋๋ค... ๊ทธ๋ฆฌ๊ณ ์ฌํ๊ฒ๋ ์ถ์ /์ต์ ํ/๊ณ์ฐํ๊ธฐ๊ฐ ํจ์ฌ ์ด๋ ต์ต๋๋ค.
์ด๊ฒ์ ๊ฐ๋ ฌํ๋ค.
@jaubourg--
์์งํ, ๋๋ ์ฌ์ ํ ์ฐ๋ฆฌ๊ฐ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ๊ฐ์ฒด์ ๋ํ ํ์ค์ ์ฒญ์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ์ค/์ฌ์ ๋ฐ ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ป๊ฒ ๋ ๋์ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ๊ธฐ์ ์ ์ ๊ณตํ ์ ์๋์ง์ ๋ํด ๋ง์ ์ฒญ์์ด ์งํ ์ค์
๋๋ค. ๋ช ๋
๋ง์ ์ด ์นดํ
๊ณ ๋ฆฌ์ ์ฒซ ๋ฒ์งธ ํฐ ์น๋ฆฌ๋ 2์์ ๋ค์ ์ฑํ๋์ด ํ์ฌ ๋ชจ๋ ์ฃผ์ ์ต์ ๋ฆด๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ์ ์๋ "ordered async"( async=false
)์
๋๋ค(์์ธ: Opera๋ ๊ณง ์ถ์๋ ์์ ์ด๋ฉฐ IE10p2์๋ ์ด ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ).
ํ์ฌ Ian Hickson๊ณผ ๊ณ์ ๋ ผ์ ์ค์ธ ๋ค์ ํ ๋ก ์ ์ ๊ฐ "์ค์ ์ฌ์ ๋ก๋"๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ ๋๋ค. ์ ์๊ฐ์๋ "์ค์ ์ฌ์ ๋ก๋"(IE๊ฐ v4, btw๋ถํฐ ์ด๋ฏธ ์ง์ํจ)๋ ๊ฑฐ์ ๋ชจ๋ ์คํฌ๋ฆฝํธ ๋ก๋ ์๋๋ฆฌ์ค๋ฅผ ์ฌ์ํ๊ฒ ํด๊ฒฐํ ์ ์๋ "์์ ์ด์"์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒ์ ๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ์ด์ ๊ฐ์ ํ์คํ๋ ๊ฒ์ ๋ณด๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์ฌ์ ํ ๋งค์ฐ ๋๊ด์ ์ ๋๋ค.
์์ธํ ์ ๋ณด๋ ์ด ์ํค๋ฅผ ์ฐธ์กฐํ์ญ์์ค: http://wiki.whatwg.org/wiki/Script_Execution_Control
์บ์๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ธฐ ์ํด ํ ์คํธ/์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค๋ฅธ ์ ํ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ(๋๋ ๋ ๋์๊ฒ๋ ๊ฐ์ฒด ํ๊ทธ๋ ์ด๋ฏธ์ง ๊ฐ์ฒด ๋๋ ์ธ๊ธฐ ์๋ ๋ธ๋ผ์ฐ์ ์ ์ ๋ฒ์ ์ด ์๊ตฌํ๋ ๋ชจ๋ ๊ฒ์ ์ฌ์ฉ)
์ด๊ฒ์ "์บ์ ์ฌ์ ๋ก๋ฉ"์ด๋ผ๊ณ ํ๋ฉฐ, ์ธ์ ๋๋ ์ถ์ ํ๊ณ ๋์ฐํ ํดํน์ ๋๋ค. LABjs๋ v2๋ถํฐ ์ด๊ฒ์ ๊ฐ์กฐํ์ง ์์ต๋๋ค(์ด์ ์นํท์ ๋์ฒด ์๋จ์ผ๋ก๋ง ์ฌ์ฉ). ๋ค๋ฅธ ์คํฌ๋ฆฝํธ ๋ก๋๋ ๋ถํํ๋ ์ฌ์ ํ ์ด๋ฅผ ๊ธฐ๋ณธ ๋ก๋ฉ ๋ฉ์ปค๋์ฆ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ "์บ์ ์ฌ์ ๋ก๋"์ ๋ํ ํ์์ฑ์ 90%๋ ํ์คํ๋๊ณ ํดํน์ด ์๋ "์์๋ ๋น๋๊ธฐ์"์ผ๋ก ํด๊ฒฐํ ์ ์์ผ๋ฏ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ์คํฌ๋ฆฝํธ ๋ก๋๋ ์ง๊ธ "์บ์ ์ฌ์ ๋ก๋"๋ณด๋ค ์ด๋ฅผ ์ ํธํด์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ "์บ์ ์ฌ์ ๋ก๋"๊ฐ ํํธ์๋ค๋ ์ ์๋ ๋์ํ์ง๋ง ์ด๋ฌํ ํดํน์ ํฌํจํ์ง ์๋ document.createElement("script")
๋ฅผ ์ฌ์ฉํ๋ ํจ์ฌ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก ์ด๊ฒ์ด ์คํฌ๋ฆฝํธ ๋ก๋ฉ. "์ค์ ์ฌ์ ๋ก๋ฉ"์ ์ป์ ์ ์๋ค๋ฉด Script ์์๋ ์ฐ๋ฆฌ๊ฐ ํ์ํ ๋ชจ๋ ๊ฒ์ด ๋ ๊ฒ์
๋๋ค. ๋๋ ์์งํ ๊ทธ๋ ๊ฒ ๋ฏฟ๋๋ค.
์ฌ๊ธฐ์์ ์คํฌ๋ฆฝํธ ๋ก๋์ ๊ด๋ จํ์ฌ ๊ฐ์ฅ ์ค์ํ ์ ์ ๋์น๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์ฒญ ์ js ์ฝ๋๋ฅผ ๋ก๋ํ ์ ์๋ค๋ ๊ฒ
์ด๊ฒ์ด ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ๊ฐ์ ธ์ค๋ ์ค์ํ ์ด์ ์ด๋ผ๋ ๋ฐ ๋งค์ฐ ๋์ํฉ๋๋ค. ๊ทธ๋ฌ๋ "script concat" ์ฌ๋๋ค์ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ์์ด๋ ์ ์ค ์ผ์ด์ค๋ฅผ ํด๊ฒฐํ ์ ์๊ธฐ ๋๋ฌธ์ ๋์ "๋น๊ต"ํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ _this_ ์ค๋ ๋์์ ์ผ์ข ์ ๋ฌด์๋ฏธํ ์ฃผ์ฅ์ ๋๋ค. "์คํฌ๋ฆฝํธ ์ฐ๊ฒฐ" ์ง์ง์๋ก์ "์ข์์, ์ฐ๋ฆฌ๋ ๊ทธ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค"๋ผ๊ณ ๋งํ ์ ์์ง๋ง "XYZ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋ ์ ์ ๊ณตํ ์ ์์ต๋๋ค"๋ผ๊ณ ๋งํ ์๋ ์์ต๋๋ค.
์ธ์ง๋ ์ฑ๋ฅ์ _is_ ๊ฑฐ๋ํ๊ณ ์ค์ํฉ๋๋ค. ์ ๋ ๋์ํฉ๋๋ค. ์ฃผ๋ฌธํ ๋ก๋ฉ์ ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ์จ๋๋งจ๋ ๋ก๋ฉ์ ํ์ํ ๊ฒ๋ง ๋ค์ด๋ก๋ํ๋ ๊ฒฝ์ฐ ์ค์ ๋ค์ด๋ก๋๊ฐ ๊ฐ์ํ๋ ๊ฒฝํฅ์ด ์๊ธฐ ๋๋ฌธ์ ์ค์ ์ค์ ์ฑ๋ฅ(๋จ์ํ ์ธ์์ด ์๋)๋ ํฅ์๋ฉ๋๋ค(์์ฑํ ์ฝ๋์ 100%๊ฐ ํ์ํ ํ์ด์ง ๋ฐฉ๋ฌธ์ด ๊ฑฐ์ ์์).
์ธ์ง๋ ์ฑ๋ฅ์ ๋ด๊ฐ ์์์ DOM ์ง์ ์ฃผ์ฅ์ ์นํธํ๋ ์ด์ ์ด๊ธฐ๋ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ํ์ด์ง์ ์ํธ ์์ฉํ ์ ์๋ ๊ฒ์ฒ๋ผ "๋๋ผ๋" ์๋๊ฐ ํ์ด์ง๊ฐ ์ผ๋ง๋ ๋นจ๋ฆฌ(์ค์ ๋ก ๋ก๋๋๋ ์๋์ ๊ด๊ณ์์ด) ์๊ฐํ๋ _๋งค์ฐ_ ์ค์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๊ฒ์ ๋ง์ ์ฌ์ฉ์ ์ฐ๊ตฌ์ ์ํด ํ๋ฆฝ๋ ์ฌ์ค์ ๋๋ค.
@getify์ ์ด์ ์ ์ด๊ณ ๊ธด ๋๊ธ์ ์ฌ๋ํด์ผ ํฉ๋๋ค.
์นด์ผ ...
์ฐ๊ตฌ์ ์ด๋ค ์์ผ๋ก๋ ๊ธฐ์ฌํ ์ ์๋ค๋ฉด _์ฌ๋_ํ๊ณ ์ถ์ต๋๋ค.
๋์ญํญ(๋น์ฉ)์ด ๋ฌธ์ ๊ฐ ์๋ ๊ฒ ๊ฐ์์ @getify ์์ผ๋ก ๋์๊ฐ๊ธฐ ์ํด ๋ฌด์์ ์ ์ํฉ๋๊น?
์ฃผ์ ํ์ง ๋ง์๊ณ ์ด๋ฉ์ผ(aaron [at] aaronpeters [dot] ๋๋ ํธ์ํฐ(@aaronpeters)
@kyle
์, ์ฌ์ ๋ก๋์ ๊ดํ ์คํฌ๋ฆฝํธ ํ๊ทธ "๊ฐ์ ์ฌํญ" ํ ๋ก ์ ๋ฐ๋์ผ๋ฉฐ ์คํ ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์์ผ๋ก "์คํฌ๋ฆฝํธ ํ๊ทธ์ ๋ ๋ค๋ฅธ ์์ฑ ์ถ๊ฐ" ์ ๊ทผ ๋ฐฉ์์ ๊ตฌ์ ํ์ง ์์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด xhr ์ฌ์์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ๋ณด์์ต๋๋ค. ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๊ฐ ์ป๋ ์์ ์ด์ ๊ณผ ๊ด๋ จํ์ฌ ๋ง์ ๋ณต์ก์ฑ์ด ๋ฐ์ํ์ต๋๋ค.
๋ถ๋ช ํ ๊ฒ์ ๋์ ์ฝ์ ์ ์ํํ ๋(์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ด๋ฏธ ์ํํ๊ณ ์๋) ์ฌ์ ๋ก๋ ๋์๋ง ๊ฑฐ์ ํ์ํ๋ค๋ ๊ฒ์ธ๋ฐ ๋๋์ฒด ์ ์ฐ๋ฆฌ๋ ์ฌ์ ํ ์คํฌ๋ฆฝํธ ํ๊ทธ ์ฝ์ ์ ์ฌ์ฉํด์ผ ํฉ๋๊น? ํ๊ทธ๋ฅผ ๊ฑฐ๊ธฐ์ ๋๊ฑฐ๋ DOM ๋ ธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ๊ณผ๋ ๋ค๋ฆ ๋๋ค. ๋ฌธ์ ๊ตฌ์กฐ์ ๊ด๋ จ์ด ์๋ ๋ชฉ์ ์ ์ํ ์๋จ์ผ ๋ฟ์ ๋๋ค.
๋๋ ๊ทธ ๋ผ์ธ์ ๋ฐ๋ผ ํจ์ฌ ๋ ํธ์ ํ ๊ฒ์ ๋๋ค.
window.loadScript( url, function( scriptObject ) {
if ( !scriptObject.error ) {
scriptObject.run();
}
});
์ด๊ฒ์ ๋๋ผ์ด ์ผ์ด ๋ ๊ฒ์ ๋๋ค. ์ฌ๋ฌ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ์ด๋ฒคํธ๋ฅผ "์กฐ์ธ"ํ ๋ค์ ํ์ํ ์์๋๋ก ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๊ฒ์ ์ถฉ๋ถํ ์ฝ์ต๋๋ค. ๋ํ DOM์ ์กด์ฌ๋ฅผ ์์ํ์ง ์์ ๋์ฑ ์ผ๋ฐ์ ์ ๋๋ค. ํ๋ฃจ๋นจ๋ฆฌ ์คํฌ๋ฆฝํธ ํ๊ทธ ์ฝ์ ์์ ์์ ํ ๋ฒ์ด๋๋ฉด ์ข๊ฒ ์ต๋๋ค. ๊ฒ๋ค๊ฐ, ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ์๊ณ ์๋ ํธ๋ฆญ์ ์ฌ์ฉํ์ฌ ์ด๊ฒ์ ํด๋ฆฌํํ๋ ๊ฒ์ ์ถฉ๋ถํ ์ฝ์ต๋๋ค. ๋ํ ์์ ํ require ์์คํ ๋ณด๋ค ๋ถ๋ด์ด ํจ์ฌ ์ ์ต๋๋ค(๊ทธ๋ฌ๋ ๋ธ๋ผ์ฐ์ ์ ๊ตญํ๋์ง ์๋ require ์์คํ ์ ์ํ ๋น๋ฉ ๋ธ๋ฆญ์ด ๋ ์ ์์).
์ฆ, ์ธ์ง๋ ์ฑ๋ฅ์ ๋ํด 100% ๋์ํฉ๋๋ค. "๋ชจ๋ ํจ๊ป ์์ถํ์"๋ ์ฃผ๋ฌธ์ด ๋น ๋ฅด๊ฒ ๋ด ์ทจํฅ์ ๋ง์ง ์๋ ๊ฒ์ ๋๋ฌด ํ๋ฆฌ๊ฒ ํ๋ ์ผ์ข ์ ๋ฏฟ์์ด ๋๊ธฐ ๋๋ฌธ์ ์ง์ ํ๊ณ ์ถ์์ต๋๋ค. ;)
fwiw, defer
๋ IE4+, Chrome, Safari ๋ฐ FF 3.5+์์ ์ง์๋ฉ๋๋ค. Opera์์๋ ์ง์๋์ง ์์ต๋๋ค.
์ฆ.... ์ฌ์ฉ์์ 98.5%๊ฐ ์ด๋ฏธ script@defer
์ง์์ ๋ฐ๊ณ ์์ต๋๋ค.
@getify
๊ทธ๋ฌ๋
defer
์๋ ์ฌ๋ฌ ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค.
์ธ๋ถ ์ฌํญ plz? ๋๋ ์ด๊ฒ์ ๋ํด ์๋ฌด๊ฒ๋ ๋ณธ ์ ์ด ์๋ค
defer๊ฐ ์๋ ์คํฌ๋ฆฝํธ๋ DOM ์ค๋น ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ด๋ ํ์ ์คํ๋ฉ๋๊น?
๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ ์์๊ฐ ์ ์ง๋ฉ๋๊น?
exec ์์์ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ์ ์ธ๋ถ ์ฐ๊ฒฐ์ ์ด๋ป์ต๋๊น?
@paulirish--
...98.5%์ ์ฌ์ฉ์๊ฐ ์ด๋ฏธ script@defer๋ฅผ ์ง์ํฉ๋๋ค.
๋ง์ ๋ธ๋ผ์ฐ์ ์์ ์ง์์ด ์์ ์ ์์ง๋ง ๊ทธ๋ ๋ค๊ณ ํด์ ๋ง์ ๋ธ๋ผ์ฐ์ ์์ ์ ๋ขฐํ ์ ์๋ ๊ฒ์ ์๋๋๋ค. ๊ทธ๊ฒ ๋ด๊ฐ ์๋ฏธํ๊ฑฐ์ผ. (์๋ ์ฐธ์กฐ)
๊ทธ๋ฌ๋ ์ฐ๊ธฐ์๋ ์ฌ๋ฌ ๊ฐ์ง ๋จ์ ์ด ์์ต๋๋ค.
์ธ๋ถ ์ฌํญ plz? ๋๋ ์ด๊ฒ์ ๋ํด ์๋ฌด๊ฒ๋ ๋ณธ ์ ์ด ์๋ค
์ฐธ์กฐํ์ธ์... IIRC:
defer
๊ฐ) ์ธ๋ผ์ธ ์ฝ๋๊ฐ ํฌํจ๋ ์คํฌ๋ฆฝํธ ํ๊ทธ์ ์ง์ ๋ defer
์ ๋ค๋ฅด๊ฒ ์๋ํ์ต๋๋ค. ์ฆ, ๋ ๊ฐ์ง ์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ชจ๋ ์ฐ๊ธฐํ๊ณ ์ฌ๋ฐ๋ฅธ ์์๋ก ์คํ๋๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค.defer
document.write()
๋ฌธ์ผ๋ก ์์ฑ๋ ์คํฌ๋ฆฝํธ ํ๊ทธ์ defer
์๋ ๋งํฌ์
์ ์คํฌ๋ฆฝํธ ํ๊ทธ์ ๋ค๋ฆ
๋๋ค.์ด ๋ฌธ์ ์ ๋ํ ๋ด ์๋์ ์ค๋น๋ ๋ง์ ์ธ๋ถ ์ ๋ณด๊ฐ ์์ต๋๋ค. ๋๋ ์ฝ 2๋
์ (LABjs ์ด์ )์ defer
๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ํ
์คํธ์์ ์ถฉ๋ถํ ๋ง์ฃผ์ณค๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ณ๋๊ณ ์ค์ ๋ก ๋ค์ ๋ฐฉ๋ฌธํ์ง ์์์ต๋๋ค.
๋ํ defer
๋ LABjs(๋ฐ ๊ธฐํ ๋ณ๋ ฌ ๋ก๋)๊ฐ ์ ๊ณตํ๋ ๊ฒ๊ณผ ์ค์ ๋ก ๋์ผํ์ง ์๋ค๋ ์ ์ ์ง์ ํด์ผ ํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋จ์ง ๊ทธ๊ฒ๊ณผ ๋น์ทํ๋ค๋ ๊ฒฝ๊ณ ์ ํจ๊ป ์์์ ๋งํ๋ค. ์ฌ์ค, ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ด ์ ๊ณตํ๋ ๊ฒ(์ ์ด๋ LABjs์ ๋ถ๋ถ์์๋)์ "์ ๋ ฌ๋ ๋น๋๊ธฐ์"์ด๋ฉฐ, ์ด๋ ๋งํฌ์
์ ํตํด์๋ง ๋ฌ์ฑํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์ ํ ์์ต๋๋ค.
"ordered async"์ "defer"์ ์ฐจ์ด์ ์ "ordered async"๋ ์ฒซ ๋ฒ์งธ ์์ฒญ๋ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์๋ฃ๋๋ ์ฆ์ ์คํ์ ์์ํ๋ ๋ฐ๋ฉด, "defer"๋ ์คํ์ ์์ํ๊ธฐ ์ ์ `DOM ์ค๋น๊ฐ ๋ ๋๊น์ง ๋๊ธฐํฉ๋๋ค. ๋งํฌ์ ์ด ๊ฑฐ์ ์๊ณ ๋ค๋ฅธ ์ฐจ๋จ ๋งํฌ์ ํธ์ถ(์: ๋ค๋ฅธ ์คํฌ๋ฆฝํธ ํ๊ทธ)์ด ์๋ ๊ฐ๋จํ ํ์ด์ง์ ๊ฒฝ์ฐ ์ด ์ฐจ์ด๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฆฌ์์ค๊ฐ ๋ง์ ํ์ด์ง์ ๊ฒฝ์ฐ ์คํฌ๋ฆฝํธ ์คํ์ด ํ์ฉ๋๋ ์์ ์ ํฌ๊ฒ ๋ค๋ฅผ ์ ์์ต๋๋ค.
๊ทธ๋์ ์์งํ defer
์ ์ ์ ์์ ๋๋ฌด ๋ง์ด ๋ฒ์ด๋์ง ์์์ผ๋ฉด ํฉ๋๋ค. ์๋ํ๋ฉด ์ค์ ๋ก๋ ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ด ์ ๊ณตํ๋ ๊ฒ๊ณผ ํฌ๊ฒ ๋น๊ต๋์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ด๊ฐ ์ป๊ณ ์๋ ์คํ ์์ ๋์์ ์ค๋ช
ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ๋งํฌ์
์ ์ฉ์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์์ผ ๋ฟ์
๋๋ค. defer
์ฌ๋ฆฌ์ง ๋ง์์ด์ผ ํ๋๋ฐ ํ ๋ก ์ด ํ๋ ค์ก์ ๋ฟ์
๋๋ค.
์์์๋ถํฐ ๋ค์ ๋งํ๊ฒ ์ต๋๋ค. "์ต์ ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ LABjs๋ '์์ํ๋ ๋น๋๊ธฐ' ๋์์ ๋ํ ์ผ์ข ์ 'ํด๋ฆฌํ'์ด๋ฉฐ, ์ด๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๋งํฌ์ ์ ์ฉ์ ์ ํํ ์ ์์ต๋๋ค."
๋๋ "ordered async"๋ฅผ ์ข์ํ๋๋ฐ, ์ข์ ํํ์ ๋๋ค.
Kyle > afaik, defer๊ฐ ์๋ ์คํฌ๋ฆฝํธ๋ domready ์ ์๋ _before_ onload๋ฅผ ์คํํฉ๋๋ค.
async ์์ฑ์ด ์๋ ์คํฌ๋ฆฝํธ๋ ์ต๋ํ ๋นจ๋ฆฌ ์คํํ๊ณ _always_ _before_ onloadํ์ง๋ง ๋ฐ๋์ domready ์ด์ ์ ์คํํด์ผ ํ๋ ๊ฒ์ ์๋๋๋ค.
@aaronpeters--
๋๋ ๋น์ ์ด ์ฝ๊ฐ ๊ถค๋์์ ๋ฒ์ด๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ์ดํดํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
async
์คํฌ๋ฆฝํธ(๋งํฌ์
์์ ๋๋ ๋์ ์ผ๋ก ์์ฑ๋จ)๋ DOM ์ค๋น ์ด์ ๋๋ ์ดํ๋ฅผ ์๋ฏธํ๋ ASAP๋ฅผ ์คํํฉ๋๋ค. ์ฆ, async
์คํฌ๋ฆฝํธ๋ ์๋ฌด ๊ฒ๋ ๊ธฐ๋ค๋ฆฌ์ง ์์์ผ ํฉ๋๋ค(JS ์์ง ๊ฐ์ฉ์ฑ ์์ฒด ์ ์ธ). ๊ทธ๋ฌ๋ window.onload
์ ์ ์์ฒญ๋๋ฉด ๊ฑฐ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๋ก๋ ๋ฐ ์คํ๋ ๋๊น์ง window.onload
์ด๋ฒคํธ๋ฅผ "์ ์ง"ํฉ๋๋ค. async
์คํฌ๋ฆฝํธ๊ฐ window.onload
์ ์งํ์ง ์๊ณ ์ ํํ ์ธ๋ถ ์ฌํญ์ ๊ธฐ์ตํ์ง ๋ชปํ๋ ๋ฌธ์ํ๋ ์ฌ๋ก๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฐ๋ฉด์ defer
๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋ค์์ ์๋ฏธํฉ๋๋ค. DOM์ด ์ค๋น๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ญ์์ค. ๊ฒ๋ค๊ฐ, defer
์ค์ ๋ ๋ชจ๋ ์คํฌ๋ฆฝํธ์ "๋๊ธฐ์ด"์ด ์์ด ๋๊ธฐ์ด์ด DOM ์ค๋น๊ฐ ๋ ๋๊น์ง ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค. ์ฆ, DOM ์ค๋น ์ดํ(๋๋ ์คํ๋ ค DOM์ด ์ค๋น๋๊ณ ๊ตฌ๋ฌธ ๋ถ์์ด ์๋ฃ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ ์ง์ฐ๋ ์ ์์ต๋๋ค(๋ก๋ฉ์ด ๋๋ฆฌ๊ฒ ์งํ๋๋ ๊ฒฝ์ฐ). ๊ทธ๋ค์ window.onload
์ ์งํด์ผ ํฉ๋๋ค. IE์ ์ผ๋ถ ๋ฒ์ ์์ ์ด ์ด๋ก ์ ์ค์ ์คํ์ด ์ฝ๊ฐ ๋ชจํธํ๋ค๋ ๋ง์ฐํ ๊ณผ๊ฑฐ์ ๊ธฐ์ต์ด ๋ ์ค๋ฆ
๋๋ค.
@getify
์ด ์ค๋ ๋๋ฅผ ๋ ์ด์ ํ์ ์ํค๊ณ ์ถ์ง ์์๊ธฐ ๋๋ฌธ์ ์คํฌ๋ฆฝํธ ์ฌ์ ๋ก๋์ ๋ํ ๋ด ์๊ฐ๊ณผ WHATWG ํ์ด์ง์ ๊ทํ์ ์ ์์ ๊ฒ์ํ์ต๋๋ค. http://jaubourg.net/ driving-a-nail-with-a-screwdriver-the-way
async
์คํฌ๋ฆฝํธ(๋งํฌ์ ์์ ๋๋ ๋์ ์ผ๋ก ์์ฑ๋จ)๋ DOM ์ค๋น ์ด์ ๋๋ ์ดํ๋ฅผ ์๋ฏธํ๋ ASAP๋ฅผ ์คํํฉ๋๋ค. ์ฆ,async
์คํฌ๋ฆฝํธ๋ ์๋ฌด ๊ฒ๋ ๊ธฐ๋ค๋ฆฌ์ง ์์์ผ ํฉ๋๋ค(JS ์์ง ๊ฐ์ฉ์ฑ ์์ฒด ์ ์ธ). ๊ทธ๋ฌ๋window.onload
์ ์ ์์ฒญ๋๋ฉด ๊ฑฐ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๋ก๋ ๋ฐ ์คํ๋ ๋๊น์งwindow.onload
์ด๋ฒคํธ๋ฅผ "์ ์ง"ํฉ๋๋ค.
JavaScript๊ฐ ๋จ์ผ ์ค๋ ๋๋ผ๋ ๊ฒ์ ์๊ฒ ๋๋ฉด ์ดํด๊ฐ ๋ ์ฌ์ธ ๊ฒ์ ๋๋ค. (์๊ฐ์ด ์ข ๊ฑธ๋ ธ๋ค๋ ๊ฑธ ์์ง๋ง...)
๋ง์ฐฌ๊ฐ์ง๋ก setTimeout(fn, 0)
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ๋ค์ด๋ก๋ํ๊ณ onload
๊ฐ ์คํ๋๊ธฐ ์ ์ ๋ค์ด๋ก๋ ๋๊ธฐ์ด์ ๋ค์ด๊ฐ๋ฉด ์ด๋ฌํ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ฉด (์ฌ์ ํ) onload
์ง์ฐ๋ฉ๋๋ค.
async
์คํฌ๋ฆฝํธ๊ฐwindow.onload
์ ์งํ์ง ๋ชปํ ๋ฌธ์ํ๋ ์ฌ๋ก๊ฐ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค๋ง ์ ํํ ์ธ๋ถ ์ฌํญ์ ๊ธฐ์ตํ์ง ๋ชปํ ๋ฟ์ ๋๋ค.
์ด์ ๋ํด ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ป๊ณ ์ถ์ต๋๋ค. ๊ธฐ์ตํด์ฃผ์ธ์! :)
์ผ ์คํฌ๋ฆฝํธ ๋ก๋!
AOL์ ์ฌ์ดํธ ๋คํธ์ํฌ๋ฅผ ํตํด ๊ตฌํํ ๋ฌธ์ ๋ ๊ฒฝ์ ์กฐ๊ฑด์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ํค๋์์ jQuery๋ฅผ ๋น๋๊ธฐ์์ผ๋ก ๋ก๋ํ ๋ค์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ๋ด๋ถ์์ ๋น๋๊ธฐ์์ผ๋ก ์ ๋ฌ๋๋ ๋ฌธ์์ ์ค๊ฐ์ jQuery ํ๋ฌ๊ทธ์ธ์ ๋งํฉ๋๋ค.
๋ฐ๋ผ์ ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋๋ง์ ์คํฌ๋ฆฝํธ ๋ก๋ ๊ณผํ ํ๋ก์ ํธ(Boot.getJS)๋ฅผ ์์ํ์ต๋๋ค. ์์ด๋์ด๋ ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๋ ฌ๋ก ๋ค์ด๋ก๋ํ๊ณ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์์์ ๊ด๊ณ์์ด ์คํํ๋ ๊ฒ์ ๋๋ค. ๋ํ ์ค๋น ๋๋ ๋ก๋ ์ง์ฐ ๋ฐ ์คํฌ๋ฆฝํธ ์บ์ฑ์ ์ง์ํฉ๋๋ค. ์ด ์ค๋ ๋์ ์ฌ๋๋ค์ด ๋๋ถ๋ถ์ ์์ด๋์ด๋ฅผ ๋น๋ ธ์ต๋๋ค(๋๋). ๊ฐ์ฌํฉ๋๋ค. :)
๋ฒค์น๋งํฌ์ ๋ํด ๋ ผ์ํ๊ณ ์์๊ธฐ ๋๋ฌธ์ ๋ค์ํ ์คํฌ๋ฆฝํธ ๋ก๋์ ์ฑ๋ฅ, ๊ตฌ๋ฌธ ๋ฐ ๋์์ ์ฐจ์ด์ ์ ์ดํดํ๊ธฐ ์ํด ๋ง๋ ํ ์คํธ ํ์ด์ง๋ฅผ ๊ณต์ ํ๋ ค๊ณ ํฉ๋๋ค. ์ฌ๊ธฐ์์ ํ์ธํ์ธ์.
http://artzstudio.com/files/Boot/test/benchmarks/script.html
๋ค์ํ ๋ก๋๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด๋ ค๋ฉด ์บ์๋ฅผ ์ง์ฐ๊ณ ๋คํธ์ํฌ ์์ฒญ๊ณผ ๋ง์ง๋ง ์๊ฐ ๋ฐ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ์์๋ฅผ ํ์ธํ์ญ์์ค.
Dave(@artzstudio), ์๊ฐ๊ณผ ํ ์คํธ ํ์ด์ง ๋งํฌ๋ฅผ ๊ณต์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ง๋ฌธ: '<script> tag in head' ํ์ด์ง์ LABjs๋ฅผ ๋ก๋ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์๋ชป๋ ๊ฒ ๊ฐ์ต๋๋ค.
@artzstudio ๋ ์ด์ ๋ฒ์ ์ LABjs๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์๋์ ์ธ๊ฐ์? ๊ทธ๋ ๋ค๋ฉด ์?
@aaronpeters AOL์๋ ํค๋์ ๋ค์ด๊ฐ์ผ ํ๋ Omniture Ad ์ฝ๋(๋ฐ ๊ทธ ์ด์)์ ๊ฐ์ ์คํฌ๋ฆฝํธ๊ฐ ์์ผ๋ฏ๋ก ์ฌ์ฉ ์ฌ๋ก์์ ๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ๊ณณ์ผ๋ก ์ด๋ํฉ๋๋ค. ๋ํ ์คํฌ๋ฆฝํธ๊ฐ ๋งจ ์๋์ ์์ ๋ ์ผ๋ถ ์์ ฏ์ FOUC ๋ฌธ์ ๊ฐ ์์ผ๋ฏ๋ก ์ข ์ ํญ๋ชฉ(์: jQuery)์ด ๋นจ๋ฆฌ ๋ก๋๋ ์๋ก ์ข์ต๋๋ค.
๊ณ ์๊ฐ ์๋์์ต๋๋ค. ์ด ํ ์คํธ๋ ๋ช ๋ฌ ์ ์ ๋๋ค. ๊ธฐํ๊ฐ ๋๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค.
์ฐธ๊ณ ๋ก(์ด ๋ด์ฉ์ด ๋ค์ ํฅ๋ฏธ๋กญ๊ฑฐ๋ ๊ด๋ จ์ด ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.) Webpagetest.org์์ ๋ช ๊ฐ์ง ํ
์คํธ๋ฅผ ์คํํ์ฌ @artzstudio ํ
์คํธ ํ์ด์ง ์ค ์ผ๋ถ๋ฅผ ๋ก๋ํ ๋ IE8์์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ํ์ธํ์ต๋๋ค.
์คํฌ๋ฆฝํธ ํ๊ทธ: http://www.webpagetest.org/result/110810_C7_752b756180e132f50a3ef065e9e059ca/
์ํ๋
ธํ: http://www.webpagetest.org/result/110810_8S_a53f4ed2e16179c328fc57c572e71076/
LABjs: http://www.webpagetest.org/result/110810_ZV_1ece92044799e52ed5199aed6b407133/
RequireJS: http://www.webpagetest.org/result/110810_Z3_a1537e41a0b0570286151859973d0cfa/
Yepnope์ LABjs ๋น๊ต ๋์์: http://www.webpagetest.org/video/view.php?id=110810_074cb94c1b04a7ac9bd6538ec3fdd8d3c07f842d
๋ช ๊ฐ์ง ์ฐธ๊ณ ์ฌํญ:
์ด ๋ ๊ฐ์ง ์ด์ ๋ก ์ ๋ Yepnope์ LABjs๋ง ๋ณด์ฌ์ฃผ๋ ๋น๋์ค๋ฅผ ๋ง๋ค์์ต๋๋ค.
๋ด๊ฐ ํฅ๋ฏธ๋ก์ด ์ ์ Start Render ์๊ฐ์ด LABjs์ ํจ์ฌ ๋ ์ข๋ค๋ ๊ฒ์ ๋๋ค. ์ ๊ทธ๋ฐ ๊ฒ๋๊น? ๋ ์ ์ดํดํ๊ณ ์ถ์ต๋๋ค.
๋๋งบ๋ ๋ง: ๋๋ Yepnope๋ ๊ทธ์ ๋น์ทํ ๊ฒ๋ณด๋ค LABjs๋ฅผ ์ ํธํ ๋ชฉ์ ์ผ๋ก ์ด ๊ธ์ ๊ฒ์ํ์ง ์์ต๋๋ค. ๊ทธ๋ฅ ๋ฐ์ดํฐ ๊ณต์ ...
์ ์ฃ์กํฉ๋๋ค. <script> ํ ์คํธ์์ LABjs์ ๋ํด ๋ง์ํ์ ๋ด์ฉ์ ํ์ธํ์ต๋๋ค. LABjs๋ก์ ์ ๊ทธ๋ ์ด๋์ ํจ๊ป ์ง๊ธ ์์ ๋์์ต๋๋ค.
@artzstudio--
๋ฐ๋ผ์ ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋๋ง์ ์คํฌ๋ฆฝํธ ๋ก๋ ๊ณผํ ํ๋ก์ ํธ(Boot.getJS)๋ฅผ ์์ํ์ต๋๋ค. ์์ด๋์ด๋ ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๋ ฌ๋ก ๋ค์ด๋ก๋ํ๊ณ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์์์ ๊ด๊ณ์์ด ์คํํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋์, ์ด๊ฒ์ด LABjs๊ฐ _์ ํํ_ ๋ฌด์์ ์ํด ์ค๊ณ๋์๊ณ ๋งค์ฐ ์ ์๋ํ๋ค๋ ์ฌ์ค์ ์๊ณ ๊ณ์ จ์ต๋๊น? (๋ด๊ฐ ๊ทธ๋ ๊ฒ ๋งํ๋ค๋ฉด)? ๋ด ๋ง์, ๋ค๋ฅธ API๋ฅผ ์ํ์ต๋๊น, ์๋๋ฉด ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ๊ธฐ๋ฅ์ด ์ถฉ๋ถํ์ง ์์์ต๋๊น?
์ด์จ๋ LABjs์ ๋ํด ์๋ํ๊ณ ์ถ์ ๋งํผ ์ด ์ค๋ ๋๋ฅผ "๋ด๋ผ, ๋ด ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ X์์ ๋ ๋ซ๋ค"๋ ํ์์ ํ ๋ก ์ผ๋ก ์๋ ์ ๋น ์ง๋ ๊ฒ์ ํจ๊ณผ์ ์ด์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฌํ ํ ๋ก ์ ์ ์ฉํ์ง๋ง ๋ค๋ฅธ ๊ณณ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ ๋ชจ๋ ์คํฌ๋ฆฝํธ ๋ก๋ ๊ธฐ์ ์ ๋ช ๊ฐ์ง ๊ฐ๋จํ ์์ด๋์ด๋ก ์์ฝ๋ฉ๋๋ค. ์ด๋ค ์ข ๋ฅ์ ๋ฉ์ง API๋ฅผ ๊ทธ ์์ ๋ ์ด์ด๋งํ๋ , ๋๋ ์ด๋ค ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ถฉ์กฑํ๋ ๊ธฐ์ ์ ๋์ผํฉ๋๋ค. ์์ฆ์๋ 50๊ฐ์ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์์ด์ผ ํ๋ฉฐ ์ค์ ๋ก ๊ทธ๋ค ์ค ์ด๋ ๊ฒ๋ ๊ธฐ์ ์ธก๋ฉด์์ ๋ค๋ฅธ ๊ฒ์ ์ ๊ณตํ์ง ์์ผ๋ฉฐ ๋จ์ง ๋ค๋ฅธ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ผ์ API๋ฅผ ๋น๊ตํ๋ ๊ฒ์ ์ค์ ๋ก๋ ๋ค์ ๊ด๋ จ์ด ์๋ ํ ๋ก ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ง์คํด์ผ ํ ๊ฒ์ ํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ณธ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋งํฌ์ ์์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ ํ์ด์ง ๋ก๋ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๊น? ์ด๊ฒ์ ๊ทธ๊ฒ์ด ์ ๋์ ์ผ๋ก ์ฌ์ค์ด๋ผ๋ ๋์ ์ค๋ ์ ์ ์ด์ง๋ง, ๊ทธ ์ ์ ๋ ์ด ์ค๋ ๋์์ ์๋ฌธ์ ์ ๊ธฐํ์ต๋๋ค. ๋ฐ๋ผ์ ์์ #1์ ๊ทธ ์ง๋ฌธ์ ๋ตํ๋ ๊ฒ์ ๋๋ค.
์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ๋จ์ํ ์คํฌ๋ฆฝํธ ๋ก๋ฉ๋ณด๋ค ๋ซ๋ค๋ ๊ฒ์ ์๊ฒ ๋๋ค๋ฉด, ์ฐ๋ฆฌ๋ ์ด ๋ชจ๋ ๋ฏธ์น ์ง์ ๋ฉ์ถ๊ณ ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ์ข ๋ฃํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๋ ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ;-)
์์ #2๋ ์คํฌ๋ฆฝํธ ์ฐ๊ฒฐ์ด ํญ์ ๋ณ๋ ฌ ๋ก๋๋ณด๋ค ๋์์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ๋ค์ ๋งํ์ง๋ง, ๋ด ์ ์ (๋ฐ ๋ด ํ ์คํธ)์ ๋ฐ๋ฅด๋ฉด ๋ชจ๋ ํ์ผ์ ํ๋๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด ์ข์ง๋ง ํฐ ํ์ผ์ 2-3๊ฐ์ ๋๋ต ๋์ผํ ์กฐ๊ฐ์ผ๋ก ์ฒญํฌํ๊ณ ํด๋น ์ฒญํฌ๋ฅผ ๋ณ๋ ฌ๋ก ๋ก๋ํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๊ทธ ์ด๋ก ๋ ํ ์คํธํด์ผ ํฉ๋๋ค.
script-concat์ด ํญ์ ์ต๊ณ ๋ผ๋ ๊ฒ์ ์๊ฒ ๋๋ค๋ฉด ๋๋ถ๋ถ์ ์ฌ์ดํธ๊ฐ ๋ ์ด์์ ์์น์์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ค๋ ์ ์ ๊ณ ๋ คํ ๋ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์ฌ์ ํ ์ ์ฉํฉ๋๋ค(Google CDN์ jquery, google์ google analytics, facebook/twitter/g+ ๋ฒํผ , ๋ฑ). ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์์ #3์ผ๋ก concat์ด ํจ์ฌ ๋ ๋์์ง ๊ฒฐ์ ํ์ฌ ๋ชจ๋ ํ์ผ์ ์์ฒด ๋ณต์ฌ๋ณธ์ ํธ์คํ ํ๊ณ ์์ ์ ์ฝ๋์ ํจ๊ป ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค.
Kyle, ์ ์์ ์ ์์ค๋ฅผ ๋ณด๊ณ ์ด๋ป๊ฒ LabJS๋ฅผ ๊ณ์ธกํ์ฌ ํ์ด์ง์ ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์๋๋ก(์ฒด์ธ ์ธ๋ถ์์๋) ์คํํ๋์ง ์๋ ค์ฃผ์ค ์ ์์ต๋๊น? API๋ฅผ ์๋ชป ์ฝ์์ ์๋ ์์ต๋๋ค(Paul์ด ๋งํ๋ฏ์ด ์คํฌ๋ฆฝํธ ๋ก๋๋ ์ด๋ ต์ต๋๋ค, %-).
2011๋ 8์ 10์ผ ์ค์ 9์ 9๋ถ์ [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@artzstudio--
๋ฐ๋ผ์ ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋๋ง์ ์คํฌ๋ฆฝํธ ๋ก๋ ๊ณผํ ํ๋ก์ ํธ(Boot.getJS)๋ฅผ ์์ํ์ต๋๋ค. ์์ด๋์ด๋ ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๋ ฌ๋ก ๋ค์ด๋ก๋ํ๊ณ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์์์ ๊ด๊ณ์์ด ์คํํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋์, ์ด๊ฒ์ด LABjs๊ฐ _์ ํํ_ ๋ฌด์์ ์ํด ์ค๊ณ๋์๊ณ ๋งค์ฐ ์ ์๋ํ๋ค๋ ์ฌ์ค์ ์๊ณ ๊ณ์ จ์ต๋๊น? (๋ด๊ฐ ๊ทธ๋ ๊ฒ ๋งํ๋ค๋ฉด)? ๋ด ๋ง์, ๋ค๋ฅธ API๋ฅผ ์ํ์ต๋๊น, ์๋๋ฉด ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ๊ธฐ๋ฅ์ด ์ถฉ๋ถํ์ง ์์์ต๋๊น?
์ด์จ๋ LABjs์ ๋ํด ์๋ํ๊ณ ์ถ์ ๋งํผ ์ด ์ค๋ ๋๋ฅผ "๋ด๋ผ, ๋ด ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ X์์ ๋ ๋ซ๋ค"๋ ํ์์ ํ ๋ก ์ผ๋ก ์๋ ์ ๋น ์ง๋ ๊ฒ์ ํจ๊ณผ์ ์ด์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฌํ ํ ๋ก ์ ์ ์ฉํ์ง๋ง ๋ค๋ฅธ ๊ณณ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ ๋ชจ๋ ์คํฌ๋ฆฝํธ ๋ก๋ ๊ธฐ์ ์ ๋ช ๊ฐ์ง ๊ฐ๋จํ ์์ด๋์ด๋ก ์์ฝ๋ฉ๋๋ค. ์ด๋ค ์ข ๋ฅ์ ๋ฉ์ง API๋ฅผ ๊ทธ ์์ ๋ ์ด์ด๋งํ๋ , ๋๋ ์ด๋ค ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ถฉ์กฑํ๋ ๊ธฐ์ ์ ๋์ผํฉ๋๋ค. ์์ฆ์๋ 50๊ฐ์ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์์ด์ผ ํ๋ฉฐ ์ค์ ๋ก ๊ทธ๋ค ์ค ์ด๋ ๊ฒ๋ ๊ธฐ์ ์ธก๋ฉด์์ ๋ค๋ฅธ ๊ฒ์ ์ ๊ณตํ์ง ์์ผ๋ฉฐ ๋จ์ง ๋ค๋ฅธ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ผ์ API๋ฅผ ๋น๊ตํ๋ ๊ฒ์ ์ค์ ๋ก๋ ๋ค์ ๊ด๋ จ์ด ์๋ ํ ๋ก ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ง์คํด์ผ ํ ๊ฒ์ ํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ณธ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋งํฌ์ ์์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ ํ์ด์ง ๋ก๋ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๊น? ์ด๊ฒ์ ๊ทธ๊ฒ์ด ์ ๋์ ์ผ๋ก ์ฌ์ค์ด๋ผ๋ ๋์ ์ค๋ ์ ์ ์ด์ง๋ง, ๊ทธ ์ ์ ๋ ์ด ์ค๋ ๋์์ ์๋ฌธ์ ์ ๊ธฐํ์ต๋๋ค. ๋ฐ๋ผ์ ์์ #1์ ๊ทธ ์ง๋ฌธ์ ๋ตํ๋ ๊ฒ์ ๋๋ค.
์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ๋จ์ํ ์คํฌ๋ฆฝํธ ๋ก๋ฉ๋ณด๋ค ๋ซ๋ค๋ ๊ฒ์ ์๊ฒ ๋๋ค๋ฉด, ์ฐ๋ฆฌ๋ ์ด ๋ชจ๋ ๋ฏธ์น ์ง์ ๋ฉ์ถ๊ณ ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ์ข ๋ฃํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๋ ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ;-)
์์ #2๋ ์คํฌ๋ฆฝํธ ์ฐ๊ฒฐ์ด ํญ์ ๋ณ๋ ฌ ๋ก๋๋ณด๋ค ๋์์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ๋ค์ ๋งํ์ง๋ง, ๋ด ์ ์ (๋ฐ ๋ด ํ ์คํธ)์ ๋ฐ๋ฅด๋ฉด ๋ชจ๋ ํ์ผ์ ํ๋๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด ์ข์ง๋ง ํฐ ํ์ผ์ 2-3๊ฐ์ ๋๋ต ๋์ผํ ์กฐ๊ฐ์ผ๋ก ์ฒญํฌํ๊ณ ํด๋น ์ฒญํฌ๋ฅผ ๋ณ๋ ฌ๋ก ๋ก๋ํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๊ทธ ์ด๋ก ๋ ํ ์คํธํด์ผ ํฉ๋๋ค.
script-concat์ด ํญ์ ์ต๊ณ ๋ผ๋ ๊ฒ์ ์๊ฒ ๋๋ค๋ฉด ๋๋ถ๋ถ์ ์ฌ์ดํธ๊ฐ ๋ ์ด์์ ์์น์์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ค๋ ์ ์ ๊ณ ๋ คํ ๋ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์ฌ์ ํ ์ ์ฉํฉ๋๋ค(Google CDN์ jquery, google์ google analytics, facebook/twitter/g+ ๋ฒํผ , ๋ฑ). ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์์ #3์ผ๋ก concat์ด ํจ์ฌ ๋ ๋์์ง ๊ฒฐ์ ํ์ฌ ๋ชจ๋ ํ์ผ์ ์์ฒด ๋ณต์ฌ๋ณธ์ ํธ์คํ ํ๊ณ ์์ ์ ์ฝ๋์ ํจ๊ป ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/paulirish/html5-boilerplate/issues/28#issuecomment -1772315
๋ฌผ๋ฆฌํ์์๋ concat์ด ์ต๊ณ ๋ผ๊ณ ์๊ฐํ ๊ฒ์ ๋๋ค. ๋ชจ๋ ์๋ก์ด HTTP ์ฐ๊ฒฐ์ CDN์ ๋ ๋์ ์๋๋ฆฌ์ค์์ ๋ ๋ค๋ฅธ ๋๋ฆฐ ์์ + 100ms ์ธ๊ธ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋ฌธ์์ ์ง์ค์ ๋ฌธ์๊ฐ ๋งค์ฐ ๊ธธ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ํค๋์ ํ๋์ BFJS ํ์ผ์ ๋ก๋ํ๋ฉด ๋ชจ๋ ์ด๊ธฐํ๊ฐ ๋ถํ์ํ๊ฒ ๋๋ ค์ง ์ ์์ต๋๋ค. ๋ง์ง๋ง์ ๋ก๋ํ๋ฉด ์ฑ๊ฐ์ FOUC๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋์ฉ๋ ํ์ผ์ ๋ชจ๋ฐ์ผ ์ํฅ์ด ์์ ์ ์์ต๋๋ค. http://www.yuiblog.com/blog/2010/06/28/mobile-browser-cache-limits/
์ด๊ฒ์ด Souders์ "ํ์ด๋ก๋ ๋ถํ " ๊ท์น(http://oreilly.com/server-administration/excerpts/9780596522315/splitting-the-initial-payload.html) ๋ค์ ์๋ ๋๊ธฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๊ฐ์งํ ์ ์๋ ์๋๋ ๋ ๋นจ๋ผ์ผ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ถํํ๊ฒ๋ ์ด๊ฒ์ด ์์ฝ๋๋ ๊ฒ์ "๊ทธ๊ฒ์ ๋ฌ๋ ค์๋ค"๋ ๋๋ต์ผ๋ก, ์ฐ๋ฆฌ ๋ชจ๋๋ฅผ ์ฆ๊ฒ๊ฒ ํ๊ธฐ์ ์ถฉ๋ถํ ์ด ๋ฌธ์ ๋ฅผ ํฅ๋ฏธ๋กญ๊ฒ ๋ง๋ญ๋๋ค.
getJS ํธ์ถ์ด ํ์ ๋๊ธฐ๋๊ณ ์ ํด์ง ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ์ฃผ๊ธฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋๋ ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ง๊ณ ๋๊ณ ์์ต๋๋ค. ๋ํ ๋ชจ๋ ์ข ์์ฑ ์์ค์์ ์ฐ๊ฒฐํฉ๋๋ค(์: ํ ๋ฒ์ ํ๋์ฉ ๋ก๋ํ๋ ๋์ RequireJS ์ข ์์ฑ ์ฐ๊ฒฐ). ๋ชจ๋ ๊ฒ์ด ํ๋ก ํธ ์๋์์ ์ฆ์์์ ์งํ๋ฉ๋๋ค.
๊ทธ๊ฒ์ ๋น์ ์ด ์ง์ ํ ๊ฒ์ฒ๋ผ ๊ณง ๋ฌด์๋ฏธํด์ง ๊ฒ์ด์ง๋ง ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํฅ๋ฏธ๋ก์ด ๊ณผํ ์คํ์ ๋๋ค.
@getify : ์ด ์์ ์์ ํผ๋ ์ด๋์ ๋ํด ๊ฑฐ์ ์ค์ค์ ๊ทธ๋ ์ต๋๋ค .
์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ๋จ์ํ ์คํฌ๋ฆฝํธ ๋ก๋ฉ๋ณด๋ค ๋ซ๋ค๋ ๊ฒ์ ์๊ฒ ๋๋ค๋ฉด,
๊ทธ๋ฌ๋ฉด ์ฐ๋ฆฌ๋ ์ด ๋ชจ๋ ๊ด๊ธฐ๋ฅผ ๋ฉ์ถ๊ณ ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ์ข ๋ฃํ ์ ์์ต๋๋ค.
๋๋ ๊ทธ๋ ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ;-)
๋๋ ๋ฑ ๊ธฐ๋ฆ์ ๋ํด ๋ง์ ๊ฒ์ ๋งํ ์ ์์ง๋ง ๋ฐ๋ชจ๋ ์ ์๋ํฉ๋๋ค.
http://jashkenas.s3.amazonaws.com/misc/snake-oil/labjs.html
http://jashkenas.s3.amazonaws.com/misc/snake-oil/vanilla.html
100k์ ํ
์คํธ, 10๊ฐ์ ์ด๋ฏธ์ง, 171k์ JavaScript๊ฐ ์๋ ํ์ด์ง์
๋๋ค. ๋ฐ๋๋ผ ๋ฒ์ ์ jQuery, jQuery-UI, Underscore, Backbone์ด ํฌํจ๋ ๋จ์ผ ์ถ์ ํ์ผ๊ณผ ๋ก๋ ์๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ timer.js
ํ์ผ์ ์ฌ์ฉํฉ๋๋ค. LABjs ๋ฒ์ ์ LABjs๋ฅผ ์ฌ์ฉํ์ฌ 5๊ฐ์ ๊ฐ๋ณ์ ์ผ๋ก ์ถ์๋ JavaScript ํ์ผ์ ๊ฐ๊ฐ ๋ก๋ํฉ๋๋ค.
LAB ๋ฒ์ ์๋ ์ด์ ์ด ์์ ๋ฟ๋ง ์๋๋ผ ์ถ๊ฐ HTTP ์์ฒญ์ด ๋ก๋ ์ฑ๋ฅ์ ์ ํ์ํค๊ณ ์ด๋ฏธ์ง์ ๊ฐ์ ํ์ด์ง์ ๋ค๋ฅธ ์์ฐ๊ณผ ๊ฒฝ์ํด์ผ ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด ๋ชจ๋ ๊ฒ์ ์ด์ ์ ์ฌ๋ฌ ๋ฒ ์ธ๊ธ๋์์ต๋๋ค...
๋๋ ๋น์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์กฐ๊ธ์ฉ ๋ก๋ฉํ๋ ๊ฒ์ ๋ํ ๋ฐ๋ก ์ ์์ํ ์ ์์ต๋๋ค ... ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ๊ธฐ์ ๊ณผ ์์ ํ ์ง๊ตํ๋ฏ๋ก ๋ ผ์์์ ์ ์ธํ์ญ์์ค.
๋ถ๋, ๊ด๊ธฐ๋ฅผ ๋ฉ์ถ์ญ์์ค.
@jashkenas ์ ์ฒด, 100% ์น์ธ. ์คํฌ๋ฆฝํธ ๋ก๋๋ ์ค๋ฒํค๋, ๋ณต์ก์ฑ ๋ฐ ์คํจ ์ง์ ์ ์ถ๊ฐํ ๋ฟ์ ๋๋ค. ๋จ์ผ ์๋ฒ ์ฐ๊ฒฐ ํ์ผ์ ์์ํ ์ ์ก ์๊ฐ๊ณผ JavaScript ์ธํฐํ๋ฆฌํฐ์ ํจ์จ์ฑ ๋ฉด์์ ๋ชจ๋ ๋น ๋ฅด๊ฒ ๋ก๋๋๋ฉฐ, ๋ณด๋์ค๋ก ํ์ผ์ด ํ๋๋ฟ์ธ ๊ฒฝ์ฐ gzipping์ด ๋ ์ ์๋ํฉ๋๋ค.
LABjs ๋ฒ์ ์ _๋๋๋ก_ ๋ด ๋ธ๋ผ์ฐ์ ์์ ๋ ๋น ๋ฅด๊ฒ ๋ก๋๋์ง๋ง(๋ฐ๋๋ผ ํ์ด์ง์ ๋น๊ตํ์ฌ) ์ผ๊ด๋์ง๋ ์์ต๋๋ค. ๋ํ onload
๊ฐ ํญ์ ์คํ๋๋ ๊ฒ์ ์๋๋ฏ๋ก... ์ด์ํ๊ฒ ๋ณด์
๋๋ค.
์, gzipping์ ๋ ์ ์ HTTP ์์ฒญ์ผ๋ก ๋ ๋ง์ ์ ์ฒด ์น๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋
๋จ์ ๊ดํ ๊ฒ์ด ์๋๋ฉฐ ์ ์ฒด ์ฑ์ ๋ํด _๋จ์ผ_ JS ํ์ผ์ผ ํ์๋ ์์ต๋๋ค. defer
๊ฐ ํฌํจ๋ ๋ ๊ฐ ๋๋ ์ธ ๊ฐ๋ ๋์ค์ ๋ก๋ํ ๋์ ๊ฐ์ด ์ธ๋ถํ๋ ์บ์ฑ์ ์ ํฉํฉ๋๋ค.
Google Page Speed โโํ์ ์ผ๋ถ ์ฐ๊ตฌ:
http://pagespeed-velocity2011.appspot.com/#8 ์ฌ๋ผ์ด๋ 8-14 ์ฐธ์กฐ
๋๋ ์ฌ์ ํ ์คํฌ๋ฆฝํธ @defer
์์ฑ์ ์ด๊ดํ๋ฉฐ ์์ ์ ๋ณํ์ ๋ํ ์ฑ๋ฅ ํ
์คํธ์ ๋ง์ ์๊ฐ/์ผ์ ํ ์ ํ ๊ณํ์ด ์๋ค๋ฉด ์ด๊ฒ์ด ํ๋ช
ํ ๊ธฐ๋ณธ ๊ธฐ๋ณธ๊ฐ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@miketaylr : ์, ์ ์ฒด ๋๋์ ์ป์ผ๋ ค๋ฉด ๊ฐ ํ์ด์ง๋ฅผ ์ฌ๋ฌ ๋ฒ shift-refreshํ์ญ์์ค. S3 ๋๊ธฐ ์๊ฐ๊ณผ ์ด๋ฏธ์ง ๋ก๋๋ ์ค์ ์ฑ์ฒ๋ผ ์๋ํ์ฌ ์ํฉ์ ์ฝ๊ฐ ์์ธกํ ์ ์๊ฒ ๋ง๋ญ๋๋ค.
์ labjs _always_๋ shift-refresh๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์์๊ฐ ์บ์๋ ๊ฒฝ์ฐ์๋ ๋ด ๋ธ๋ผ์ฐ์ (Safari 5.1)์์ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ๋ก๋๋ฉ๋๋ค.
๋ฌผ๋ก ์ฐ๊ฒฐํ์ง ์๊ณ ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฐ๊ฒฐ๋ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ณด๋ค ๋๋ฆด ๊ฒ์ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค(YUI, requireJS)์ ์ฐ๊ฒฐ๋ ํ์ผ์ ๋ก๋ํ๋ ์คํฌ๋ฆฝํธ ๋ก๋์ ์์ฒญ ์ ์ฐ๊ฒฐํ๋ ์๋น์ค๋ฅผ ๋ง๋ค์์ต๋๋ค(https://github.com/rgrove/combohandler).
์ด ํ ๋ก ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์คํฌ๋ฆฝํธ ๋ก๋๋ ํนํ ์ฌ์ฉ์ ์ํธ ์์ฉ ํ ์์ฒญ ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด "๋ก๊ทธ์ธ" ๋ฒํผ์ ํด๋ฆญํ ๋ ๋ํ ์์ ๋ฐ ์์ ์ ํจ์ฑ ๊ฒ์ฌ ๋ค์ ๋ ผ๋ฆฌ๋ฅผ ๋ก๋ํฉ๋๋ค.
@jashkenas ์ @madrobby ๊ฐ ์ผ์ ์ง๋์น๊ฒ ๋จ์ํํ๊ณ ์๋ค๋ ๊ตํํ ์์ฌ์ด ์์ต๋๋ค.
Steve ๋ ๋ณ๋ ฌ ๋ค์ด๋ก๋๊ฐ ๋ค์ํ ์ฐจ๋จ ๋ฌธ์ ์ ๋ธ๋ผ์ฐ์ ์ ๋ํด ๋ช ๊ฐ์ง ์ด์ ์ด
๋ด ์๋ ๊ฒ์๋ฌผ์ ๋ช ํํ์ง ์์ ๊ฒฝ์ฐ. ๋๋ (jdalton๊ณผ ํจ๊ป) ๊ณ ๋๋ก ํ ์คํธ๋๊ณ ํน๋ณํ ์ฃผ์๊ฐ ํ์ํ ํน์ ํ๊ฒฝ์์ ์คํฌ๋ฆฝํธ ๋ก๋์ ์ด์ ์ด ๊ฝค ์๋ค๋ ๋ฐ ๋์ํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ์ ์ ํ ๊ธฐ๋ณธ๊ฐ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@jdalton์ ๋์ํฉ๋๋ค. ํฌ๊ธฐ์ ๋ง๋ ๋ก๋๊ฐ ์์ต๋๋ค. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ค์ ํ์์ ํ๋ก์ ํธ์ ๋ฐ๋ผ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋๋ก๋ yepnope ๋๋ LabJS์ ๊ฐ์ ๊ฐ๋จํ ๊ฒ์ด ๊ด์ฐฎ๊ณ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ RequireJS๊ฐ ์ ์ ์ ๋ฌผ์ ๋๋ค. ๋ณด์ผ๋ฌํ๋ ์ดํธ๊ฐ ๊ฐ์ ๋ก ๋ค์ด๊ฐ์ผ ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ณด์ผ๋ฌํ๋ ์ดํธ๊ฐ ์คํฌ๋ฆฝํธ ๋ก๋๋ก ์ฝ๊ฒ ์ ํํ ์ ์๋๋ก ํ๋ ์์ด๋์ด์ด๊ธฐ ๋๋ฌธ์ ๊น๋ค๋กญ์ต๋๋ค... ๊ทธ๋์ ๋ชฉ์๋ฌผ๊ณผ ํจ๊ป ์๊ธฐ๋ฅผ ๊ทธ๋ฅ ๋ฒ๋ฆฌ์ง๋ ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋๋.
๋ํ @getify ๋ชจ๋ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์ค์ ๋ก ๋์ผํ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์ฒํ๋ ๊ฒ์ ์ ๋ณด๊ฐ ์๋ ์ง์ ์ ๋๋ค.
๊ฐ์น ์๋ ์ผ์ ์ํด...
์ด๊ฒ
var script = document.createElement('script')
script.src = 'foo.js'
document.getElementsByTagName('head')[0].appendChild(script)
์ด๊ฒ๋ณด๋ค ๋ซ๋ค
<script src="foo.js"></script>
์ฐจ๋จ๋์ง ์๋ ์ฃผ๋ ์ด์ ์ค ํ๋์ ๋๋ค. ๋ฐ๋ผ์ ํ์ ์ด๋ฏธ์ง ๋ฐ CSS ํ์ผ์ ํด๋น ํ์ผ์ด ์ต์ ๋ฒ์ ์ผ๋ก ๋ค์ด๋ก๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. ์ ์๋ ๋น๋๊ธฐ์ โ ์ด๊ฒ์ ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋ชจ๋ ์ฌ๋์ด ์์์ผ ํฉ๋๋ค.
re: "๋ชจ๋ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์ค์ ๋ก ๋์ผํ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์ฒํ๋ ๊ฒ์ ์ ๋ณด๊ฐ ์๋ ์ง์ ์ ๋๋ค."
์์ ๋ฐฉ๋ฒ์ผ๋ก ํ์ง ์์ผ๋ฉด ์๋ชปํ๊ณ ์๋ ๊ฒ์ ๋๋ค.
์๋ฒฝํ๊ฒ ๊ณต์ ํ๊ธฐ ์ํด appendChild
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ฐ๋์งํ์ง ์์ต๋๋ค... :D
๊ทธ๋ฌ๋ ๋๋ ๊ทธ ํ ์คํธ ์ผ์ด์ค๋ฅผ AssetRace์ ์ถ๊ฐํ์ต๋๋ค.
https://github.com/SlexAxton/AssetRace/blob/master/asyncconcat.html
๊ทธ๊ฒ์ onload ๋ฐ์ฌ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ํ๋ฏ๋ก ์ฝ๊ฐ์ ์ธ์ง๋ ์ด์ ์ด _๊ฐ๋ฅ_ํฉ๋๋ค. ํ์ง๋ง ์ข ๋ฃ ์๊ฐ์ ๊ฑฐ์ ๋์ผํฉ๋๋ค ...
@ded : ์ฌ๊ธฐ์ <head>
๋ฌด๋ฅํ ๋๊ท๋ชจ ์ฐจ๋จ <script>
์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒ์ด ์๋๋๋ค ... ์ฐ๋ฆฌ๋ defer
๋๋ async
๊ฐ ์๋ ์คํฌ๋ฆฝํธ ํ๊ทธ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. <body>
๋์ ๋ก๋๋๋ฉฐ ์ฐจ๋จํ ํญ๋ชฉ์ด ์์ต๋๋ค.
@jaubourg--
๋ํ @getify ๋ชจ๋ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ์ค์ ๋ก ๋์ผํ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์ฒํ๋ ๊ฒ์ ์ ๋ณด๊ฐ ์๋ ์ง์ ์ ๋๋ค.
์ด๊ฒ์ ๋ด๊ฐ ์ป๊ณ ์ ํ๋ ๊ฒ์ ๋ํ ์์ ํ ์๋ชป๋ ํํ์ ๋๋ค. ์ฌ์ค, ๋๋ถ๋ถ์ ์คํฌ๋ฆฝํธ ๋ก๋๋ ์ต๊ณ ์ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์ธก๋ฉด์์ ๋ด๊ฐ ํด์ผ ํ๋ค๊ณ ์๊ฐํ๋(๊ทธ๋ฆฌ๊ณ LABjs๊ฐ ํ์ฌ ํ๊ณ ์๋) ์ผ์ ํ์ง ์์ต๋๋ค. ์ ์์ ์ ๊ทธ๋ค ๋ชจ๋๊ฐ ์ต๊ณ ์ ๊ธฐ์ ์ ์ฌ์ฉํ๋๋ผ๋ ๊ธฐ์ ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ์ผ์๋ ์ฌ์ ํ ์ ํํ ํ๊ณ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋๋ LABjs๊ฐ ์ธ์ํ์ง ๋ชปํ๊ฑฐ๋ ์ฌ์ฉํ์ง ์๋ ๋ง๋ฒ์ ์์ ์ด์์ ์ฌ์ฉํ๋ ๋ก๋๊ฐ ์๋ค๊ณ ํ์ ํฉ๋๋ค. ๋น์ ์ด ๋ฌด์์ ํ๋ , ์ด๋ป๊ฒ ์ซ์๋ฅผ ๋ง์ง์๊ฑฐ๋ฆฌ๋ , ๋น์ ๋น์ ์๋๋ณด๋ค ๋น ๋ฅด๊ฒ ๊ฐ ์๋ ์์ต๋๋ค.
์๋์ ์๋ ๊ธฐ์ ์ ๋ํด ๋ ผ์ํ๋ ๊ฒ("์ด๋ด, ๋ด ๋ฉ์ง๊ณ ๋ ๋์ API๋ฅผ ๋ด"๋ผ๊ณ ๋งํ๋ ๋ฐฉ์์ผ๋ก)์ ๋ฌด์๋ฏธํฉ๋๋ค. ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ ์ต๊ณ ์ ๊ธฐ์ ์ ์๋ ค์ง ์ ํ ์๋์ ๋๋ค(๋ง์ ๋ก๋๊ฐ ๋ฌด์ฑ ์ํ๊ณ ์ฌ์ฉํ์ง ์๋๋ผ๋). ์ฐ๋ฆฌ๋ ๋ ๋์ ๊ธฐ์ ์ ์ถ์งํ ์ ์์ง๋ง(์ ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค), ๋๊ฐ ๋ก๋์ ๋ ๋์ API๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ํ ๋ก ํ๋ ๊ฒ์ ๊ทธ ๋ชฉํ๋ฅผ ์ํด ์๋ฌด ์์ฉ์ด ์์ต๋๋ค.
์ด ์ค๋ ๋๋ ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ์์ฒด์ ์ผ๋ก ์ถฉ๋ถํ ์ข์์ง(์ง์ฐ ์ฌ๋ถ์ ๊ด๊ณ์์ด) ๋๋ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ๋ ๋์ ์ฑ๋ฅ์ ์ป๋ ๋ฐ ๋์์ด ๋๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ๊ฐ์ฅ ์ค์ํ ์ญํ ์ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ ๋ฒ์งธ๋ก, ์ฐ๋ฆฌ๋ concat์ด ์ค์ ๋ก ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ ๋ง๋ฅ์ธ์ง ์์๋ด์ผ ํฉ๋๋ค.
(์ด ์ค๋ ๋์ ๊ฒฝ์ฐ) ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ํ ์ ์๋ ๋ค๋ฅธ ๋ชจ๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ ๋ํ ๋ ผ์์ ์ฌ์ง๊ฐ ์์ต๋๋ค. (์จ๋๋งจ๋/์ง์ฐ ๋ก๋ฉ๊ณผ ๊ฐ์) ๋งํฌ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ ํ ์ ์์ต๋๋ค. ๋ค์ ๋งํ์ง๋ง, ๊ทธ๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ์์ ์์ ์ฃผ์ด์ง ๊ฒ์ด๋ฏ๋ก ๊ทธ ์ฌ์ค์ ๋ค์ ํ๋ฆฝํ๋ ค๋ ์๋๋ ๋ฌด์๋ฏธํฉ๋๋ค.
NO U
๋ก๋ ๋ ์ด์ง!
์ฌ๊ธฐ์์ ์๋ณธ ๊ฒ์๋ฌผ์ ๋ด ๋๋ค.
๋ํ, ๋งํ ํ๋์ค์ ๊ธฐ๋ถ์ด ์ํ ๋ชจ๋ ์ฌ๋/์ฌ๋: ์ธํฐ๋ท์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค! ์ฌ๊ธฐ์์ ์ฌํ ์
์ข์ต๋๋ค. ๋ช ๊ฐ์ง ์์ ์ ์ค๋ช ํ๊ธฐ ์ํด 3๊ฐ์ ํ ์คํธ๋ฅผ ๋ง๋ค์์ต๋๋ค. ๋จผ์ ์๋ ์คํฌ๋ฆฝํธ ํ๊ทธ(๊ธฐ์ค์ ์ผ๋ก):
http://labjs.com/dev/test_suite/test-script-tags.php
DOMContentLoaded(์ผ๋ช "DOM ์ค๋น")๋ ์คํฌ๋ฆฝํธ๊ฐ ์๋ฃ๋ ํ ๋ฆ๊ฒ ๋ํ๋ฉ๋๋ค. ์ด๊ฒ์ ๋์ ๊ฒ์ ๋๋ค. ํ์ด์ง์ ์ค์ ๋ก๋ ์๊ฐ์ ์ดํ ํ ์คํธ์ ๊ฐ์ ์ ์์ง๋ง DOM ์ค๋น๊ฐ ์ฐจ๋จ๋๋ฉด ํ์ด์ง์ ์ธ์ ๋ก๋ ์๊ฐ์ ํญ์ ํจ์ฌ ๋ ๋๋ ค์ง๋๋ค(๋ง์ ์ฌ์ดํธ์์ ํด๋ฆญ ๋์์ ์ฒจ๋ถํ๊ธฐ ์ํด DOM ์ค๋น๊ฐ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ฝํ ์ธ ์ JS ๊ธฐ๋ฐ ๊ฐ์ ์ฌํญ ์ ์ฉ ๋ฑ).
์ด์ ์คํฌ๋ฆฝํธ ํ๊ทธ์ defer
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
http://labjs.com/dev/test_suite/test-script-defer-tags.php
์ข์ต๋๋ค. DOMContentLoaded ์ง์ฐ ๋ฌธ์ ๋ฅผ ์์ ํ์ง๋ง ์ด์ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ ๋ธ๋ก์ defer
์๋ํ์ง ์์ต๋๋ค. ์ฆ์ ์คํ๋ฉ๋๋ค. ์ฃ์กํฉ๋๋ค. BTW, ์ด๊ฒ์ ๋ฒ๊ทธ๊ฐ ์๋๋ฉฐ ์ฌ์์ ๊ตฌ์ฒด์ ์ผ๋ก ๋ช
์๋์ด ์์ต๋๋ค.
http://labjs.com/dev/test_suite/test-LABjs.php
LABjs ํ
์คํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก defer
ํ
์คํธ์ ๋น๊ตํ์ฌ ๋์ผํ(๋๋ ๋ ๋์) ์ฑ๋ฅ ์์น๋ฅผ ์ป์ง๋ง ์คํฌ๋ฆฝํธ๊ฐ ์๋ฃ๋ ํ ์ธ๋ผ์ธ ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐ ์คํจํ์ง ์์ต๋๋ค.
์ต์ ๋ธ๋ผ์ฐ์ (Chrome 13, FF5 ๋ฑ)์์ ์ด๋ฌํ ํ
์คํธ๋ฅผ ์ฌ๋ฌ ๋ฒ ์๋ํ์ญ์์ค. ์ ์๊ฒ LABjs๋ ํญ์ defer
ํ
์คํธ์ ๊ฑฐ์ ๊ฐ๊ฑฐ๋ ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์์ต๋๋ค. ๋ด ๋ชจ๋ ์๋์์ LABjs๊ฐ defer
ํ
์คํธ๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ๊ฒ์ ๋ณธ ์ ์ด ์์ต๋๋ค. ์ด์ ๋ธ๋ผ์ฐ์ (์: FF3.5 ๋๋ IE7)์์ ํด๋น ํ
์คํธ๋ฅผ ์๋ํ๋ฉด ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ๋ค๋ฅธ ํ
์คํธ๋ณด๋ค ๋์ ๋๊ฒ ์ฑ๋ฅ์ด ํฅ์๋๊ธฐ ์์ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
LABjs ํ
์คํธ๋ ์ต์ ๋ธ๋ผ์ฐ์ ์ defer
ํ
์คํธ์ ์ ์ฌํ ์ซ์๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง defer
๋ฅผ defer
ALL ์ฝ๋์ ์ฌ์ฉํ ์ ์์ผ๋ฉด ๊ฑฐ๋ ์ฐจ๋จ๊ธฐ์
๋๋ค. ์ธ๋ถ ํ์ผ์ ํตํด ๋ก๋๋ ์ฝ๋์ ๊ฒฝ์ฐ). ๋ง์ ์ฌ์ดํธ๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ ๋ค์ ๋ฐฉ๊ธ ๋ก๋ํ ์ฝ๋๋ฅผ ํ์ฑํ/์ด๊ธฐํํ๋ ์ธ๋ผ์ธ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. defer
๋ ์ด์ ๋ํ ์๋ฃจ์
์ ์ ๊ณตํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ defer
๋ "์ผ๋ฐ ์คํฌ๋ฆฝํธ ๋ก๋ฉ" ๊ธฐ์ ๋ก ์ ํฉํ์ง ์์ต๋๋ค. ์ฐจ์ ์ฑ
์ ์คํฌ๋ฆฝํธ ๋ก๋์
๋๋ค.
@getify
๋ง์ดํฌ๋ก ์ต์ ํ๊ฐ ์ ๋ถ๋ ์๋๋๋ค... ์, API๋ ์ค์ํ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ณธ ๊ธฐ์ ์ด ๊ฐ์ง๊ณ ์๋ ์ ํ์ ์ข ๋ฅ๋ฅผ ์ ๋ํ๋ ๋๋ค. ์ฃผ๋ก ๋ง์ดํฌ๋ก(๋๋ ๋งคํฌ๋ก) ์ต์ ํ ๋๋ฌธ์ ๋๋ค. ํญ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ ๊ฒ๋ง ์ด ์ ๋ถ๋ ์๋๋๋ค. ๋ณต์กํ ์ข ์์ฑ ๊ด๋ฆฌ, ์ ์ ํ ์๋๋ฐ์ฑ ๋ฐ ์ค์ ์ ์ด๊ณ ์ค์ ์ ์ธ ๋ชจ๋์ฑ์ ๊ด์ฌ์ด ์๋ค๊ณ ํด์ ์ป์ด๋ผ ์ ์๋ ๊ฒ์ด ์๋๋๋ค. ๋ญ์ง ๋ง์ถฐ๋ด? ์ด๊ฒ์ ์ค์ ๋ก ์ฌ๋๋ค์ด ํ์๋ก ํ๋ ๊ฒ์ด๋ฉฐ ํ์ด์ง ๋ก๋ ์ฑ๋ฅ์ ์ ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋นํ ์ข์ ์์ค์์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ ์คํฌ๋ฆฝํธ ํ๊ทธ ์ฝ์ ์ด ์์ ์ ์ ํฉํ ๋๊ตฌ๊ฐ ์๋๋ผ๋ ๊ฒฐ๋ก ์ด ๋์ต๋๋ค. ์ค์ ๋ก๋ ๊ทธ๋ ์ง ์์์ต๋๋ค. ์์ฃผ ๋ชป์๊ธด ํดํน์ ๋๋ค. ๊ทธ๋ฐ ์๋ฏธ์์ ๋น์ ์ ์ค์ ๋ก ๋ ๋์ ๊ธฐ์ ์ ์๊ตฌํ๋ ์๋๋๋ค . ์ฐ๋ฆฌ ์ค ๋๊ตฌ๋ ์์ง ์ถ๋ก ํ ์ ์๋ ์๋ก์ด ์ข ๋ฅ์ ๊ฒฝ๊ณ ์ ํจ๊ป
์ ๋ง ํ๋๋ ๊ฒ์ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ ์ํ ์ ์ ํ ๋ค์ดํฐ๋ธ ์๋ฐ์คํฌ๋ฆฝํธ API๊ฐ ์๋ ์คํฌ๋ฆฝํธ ํ๊ทธ ์ฝ์ ์ ์ํด ๋จ์ผ ์ธ์๋ฅผ ๋ฐฐ์นํ๋ ๊ฒ์ ๊ฑฐ๋ถํ๋ค๋ ๊ฒ์ ๋๋ค. ๋น์ ์ ๋ชจ๋ ๊ฒ์ ๋ฌด์ํฉ๋๋ค. ํ์ง๋ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋๋ฆฌ๊ฒ ์ต๋๋ค. ๊ฑฐ๊ธฐ ์๋ ๋ ผ์์ ์ฌ์ง๊ฐ
๋ง์นจ๋ด ๋ด๊ฐ ์ง์ ์ธ ๋๋ต์ ํ ๋งํผ ์ถฉ๋ถํ ๊ฐ์น๊ฐ ์๋ค๊ณ ํ๋จ๋๋ฉด(๋ ๋ค๋ฅธ LabJS ๊ด๊ณ ์ ๋์กฐ์ ์ผ๋ก) ๋ด ๋ธ๋ก๊ทธ์์ ๊ทธ๋ ๊ฒ ํ๊ณ ์ด ์ค๋ ๋๋ ๊ทธ๋๋ก ๋๋๋ก ํฉ์๋ค. ๊ฐ์ฌํฉ๋๋ค.
@jaubourg --
์ง๋ ๋ฐค์ ๊ทํ์ ๊ฒ์๋ฌผ์ ์์ธํ ์ฝ์์ต๋๋ค. ๋๋ ๋น์ ์ด ๊ฑฐ๊ธฐ์์ ์ ์ํ ์ข์ ์๊ฐ์ ๋ํด ๋์ฒด๋ก ๋น์ ์ ์นญ์ฐฌํ๊ณ ์นญ์ฐฌํ๋ ์๋ต์ผ๋ก ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์์ฑํ ๊ณํ์ด์์ต๋๋ค. ๋ถํํ๋, ๋น์ ์ด ์ ์ํ๋ ๊ฒ์ ์ด๋ฏธ W3C ๋ฐ WHATWG์ ๋ํ ํ ๋ก ์ค๋ ๋์ ๊ตฌ์ฑ์์ ์ํด AT LENGTH๋ก ํด์๋์์ต๋๋ค. ๋น์ ์ ๊ทธ ํํฐ์ ๊ฝค ๋ฆ์์ด์.
์์ ํ ์๋ก์ด ๋ก๋ API๋ฅผ ์ง์ํ๋ ์ฌ๋๋ค์ด ๋ช ๋ช ์์๊ณ ์ ๊ทธ๊ฒ์ด ์ต์ ์ ๋ฐฉ๋ฒ์ด ์๋ ์ ์๋์ง์ ๋ํ ๋ช ๊ฐ์ง ์ค์ํ ๋ฐ๋ก ์ด ์์์ต๋๋ค. ๋ค์ ๋งํ์ง๋ง, ๋๋ ๊ทธ ๋ชจ๋ ๊ฒ์ ์ค๋ช ํ๋ ๋ฐ ๋์์ด ๋๋๋ก ์ ์คํ๊ณ ํฉ๋ฆฌ์ ์ธ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ๋ต๋ณ์ ์์ฑํ ๊ณํ์ด์์ต๋๋ค.
์ ๊ฐ์ค๋ฝ๊ฒ๋ ๋น์ ์ ์ฌ๊ธฐ์ ๊ฐ์ ๊ทธ๋ฐ ๋์ด ๋์ด์ผ ํฉ๋๋ค. ์ด์ ๊ทธ ํฉ๋ฆฌ์ ์ธ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ด ์๊ฐ ๋ญ๋น๊ฐ ๋ ๊ฒ ๊ฐ์ ๋๋์ด ๋ญ๋๋ค. ๋น์ ์ ๋ถ๋ช ํ ๋ด๊ฐ ๋ฐ๋ณด๋ผ๊ณ ์๊ฐํ๊ณ ๋น์ ์ด ์ ๊ธฐํ๋ ค๋ ๊ฒ๋ค์ ๊ณ ๋ คํ ์ ์ด ์์ต๋๋ค. ์คํฌ๋ฆฝํธ ๋ก๋ ๊ธฐ์ ๊ณผ ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์ฌ์ ๋ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋์ ์ผ๋ก ์ง์ฐฉํ๋ ์๋ ์ ๋ ์ข์ ๋ถ๋ถ์ ๋ณด๋ด์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋, ๋ ๋ฐ๋ณด์ผ ๋๋ ๋ถ๋ช ํ ์ด์ ์ ์คํฌ๋ฆฝํธ ํ๊ทธ ์ด์ธ์ ๋ค๋ฅธ ๊ฒ์ ๋ํด ์๊ฐํ ์ ์ด ์์ต๋๋ค.
๋น์ ์ ๋ถ๋ช
ํ ๋ด๊ฐ _this_ ์ค๋ ๋๊ฐ Paul Irish์ Alex Sexton์ด ์ ๊ธฐํ ํน์ ์ง๋ฌธ์ ์ด์ ์ ๋ง์ถ๋ ๋ ๋์ ๋ชฉํ๊ฐ ์๋ค๊ณ ๋งํ 15๋ฒ์ ๋ฃ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. defer
์ถฉ๋ถํ ์ข์๊ฐ์? ์คํฌ๋ฆฝํธ ์ฐ๊ฒฐ์ด ๋ณ๋ ฌ ๋ก๋ฉ๋ณด๋ค ๋ซ์ต๋๊น?
๋ ์ค์ํ ์ง๋ฌธ๋ค์ ๋๋ค.
๊ธฐ๋ณธ "๋ก๋" ๊ธฐ์ ์ด ์ฌ์ฉ๋๋ ๊ฒ์ด ์๋๋๋ค. ๊ธฐ๋ณธ ๋ก๋ ๊ธฐ์ ์ด ๋ฌด์์ธ์ง ๋ ผ์ํ๊ธฐ ์ํ ๋ค๋ฅธ ๋ ๋์ ํฌ๋ผ์ด ์์ต๋๋ค. ์ดํดํฉ๋๋ค. ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ๋ง์์ ๋ค์ง ์์ต๋๋ค. ๊ด์ฐฎ์. Ian๊ณผ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋น์ ์ ๋ง์ ๋ฃ๋๋ก ํ๊ธฐ ์ํด W3C/WHATWG ๋ชฉ๋ก์์ ์์ญ ์๊ฐ์ ๋ณด๋ด์ญ์์ค. ๊ทธ๋ค์ ์๋ง ๋ชจ๋ ํํ์ ํ๊ณ "์ด๋ฏธ ํด๋ช ํ์ผ๋ ๊ฐ์ธ์."๋ผ๊ณ ๋งํ ๊ฒ์ ๋๋ค.
@getify : ์ด๋ฆฌ์์ ์คํธ๋ก์ฐ๋งจ ํ ์คํธ๋ฅผ ๋ง๋๋ ๊ฒ์ ์ ์๋ฅผ ์ป์ง ๋ชปํ ๊ฒ์ ๋๋ค. ์์ฐจ ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ํ์ด์ง๋ฅผ ์ฐจ๋จํ๋ค๋ ๊ฒ์ ๋ชจ๋ ์๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ "์ง์ฐ๋" ์คํฌ๋ฆฝํธ ์ ์ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ ๋ธ๋ก์ ์คํํ๋ ๊ฒ์ด ์ค์ ์ฌ์ดํธ์์ ์ด๋ค ์์ผ๋ก๋ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
์ฌ์ ์คํด๋ฅผ ํ์ธํ๊ธฐ ์ํด ํ ์คํธํ๋ ๊ฒฝ์ฐ ... ํ ์คํธ๋ ํญ์ ๊ทธ ์คํด๋ฅผ ํ์ธํฉ๋๋ค. 20๊ฐ์ ์คํฌ๋ฆฝํธ ํ๊ทธ ๋ 20๊ฐ์ LABjs ์คํฌ๋ฆฝํธ ๋ก๋์ ๋ํ ๋ ผ์์ ์์์ต๋๋ค. ๊ฐ๋ฅํ ํ ์ ์ ์์ HTTP ์์ฒญ์ผ๋ก JavaScript๋ฅผ ์ง๋ฅ์ ์ผ๋ก ํธ๋ฆฌ๋ฐ, ์ฐ๊ฒฐ, ์ถ์, gzipping ๋ฐ ๋ก๋ํ ๋ค์ ์บ์ฑํ๋ ๊ฒ์ ๋๋ค.
ํํธ์ผ๋ก ์ฐ๋ฆฌ๋ ์ค์ ํ์ด์ง์์ ํจ์ฌ ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ด๋ ์ ๋ขฐํ ์ ์๋ ๋ธ๋ผ์ฐ์ ์ง์, ์ค๋ ์๊ฐ ํ ์คํธ๋ฅผ ๊ฑฐ์น ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ค๋ฅธ ํํธ์ผ๋ก๋ ๊ณผ๊ฑฐ์ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํธ ํ ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ์ดํธ๋ฅผ ์ค์ ๋ก ๋ง๊ฐ๋จ๋ ธ๋ ํจ๊ป ํดํน๋ "๊ธฐ์ "์ด ์์ต๋๋ค. ์ด ๊ธฐ์ ์ ํ๊ท ์ ์ผ๋ก ํจ์ฌ ๋ ๋์ ์ฑ๋ฅ์ ๋ด๊ณ ํจ์ฌ ๋ ํฐ ์๋ ์ฐจ์ด๋ฅผ ๋ณด์ ๋๋ค.
๋น์ฐํ ์ ํ์ ๋๋ค.
@jashkenas--
์ฐ๋ฆฌ๋ ๋ํ "์ง์ฐ๋" ์คํฌ๋ฆฝํธ ์ ์ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ ๋ธ๋ก์ ์คํํ๋ ๊ฒ์ด ์ค์ ์ฌ์ดํธ์์ ์ด๋ค ์์ผ๋ก๋ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
์ด... ์ธํฐ๋ท์ ์๋ ๋ชจ๋ ์ฌ์ดํธ์ ์ฝ 98%์์ ์์ค ๋ณด๊ธฐ๋ฅผ ์ํํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ์ฌ์ดํธ๋ ์ค์ ๋ก ๋งํฌ์ ์์ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ ๋ธ๋ก์ ์ฌ์ฉํ์ฌ ์ด์ (์ฐจ๋จ)์์ ๋ก๋ํ ์ฝ๋๋ฅผ ์คํ/์ด๊ธฐํํฉ๋๋ค. ์คํฌ๋ฆฝํธ ํ๊ทธ ํธ์ถ.
@paulirish๊ฐ ์ ์ํ๋ ๊ฒฝ์ฐ defer
์ถฉ๋ถํ์ด๋ฉฐ ํด๋น ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ํ์ํ์ง ์์ต๋๋ค ๋๋ ๊ทธ๊ฒ์ด ์ฌ์ค, ์ด์ ๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค ๊ธฐ๋ถ์ด defer
์ถฉ๋ถ์ด ์๋๋๋ค.
๋น์ ์ ๋น์ ์ด ์ ์ดํ๋ โโ๋ช ๊ฐ์ง ํ์ ์ฌ์ดํธ์๋ง ๊ด์ฌ์ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด ์ฌ์ดํธ๋ ๋น๋ ํ๋ก์ธ์ค ๋ฑ์ ๋ํด ๊ณ ๋๋ก ์ต์ ํํ ์ ์๋ ์์ ํ ๋ฅ๋ ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ฐ๋ฉด์ ์ ๋ ์ธํฐ๋ท์ ๋กฑํ
์ผ ์ฌ์ดํธ์์ ์ฑ๋ฅ ํฅ์์ ๋๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค. 6๊ฐ์ ์คํฌ๋ฆฝํธ ํ๊ทธ(์ผ๋ถ๋ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ ๋ธ๋ก!)๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ฌ๊ธฐ์ 6๊ฐ์ $LAB.script()
ํธ์ถ์ ์ฌ์ฉํ๋ฉด ์ค์ ๋ก ์ฑ๋ฅ์ด ํฅ์๋ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ด LABjs๊ฐ ํญ์ ์ถ๊ตฌํ๋ ๊ฒ์
๋๋ค. ๊ด์ฌ์ด ์๋ค๊ณ ํด์ ๊ด๋ จ์ด ์๋ ๊ฒ์ ์๋๋๋ค.
20๊ฐ์ ์คํฌ๋ฆฝํธ ํ๊ทธ ๋ 20๊ฐ์ LABjs ์คํฌ๋ฆฝํธ ๋ก๋์ ๋ํ ๋ ผ์์ ์์์ต๋๋ค.
์ด ์ค๋ ๋์ ๋
ผ์์ 3-4๊ฐ์ ์คํฌ๋ฆฝํธ ํ๊ทธ( defer
๋๋ ํฌํจํ์ง ์์)๊ฐ ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก ๋ก๋๋ 3-4๊ฐ์ ์คํฌ๋ฆฝํธ๋ณด๋ค ์ฑ๋ฅ์ด ๋ ๋์๊ฑฐ๋ ๊ฐ๊ฑฐ๋ ๋ ๋์์ง์ ๋ํ ๊ฒ์
๋๋ค. ๋ด "์ด๋ฆฌ์์ ์คํธ๋ก์ฐ๋งจ ํ
์คํธ"๋ ์ฌ์ค ์ ํํ ๊ทธ๊ฒ์ ํ
์คํธํ๊ธฐ ์ํ ๊ฒ์
๋๋ค.
๋ด ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ์คํฌ๋ฆฝํธ ๋ก๋๋ ํ์ด์ง ๋ก๋ ์๊ฐ์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ๋จ์ถํฉ๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ ๋ชจ๋๋ ์ฌ๊ธฐ์ ์์ ์ ๋์น๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. JavaScript์๋ ๋ช ๊ฐ์ง ๋ ํฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ข์ ๋ถ์์ฉ์ด๊ธด ํ์ง๋ง ๋ก๋ ์๋๊ฐ ๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ RequireJS๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. NodeJS์์ ํ๋ ๊ฒ์ฒ๋ผ JS ์ฑ์ ์์ ๋ชจ๋๋ก ๊ตฌ์ฑํ ์ ์๋๋ก ์ฌ์ฉํฉ๋๋ค. ๊ฐ ๋ชจ๋์ ์ข ์์ฑ์ ๋ช ํํ๊ฒ ๋์ดํ๊ณ ์๋๋ฐ์ค ํจํด์ ์ฌ์ฉํ์ฌ ์ ์ญ ๋ค์์คํ์ด์ค๋ฅผ ๊นจ๋ํ๊ฒ ์ ์งํฉ๋๋ค. ๋ชจ๋(๋ฐ ํด๋น ์ข ์์ฑ)์ ๋ฏธ๋ฆฌ ๋ก๋ํ๊ฑฐ๋ ์์ฒญ ์(์: ์ฌ์ฉ์ ํด๋ฆญ ์) ๋ก๋ํ๊ฑฐ๋ ์ง์ฐ ๋ก๋ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ์ค์ ๋ก ๋ฏธ์ธ ์กฐ์ ํ ์ ์์ต๋๋ค. ๋ํ RequireJS๋ ๋ฐฐํฌ๋ฅผ ์ํด ๋ชจ๋ ์ข ์์ฑ์ ๋จ์ผ(๋๋ ์์์) gzip ์ค๋น ํ์ผ๋ก ๊ฒฐํฉํ๊ณ ์ถ์ํ๋ ๋น๋ ๋๊ตฌ์ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. ์ด ์ธ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ์ ์๊ฒ ํฐ ์น๋ฆฌ์ ๋๋ค.
์ฌ๋๋ค์ด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ๋ ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํด ํ ๋ก ํ๋ ์ด์ ๋ฅผ ์ ์ ์์ต๋๋ค. ์ฑ๋ฅ์ด ์ ์ผํ ์์ ์ด๊ณ ๋ ผ์์ ์ฌ์ง๊ฐ ์๋ค๋ฉด ํ์คํฉ๋๋ค. ๊ทธ๋ฌ๋ RequireJS์ ๊ฐ์ AMD ๋ชจ๋ ๋ก๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ผ์์ด ๋ฌด์๋ฏธํด์ง๋๋ค. ๋ชจ๋์ JavaScript์ ๋ฏธ๋์ ๋๋ค. Mozilla์ Dave Herman์ Apple ๋ฐ Google์ ์ด์ฌํ ๊ตฌ์ฑ์๊ณผ ํ๋ ฅ ํ์ฌ ์ธ์ด ์์ฒด์ ๊ธฐ๋ณธ ๋ชจ๋์ ์ถ๊ฐ
@getify
์ฌ๋๋ค์ด ๋น์ ์ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๋ค๋ฅด๊ฒ ๋ํ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ ์๋ ์์ต๋๋ค. ํ์ํ๋ ๊ฒ์ ์ ์ ํ ๋ฐ์์ ์ป๋ ์๋ฆฌํ ๋ฐฉ๋ฒ์ด ์๋๋ฉฐ(๊ทธ๋ฆฌ๊ณ ์ ์ด ๋น์ ์ ํ์ํ๊ณ ์์ต๋๋ค) ์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ ๋งํ๋ฏ์ด ๋น์ ์ด ๋ฐ๋ณด๊ฐ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ค๋ง ๋น์ ์ด ์ง์ฐฉํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋น์ ์์ btw) ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋น์ ์ ํ๋จ์ ์ฌ๊ฐํ๊ฒ ์์์ํต๋๋ค. ๋ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ ๋งํ๋ฏ์ด ์ด ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ W3C๋ WHATWG๊ฐ ์๋๋ผ EcmaScript ์์ฒด์ ๋๋ค. ์ด๊ฒ์ ๋ธ๋ผ์ฐ์ ๋ฌธ์ ๊ฐ ์๋๋ผ ์ธ์ด ๋ฌธ์ ์ ๋๋ค. ์ด์ , ์ํ์ง ์์ผ๋ฉด ์ด ๋๋ต์ ํ์ง ๋ง์ญ์์ค. ๊ทธ๊ฒ์ ๋น์ ์ ํน๊ถ์ ๋๋ค.
๋ด๊ฐ ๊ฐํนํ๊ฒ ์์ ์๋ ์์ง๋ง ๋๋ ๋จ์ง ๋ด๊ฐ ๋ฏฟ๋ ๊ฒ์ ์นํธํฉ๋๋ค.
์ด ์ค๋ ๋์์ ๊ตฌ๋ ์ ์ทจ์ํ๊ณ ๋ โโ์ด์ ๋๊ธ์ ๋ฌ๊ฒ ์ต๋๋ค. @paulirish ์ @SlexAxton์ด ํ์ ํด์ ์ฃ์กํฉ๋๋ค.
@getify
๋น์ ์ ๋น์ ์ด ํต์ ํ๋ ์์์ ํ์ ์ฌ์ดํธ์๋ง ๊ด์ฌ์ ๊ฐ์ง ์ ์์ต๋๋ค.
๋น๋ ํ๋ก์ธ์ค ๋ฑ์ ๋ํด ๊ณ ๋๋ก ์ต์ ํํ ์ ์๋ ์์ ํ ๋ฅ๋ ฅ
๋ค๋ฅธ ํํธ์ผ๋ก๋ ๋กฑํ ์ผ ์ฌ์ดํธ์ ์ฑ๋ฅ ํฅ์์ ๋๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
์ธํฐ๋ท, 6๊ฐ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ์๋ ํ๊ทธ(์ผ๋ถ๋ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ
๋ธ๋ก!), ์ฌ๊ธฐ์ 6๊ฐ์ $LAB.script() ํธ์ถ์ ์ฌ์ฉํ๋ฉด ์ค์ ๋ก
์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. ๊ทธ๊ฒ์ด LABjs๊ฐ ํญ์ ์ถ๊ตฌํ๋ ๊ฒ์ ๋๋ค. ์ผ๋๊น
๋น์ ์ด ์ ๊ฒฝ์ฐ๋ ๊ฒ์ด ์ค์ํ์ง ์๋ค๋ ๊ฒ์ ๊ทธ๊ฒ์ด ๊ด๋ จ์ด ์๋ค๋ ๊ฒ์ ์๋ฏธํ์ง ์์ต๋๋ค.
LABjs๊ฐ ํ๋ฒํ ์ฌ์ดํธ๊ฐ ๋ก๋ ๋ถ๋๋ฅ ์ ์ฝ๊ฐ ๋ฎ์ถ๋๋ก ๋๋ ๊ฒ์ด๋ผ๋ฉด ... ๊ทธ๊ฒ์ ๊ณ ๊ทํ ๋ชฉํ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ฆฌ๊ฒ ๋ก๋๋๋ ์น์ฌ์ดํธ๋ฅผ ์ง์งํ๊ฒ ์๊ฐํ๊ณ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ๋ก๋ํ๋๋ก ํ๋ ๊ฒฝ์ฐ(LABjs๊ฐ ํ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ฌธ์ ๊ทธ๋๋ก ๋ช ์ด ๋ ๋น ๋ฅผ ์ ์์) ์ด๋ฆฐ ๋ง์์ ์ ์งํ๊ณ ๋ ์ฝ๊ณ ๋ ์ทจ์ฝํ๋ค๋ ๊ฒ์ ์ธ์ ํด์ผ ํฉ๋๋ค. ๊ธฐ์ ๋ ๋ ํจ์จ์ ์ ๋๋ค.
์ด ์ค๋ ๋์ ๋ ผ์์ 3-4๊ฐ์ ์คํฌ๋ฆฝํธ ํ๊ทธ(์ง์ฐ ์ฌ๋ถ)์ ๊ดํ ๊ฒ์ ๋๋ค.
๋ค์์ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก ๋ก๋๋ 3-4๊ฐ์ ์คํฌ๋ฆฝํธ๋ณด๋ค ๋ ๋์๊ฑฐ๋ ๋์ผํ๊ฑฐ๋ ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ ๋๋ค.
๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋. ๋์ "์ด๋ฆฌ์์ ์คํธ๋ก์ฐ๋งจ ํ ์คํธ"๋ ์ฌ์ค
์ ํํ ๊ทธ๊ฒ์ ํ ์คํธํ์ญ์์ค.
์ด ์ค๋ ๋์ ๋ ผ์์ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ JavaScript๋ฅผ ๋ก๋ํ๊ณ ์คํํ๊ธฐ ์ํด ์น ์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฒ์ ๋๋ค. ๊ณ ๊ฐ์๊ฒ ๋ฑ ๊ธฐ๋ฆ์ ํ๋งคํ๊ณ ์น ๊ฐ๋ฐ์์๊ฒ ํ๋ณดํ๋ ๊ฒ์ ๋ ์ฌ๋ ๋ชจ๋์๊ฒ ํด๊ฐ ๋ฉ๋๋ค.
์ธํฐ๋ท์ ๋๊ธฐ ์๊ฐ์ด ์์ต๋๋ค. JS๋ฅผ ์ฐ๊ฒฐ, ์ถ์ ๋ฐ ์์ถํ๊ณ ๊ฐ๋ฅํ ํ ์ ์ ์์ HTTP ์์ฒญ์ผ๋ก ํ์ด์ง ํ๋จ์ ๋ก๋ํฉ๋๋ค. ๊ทธ๋ฐ๊ฐ ๋งํ๋ค.
@jashkenas--
LABjs๊ฐ ํ๋ฒํ ์ฌ์ดํธ๊ฐ ๋ก๋ ๋ถ๋์ ์ฝ๊ฐ ๋ ์ ์๋๋ก ๋๋ ๊ฒ์ด๋ผ๋ฉด ... ๊ทธ๊ฒ์ด ๊ณ ๊ทํ ๋ชฉํ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ง๋ 2๋
๋์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ $LAB.script()
ํธ์ถ๋ก ๋ฐ๊พธ๋ ๊ฒ ์ธ์๋ ์๋ฌด๊ฒ๋ ํ์ง ์์ ์๋ฐฑ ๊ฐ์ ์ฌ์ดํธ๊ฐ ์์ผ๋ฉฐ ์ ๋ฐ์ ์ผ๋ก ๋ชจ๋ ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์์ต๋๋ค(์ผ๋ถ๋ ํฌ๊ฒ, ์ผ๋ถ๋ ์ฝ๊ฐ๋ง).
๋ค์ํ ์ฐ์ (์: ์ ์ ์๊ฑฐ๋, ๋ถ๋์ฐ ๋ฑ)์ ์ฌ์ดํธ๊ฐ ๋ ๋์ ์ฑ๋ฅ์ ์ป๋๋ก ๋๋ ๋ฐ ์ด์ ์ ๋ง์ถ(์์ ํ ๋ ๋ฆฝ์ ์ด๊ณ ๋์ ๊ด๋ จ๋์ง ์์) ์์ฑ๋ ๊ธฐ์ฌ๊ฐ ์์ต๋๋ค. ๊ทธ๋ค์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ $LAB ํธ์ถ๋ก ๋์ฒดํ๊ณ ํด๋น ๋๊ธ ์ค๋ ๋์ ๋ง์ ์ฌ๋๋ค์ด ๋์์ด ๋์๋ค๊ณ ๊ธ์ ์ ์ผ๋ก ์๋ตํ์ต๋๋ค.
๊ธฐ์ฌ์์ "์ข์์, ๋ ๋ง์ ์ฑ๋ฅ์ ์ป์ผ๋ ค๋ฉด gzip์ ์ดํดํ๊ณ ruby โโ๋๋ node.js๋ฅผ ์ค์นํ ์ ์๋ ์๋ฒ ๊ด๋ฆฌ์๋ฅผ ๊ณ ์ฉํ์ฌ ์๋ํ๋ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์ํํ ์ ์์ต๋๋ค......."๋ผ๊ณ ๋งํ์ต๋๋ค. ๊ทธ ๊ธฐ์ฌ๋ฅผ ์ฝ๋ ๊ฒ์ ๊ทธ๊ฒ์ ๋ํด ๋ค๋ฅธ ์๊ฐ์ ํ์ง ์๊ณ ๊ทธ๋ฅ ์ง๋์ณค์ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ ๋ "์ด๋ด, <script>๋ฅผ script()๋ก ๋์ฒด"๊ฐ ๊ทธ๋ค์ด ์ดํดํ๊ณ ๊ณต๊ฐํ ์ ์๋ ๋งค์ฐ ์ฌ์ด ๋ฉ์์ง๋ผ๊ณ ๋ฏฟ๊ณ ์ถ์ต๋๋ค.
LABjs์ ๋ํด ๋ด๊ฐ ์ํ๋ ๊ฒ์ ๋๋ฌด ๋ง์ ์๊ฐ ์์ด ๋๊ตฐ๊ฐ๊ฐ ์ฝ๊ฒ ๋ฐฉ๋ฌธํ์ฌ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ๊ต์ฒดํ ์ ์๋ ๊ฐ๋จํ ์๋ฃจ์ ์ ๋๋ค. ์ฌ์ดํธ์ ๊ฐ์ธ์ ์ผ๋ก ์๋ดํ๊ณ ์ต์์ ์ต์ ํ๋ฅผ ์ฐพ์ ์ ์๋ค๋ฉด ๋ง์ ์ฌ์ดํธ์์ ํจ์ฌ ๋ ๋ง์ ์ฑ๋ฅ์ ๋์ด๋ผ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๋ํ ์ด๊ฒ์ด ์ธํฐ๋ท์ ๊ธด ๊ผฌ๋ฆฌ๋ฅผ ์ํด ํ ์ ์๋ ํ ์ฌ๋์ ๋ฅ๋ ฅ์ ํจ์ฌ ๋ฐ์ด ๋๋๋ค๋ ๊ฒ์ ์ธ์ํ๊ณ ์ ์ฌํ๊ฒ ๋ชจ๋ ์๋ง&ํ ์ฌ์ดํธ์ "์ด๋ด, ์๋ ๋น๋ ์์คํ ์ ๊ฐ์ ธ์์ gzip์ ์ฌ์ฉํ๋์ง ํ์ธํ์ญ์์ค"๋ผ๊ณ ๋งํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๊ทธ๋ค์๊ฒ ๋ฏ์ ์ธ์ด๋ฅผ ๋งํ๋ ๊ฒ. OTOH, "์ด๋ด, ์ 3๊ฐ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ๊ฐ์ ธ์์ 3๊ฐ์ script() ํธ์ถ์ ๋ง๋์ธ์. ์ผ๋ง๋ ์ฌ์ ๋์?"๋ผ๊ณ ๋งํ๋ ๊ฒ์ ๊ฝค ์ฑ๊ณต์ ์ด์์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, LABjs์ ๋ํ ๋์ ์ ๊ทผ ๋ฐฉ์์ ๋ฎ์ ์ฑ๊ณผ๋ฅผ ๋ด๋ ๊ฒ์ด์์ต๋๋ค.
๊ทธ ์ด๋ ๊ฒ๋ ์ต์ ํ์ ๋ํ ๋ณด๋ค ์ ๊ตํ ์ ๊ทผ ๋ฐฉ์์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์์ํ๋ ๊ฒ์ ์๋๋๋ค. ๊ทธ๊ฒ๋ค์ ๋ถ๋ช ํ ๊ฐ๋ฅํ๋ฉฐ, ์ ๊ฐ ์๋ดํ ๊ธฐํ๊ฐ ์์ ๋, ์ ๋ ํ์คํ ๊ทธ๊ฒ๋ค์ ํ๊ตฌํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ง์ ์น์์ ๊ทธ๋ค์ด ๊ธฐ๊บผ์ด ๋๋ ์ป์ ์ ์๋ ๊ฒ๋ณด๋ค ๋ ๋ณต์กํ๊ฑฐ๋ ๋ณต์กํ๋ค๋ ๊ฒ์ ๋งํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ ๋จ์ง _๊ทธ_ ์ฌ์ดํธ๊ฐ ์ดํดํ๊ธฐ ์ฌ์ด ๋ฐฉ์์ผ๋ก ๊ฐ์ ๋๋๋ก ๋์ฐ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
@jashkenas--
์ ์ฌ์ ์ผ๋ก ๋ง ๊ทธ๋๋ก LABjs๊ฐ ํ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ช ์ด ๋ ๋น ๋ฆ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด๋ฆฐ ๋ง์์ ์ ์งํ๊ณ ๋ ์ฝ๊ณ ๋ ๊นจ์ง๊ธฐ ์ฌ์ด ๊ธฐ์ ๋ ๋ ์ฑ๋ฅ์ด ์ข๋ค๋ ๊ฒ์ ์ธ์ ํด์ผ ํฉ๋๋ค.
LABjs๊ฐ ์ฌ์ดํธ ์๋๋ฅผ ํฌ๊ฒ ๋ฆ์ถ๊ณ ์๋ค๋ ํ์คํ ์ฆ๊ฑฐ๋ ์์ต๋๋ค. ๋ง์ ์ฌ์ดํธ์ ๋์์ด ๋๋ค๋ ํ๊ณ ํ ์ฆ๊ฑฐ๊ฐ ๋ง์ด ์์ต๋๋ค. ๊ทธ๋์ ๋๋ ์ด๊ฒ์ ์ฌ์ง ์์ต๋๋ค. ๋น์ ์ด ๋งํ๋ ๊ฒ์ ์ฆ๊ฑฐ๊ฐ ์๋ ์ฌ์ค์ ๊ฐ์ ํ๋ ์๋ชป๋ ์ ์ ์ ๋๋ค.
@paulirish ๋ defer
์์ฑ์ ๋ฌธ์ ๋ฅผ ์ง์ ํ๋ ๊ฒ์๋ฌผ์ ์ฐพ์์ต๋๋ค.
http://hacks.mozilla.org/2009/06/defer/
@jashkenas๊ฐ ๋งํ๋ฏ์ด ๋ชจ๋ฐ์ผ ์ฑ๋ฅ ๊ด์ ์์ ๋ณผ ๋ 3g ๋คํธ์ํฌ ์ฐ๊ฒฐ๋ก ์ธํด ๋ฐ์ํ๋ ๋๊ธฐ ์๊ฐ์ผ๋ก ์ธํด ์ฌ๋ฌ http ์์ฒญ์ด ์๋ ๊ฒ๋ณด๋ค ๋ผ์ธ์ ํตํด ํ๋์ ํจํค์ง๋ก ์ฐ๊ฒฐ, gzip ๋ฐ ์ ์กํ๋ ๊ฒ์ด ํญ์ ๊ฐ์ฅ ์ข์ต๋๋ค.
์ด๋ฏธ์ง๋ฅผ base64๋ก ๋ฌธ์์ด๋ก ์ธ์ฝ๋ฉํ ๋ค์ http ์์ฒญ์ ์ค์ด๊ณ '์บ์ฑ'์ ํ์ฉํ๊ธฐ ์ํด localStorage์ ํค:๊ฐ ์์ผ๋ก ์ ์ฅํ๋ ์ธ๋ผ์ธ ๊ธฐ์ ์ ํ์ฉํ๋ ๋ฐ ๋ง์ ์ฐ๊ตฌ๊ฐ ์งํ๋๊ณ ์์ต๋๋ค. http://channel9.msdn.com/Events /MIX/MIX11/RES04 ๋ Microsoft Research์ James Mickens์ ํ๋ฅญํ ํ๋ ์ ํ ์ด์ ์ ๋๋ค.
http://davidbcalhoun.com/present/mobile-performance/ http ์์ฒญ์ด ์๋ ๋ชจ๋ฐ์ผ ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ฏธ์น๋ ์ํฅ์ ๋ํ ์ข์ ์๋ฃ์ ๋๋ค.
์ ๋ RequireJS ์์ ์ผํ๊ณ ์์ผ๋ฉฐ
1) JS๊ฐ ์คํ๋๋ ๋ชจ๋ ๊ณณ์์ ์ ์๋ํ๋ JS์ ๋ชจ๋์ ์ฝ๋์ ๋ํ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
2) ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํฉ๋๋ค.
"์คํฌ๋ฆฝํธ ๋ก๋" ๋ถ๋ถ์ ์ฒซ ๋ฒ์งธ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ํ์ํ ๋ถ๋ถ์ ๋๋ค. dev์์๋ ๋๋ฒ๊น ์ ๋ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ ์ค ๋ฒํธ๊ฐ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋๋ค. ๋ํ ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ์ฌ์ฉํ๋ฉด JS API๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ ์ ์ฝ๋๋ฅผ ์ฝ๊ฒ ๋ก๋ํ ์ ์์ต๋๋ค. ์น๋ฉ์ผ ํฌ๊ธฐ ์ฑ์ ๊ฒฝ์ฐ ์ด๊ฒ์ ์ฑ๋ฅ ์คํ ๋ฆฌ์ ํ์ ๋ถ๋ถ์ ๋๋ค. ๊ทธ๋ฌ๋ ์คํฌ๋ฆฝํธ๋ฅผ ํ๋ ๋๋ ์ ์ ์์ ์์ฒญ์ผ๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ผ๋ก ์ต์์ ๋ฐฐํฌ ์ต์ ์ ๋๋ค.
๊ทธ๋ฌ๋ requirejs์ ๋ชฉํ๋ ์ ์ญ์ ์ต์ ํ๊ณ ๋ช ์์ ์ข ์์ฑ์ ์ฅ๋ คํ๋ ๋ฐฉ์์ผ๋ก ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๊ณต์ ํ ์ ์๋ ๋ชจ๋์ ์ฝ๋ ๋จ์๋ฅผ ๋ง๋ค๊ณ ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ shim/polyfill/๋ฌด์์ด๋ ๋๋ ๊ฒ์ ๋๋ค.
JS์ ๋ชจ๋ ํ์์ ๋ํ ๋ ผ์๋ฅผ ์๋ฆฌ๋ ๋ฐ ๋์์ด ๋๋ ๊ฒ์ ๋ชฉํ๋ก ๋ชจ๋์ ์คํฌ๋ฆฝํธ ๋ก๋( ์ค์ ํ ์คํธ ํฌํจ)๋ฅผ ๋ง๋๋ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ํจ๊ป ์์ ํ AMD API ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ค์ ๊ตฌํ์ ํ๊ณ API์ ๋ํด ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ํฉ์์ ๋๋ฌํจ์ผ๋ก์จ ์งํ๋๋ ๋ฐฉ์์ ๋๋ค.
ํนํ JS์ ๋คํธ์ํฌ ํน์ฑ๊ณผ โโ์น ๋ฌธ์/์์ฉ ํ๋ก๊ทธ๋จ๊ณผ์ ๊ด๊ณ๋ฅผ ๊ณ ๋ คํ ๋ ๋ก๋ ํ๋ฌ๊ทธ์ธ API ๋ ES Harmony ๋ชจ๋๊ณผ ํจ๊ป ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์ง์๋์ด์ผ ํ๋ ๊ฒ์ด๋ฉฐ , requirejs ๋ก๋ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉ ํ์ฌ ํ๋ชจ๋ ์ ์์ ๋ ์ ์ดํดํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ฑ๋ฅ ์ฌ์ฉ์๋ฅผ ์ํด :
์ด ํฐ์ผ์ ๋งฅ๋ฝ์์ : AMD ํธํ ๋ก๋(requirejs์ผ ํ์๋ ์์)๋ฅผ ์ ํํ๋ ๊ฒ์ HTML ์์ฉ๊ตฌ์ ๋ชฉํ์ ๋ถํฉํฉ๋๋ค. ์ฆ, ์ฝ๋์ ์ฑ๋ฅ ๋ชจ๋์์ ๋ชจ๋ฒ ์ฌ๋ก๋ก ๊ฐ๋ ๊ธธ์ ๊ฐ๋ฆฌํต๋๋ค. ๊ทธ๋ฌ๋ HTML ์์ฉ๊ตฌ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ค์ด ์ผ์ด๊ณ ์ดํด ๊ด๊ณ๊ฐ ์์ถฉ๋๊ณ ์ฝ๊ฐ์ ๋ฌธ์ฒด๋ ์์ผ๋ฏ๋ก ํ์ฌ๋ก์๋ ์ด ๋ถ์ผ์์ ์ถ์ฒํ๊ณ ์ถ์ง ์๋ค๋ ์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
AMD API๋ฅผ ๊ตฌํํ๋ requirejs ๋ฐ ๋ก๋์ ๋ชฉํ๋ ์ ์ญ์ ๋คํํ๊ณ ๊ฐ๋ฐ์๊ฐ ์ ์ฒด, ๋๋ก๋ ์์์ ์ธ ์ข ์์ฑ ํธ๋ฆฌ๋ฅผ ํด๊ฒฐํ๋๋ก ๊ฐ์ ํ๋ ์ผ๋ถ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ ๊ฒ๋ณด๋ค ๋ ํฐ ์ด์ ์ ์ ๊ณตํ๋ค๋ ์ ์ ๋ถ๋ช ํ ํ๊ณ ์ถ์ต๋๋ค. ์ด๋ฌํ ๋ชฉํ๋ ๊ฒฌ๊ณ ํ ์ฑ๋ฅ ํ๋กํ์ ๊ฐ์ง ์๋ฃจ์ ์ผ๋ก ๋ฌ์ฑ๋ฉ๋๋ค.
์ด์ ๋ถํฐ ๋ค์ ์ด์ ์ ๋ง์ถ๋ ค๋ฉด... defer
ํ
์คํธ๋ฅผ LABjs ํ
์คํธ์ ๋น๊ต...( defer
๊ฐ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ ๋ธ๋ก์์ ์๋ํ์ง ์๋๋ค๋ ์ฌ์ค์ ๋ฌด์ํ๊ณ ) LABjs ํ
์คํธ๊ฐ defer
ํ
์คํธ๋ณด๋ค ์ฑ๋ฅ์ด ์ข์ง ์์ต๋๊น? ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์์, ์ฌ์ง์ด ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์๋ ์๋ํด ๋ณด์์ง๋ง ์ฌ์ ํ ๊ฑฐ์ ๊ฐ์ ์ซ์๋ฅผ ๋ณด๊ณ ์์ต๋๋ค.
@getify
์ ๋๋ ์ด๋ป๊ฒ ์ด๊ฒ์ ์ต์ ํํ ์ ์๋์ง ๋ชจ๋ฅด์ง๋ง 3๋
์ด์ ๋ MacBook ์ปดํจํฐ์๋ ๋ ์ ํ ์ฌ์ด์ ์ผ๊ด๋ 3000์ ์ฐจ์ด๊ฐ ์์ผ๋ฉฐ ์ด๋ @defer
ํฉ๋๋ค.
๊ทธ๋ฌ๋ Firefox์์๋ง ํ ์คํธํ์ต๋๋ค.
@espadrine-- ๊ฝค ์ด์ํฉ๋๋ค. ๊ทธ ๋ฐ๋ฅ์ ๋๋ฌํ๊ณ ์ถ์ต๋๋ค. ์ด๋ค ๋ฒ์ ์ Firefox๋ก ํ ์คํธํ๊ณ ์์ต๋๊น? ๊ฒฐ๊ณผ ์คํฌ๋ฆฐ์ท์ ๋ณด๋ด์ฃผ์ค ์ ์์ต๋๊น?
๋ชจ๋ JS์ CSS๋ฅผ ์ฐ๊ฒฐ ๋ฐ ์ถ์ํ๊ณ HTML ํ์ด์ง์ ๋ฐ๋ก ์ธ๋ผ์ธ ์ฒ๋ฆฌํ๋ฉด ๋ฉ๋๋ค. ๋จ์ผ HTTP ์์ฒญ FTW! :NS
์ง์งํ๊ฒ ๋งํ์ง๋ง ์ด ์ปค๋ฎค๋ํฐ์๋ ์ฑ์ด ๋ก๋๋๋ ๋ฐฉ์๋ณด๋ค ๋ ํฐ ๋ฌธ์ ๊ฐ ๋๋ฌด ๋ง์์ ์ง์คํด์ผ ํฉ๋๋ค. ์๋ง๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ(ํ๋จ์ ์คํฌ๋ฆฝํธ ํ๊ทธ)์ด ์ถฉ๋ถํ ๋น ๋ฅผ ๊ฒ์ ๋๋ค. ํ๋ฅญํ ์ฑ์ ์์ฑํ๊ณ ๋ง์ง๋ง์ ๋ก๋ฉ ์ฑ๋ฅ์ ์ฒ๋ฆฌํ์ญ์์ค. ๋ค๋ฅธ ์ผ์ ํ๋ ๊ฒ์ ์ฑ๊ธํ๊ฒ ์ต์ ํํ๋ ๊ฒ์ ๋๋ค.
์ด ์ค๋ ๋์ ์ฌ๋๋ค์ AMD๊ฐ JS ์ฝ๋ ๊ตฌ์ฑ์ ํฉ๊ธ ํ์ค์ด ๋์ด์ผ ํ๋ค๋ ์ผ๋ฐ์ ์ธ ํฉ์๊ฐ ์์ต๋๊น? ๋ค๋ฅธ ์ต์ ์ ์ค์ ๋ก ๋ณธ ์ ์ ์์ง๋ง Boilerplate๋ ์ฌ๋๋ค์ด ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ์ข์ ์ถ๋ฐ์ ์ด ๋ ๊ฒ์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค.
Firefox UX 8.0a1(2011-08-07) ์ ๋ฐ์ดํธ ์ฑ๋.
๋ค์ ๋งํ์ง๋ง, ์ด์ ๋ ์ ์ ์์ผ๋ฉฐ ์๋ง๋ ๋งค์ฐ ๊ตฌ์ฒด์ ์ผ ๊ฒ์ ๋๋ค. LABjs๋ ์๋ง๋ ๋ ๊ฑฐ์ ๋ธ๋ผ์ฐ์ ์์ ๋งค์ฐ ์ ์ฉํ ๊ฒ์ ๋๋ค.
@getify ์ ํ ์คํธ ํ์ด์ง๋ฅผ ์์ ์ด์์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ง์ธ์. ์ธ์ฉํ๋ ค๋ฉด:
<์คํฌ๋ฆฝํธ ์ฐ๊ธฐ src="http://labjs.xhr.me/dev/test_suite/testscript1.php?_=4911710&delay=5"> <์คํฌ๋ฆฝํธ ์ฐ๊ธฐ src="http://labjs.xhr.me/dev/test_suite /testscript2.php?_=6146431&delay=3"> <์คํฌ๋ฆฝํธ ์ฐ๊ธฐ src="http://labjs.xhr.me/dev/test_suite/testscript3.php?_=9499116&delay=1">
@getify , ์ค์ ํ ์คํธ๋ฅผ ํ๊ณ ์ถ๋ค๋ฉด ์์ ๋กญ๊ฒ @SlexAxton ์ AssetRace repo๋ฅผ ํฌํฌํ๊ณ LABjs ๋ฒ์ ์ ์ถ๊ฐํ๊ฑฐ๋ _real_์ JavaScript ํ์ผ์ ์ฌ์ฉํ๋ ํ ์คํธ ํ์ด์ง๋ฅผ ์ค์ ๋๊ธฐ ์๊ฐ์ผ๋ก ๋ง๋์ญ์์ค.
๋ํ ๋จ์ผ ์คํฌ๋ฆฝํธ ํ๊ทธ( defer
์ฌ๋ถ)์ ๋ํด JS๋ฅผ ์ค์ ๋ก ์ฐ๊ฒฐํ๋์ง ํ์ธํ์ญ์์ค. ์์ ์ 1๊ฐ์ HTTP ์์ฒญ์ ํตํด ์ ๊ณต๋๋ ๋์ผํ ์ฝํ
์ธ ๊ฐ 10๊ฐ์ HTTP ์์ฒญ์์ ์ ๊ณต๋๋ ๋์ผํ ์ฝํ
์ธ ๋ฅผ ๋ฅ๊ฐํ๋ค๋ ๊ฒ์
๋๋ค.
LABjs๊ฐ ์๋นํ ์ค์ํ๋ค๋ ๊ฒ์ ์์ฌํ๋ ์ด๋ค ํ๋ฆฝ๋ ์ฆ๊ฑฐ๋ ์์ต๋๋ค.
๋ชจ๋ ์ฌ์ดํธ์ ์๋๋ฅผ ๋ฆ์ถฅ๋๋ค. ๋ง์ ๋์์ด ๋๋ค๋ ์ ์ฆ๋ ์ฆ๊ฑฐ๊ฐ ๋ง์ด ์์ต๋๋ค.
์ฌ์ดํธ์. ๊ทธ๋์ ๋๋ ์ด๊ฒ์ ์ฌ์ง ์์ต๋๋ค -- ๋น์ ์ด ๋งํ๋ ๊ฒ์ ๊ฐ์ ์ด ์๋ชป๋ ์ ์ ์ ๋๋ค
์ฆ๊ฑฐ์ ์๋ ์ฌ์ค.
์์์ ์ค๋ช ํ ๊ฒ์ LABjs๊ฐ ์ด๋ฏธ์ง, CSS ๋ฐ ๊ธฐํ ์์ฐ์ ์ฌ์ฉํ์ฌ ๋ง์ HTTP ์์ฒญ์์ JS๊ฐ ๊ฒฝ์ํ๊ฒ ํ์ฌ ์ค์ ๋ก ์ฌ์ดํธ ์๋๋ฅผ ํฌ๊ฒ ๋ฆ์ถ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค. @getify :
๊ธฐ๋ก์ ์ํด AssetRace repo ํ ์คํธ ํ์ด์ง์์ ๋ ๋ง์ ์ด๋ฏธ์ง๋ฅผ ์ป๋ ๊ฒ์ด ํ๋ช ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ์ง๊ธ์ ํ์คํ ์ข์ ๊ธฐ์ค์ด ๋ฉ๋๋ค.
@artzstudio AMD ๋ก๋๋ก JS๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ์ต์ํ Harmony์ ๋ชจ๋์ด ์์ฑ๋๊ณ ๋๋ฆฌ ์ง์๋ ๋๊น์ง๋ ์ค์ ๋ก ์ต๊ณ ์ ํ์ค์ ๋๋ค. ๊ทธ๋ฌ๋ฉด AMD ๋ชจ๋์์ ๊ธฐ๋ณธ ๋ชจ๋๋ก์ ๋ช ํํ ๋ง์ด๊ทธ๋ ์ด์ ๊ฒฝ๋ก๊ฐ ์๊น๋๋ค.
AMD ๋ชจ๋์ด ํ์ค์ด ๋๋ ๊ฒ์ ํ์คํ ์๊ฒฌ์ ๋๋ค(๋๋ ๊ณต์ ํ ์ ์์). ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ข์ํ์ง ์๊ณ ๋ค๋ฅธ ์๋ฃจ์ ์ ์ ๊ณตํ๋ ๋๋ํ ์ฌ๋๋ค(Yehuda Katz์ Dan Webb๊ฐ ๋ ์ค๋ฆ)์ด ๋ง์ด ์์ต๋๋ค.
@danwrong ์ loadrunner๋ ๋น์ ์ ๊ฐ๋ฐฉ์ด๋ผ๋ฉด ๋ ๋ค ํ ์ ์์ต๋๋ค: https://github.com/danwrong/loadrunner
๊ฝค ์ข์ ๊ฒ๋ค์ด ์์ต๋๋ค. JS๊ฐ ์๋ ์ฌ๋๋ค์๊ฒ๋ ์ ์ฌ์ ์ผ๋ก ์กฐ๊ธ ๋ ์ค์ฉ์ ์ ๋๋ค. ๋๋ ๋ด ๋ฌผ๊ฑด์ ๋ํ AMD ๋ชจ๋์ ์ข์ํ์ง๋ง ๋ชจ๋ ์ฌ๋์ด ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ ๋ฒ์ ์ ๋ชจ๋๋ก ๋ณํํ๋ ๋ฐ ์๊ฐ์ ๋ณด๋ด๊ณ ์ถ์ดํ๋ ๊ฒ์ ์๋๋๋ค.
@strobecorp ๊ฐ AMD ๋ชจ๋์ ํ์ํ ์ถ๊ฐ ์ฝ๋๋ฅผ ๋ง์ด ํ์๋ก ํ์ง ์๋ ์์ฒด ์๋ฃจ์ ์ ๊ฐ๋ฐํ๊ณ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
AMD๊ฐ ๊ธฐ๋ณธ๊ฐ์ด ๋์์ผ๋ฉด ์ข๊ฒ ์ง๋ง ๋ค์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ/newb ๊ด์ ์์ ๋ด๊ฐ ์ํ๋ ๋งํผ ํ๋ช ํ์ง ์์ ์ ์์ต๋๋ค.
@jashkenas--
@getify ์ ํ ์คํธ ํ์ด์ง๋ฅผ ์์ ์ด์์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ง์ธ์.
๋น์ ์ด ์์ ๋ฐ๋ฅด๊ฒ ํ๋ํ ์ ์๋ค๋ฉด ๋๋ ๋น์ ๊ณผ ๋ ์ด์ ๋ ผ์ํ ์๊ฐ์ด ์์ต๋๋ค. ์ฑ์คํ๊ฒ ํ๋ํ๊ณ ์์ต๋๋ค. ๋๋ ์ฝ๊ฐ์ ์ผ๋ฐ์ ์ธ ํ์๋ฅผ ๋์ด ํ๊ฐํ ๊ฒ์ ๋๋ค.
@getify , ์ค์ ํ ์คํธ๋ฅผ ํ๊ณ ์ถ๋ค๋ฉด
๋ด๊ฐ ํ๋ ์ผ์ด ์ ๊ทธ๋ ๊ฒ ๋ฏธ์ณค๊ณ , ์๊ธฐ๊ณ , ๋ฌด์๋ฏธํ์ง ์ค๋ช ํด์ฃผ์ จ์ผ๋ฉด ํฉ๋๋ค. ๋๋ (๊ทธ์ ํ๋ฅญํ ๊ฒฝํ๊ณผ ์งํ๋ก) ๋ชจ๋ ํ ์คํธ์์ ์๋ฒ ํ์ด๋ฐ์ ์ฌ์ฉํ์ฌ ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ดํ๊ณ ํ ์คํธ์ ๋ณ๋์ ์ค์ธ๋ค๊ณ ์ ์ํ Steve Souders๋ก๋ถํฐ ์ง์ ์ ๊ทผ ๋ฐฉ์์ ์ทจํ์ต๋๋ค. ๊ทธ๊ฒ ๋ฐ๋ก ๋ด๊ฐ ํ๋ ์ผ์ด๋ค.
๋ณด๋ค ํต์ ๋ ํ ์คํธ๋ ์ ํจํ ๊ธฐ์ค ํ ์คํธ์ ๋๋ค. ๊ทธ๊ฒ์ ํ๋ฆฝ๋ ๊ณผํ์ ๊ดํ์ ๋๋ค. ๊ทธ๋ ๋ค๊ณ ํด์ ์ค์ ํ ์คํธ๊ฐ ์ ์ฉํ์ง ์๋ค๋ ์๋ฏธ๋ ์๋์ง๋ง, ์ ๋ฅผ ์ ๊ฒฉํ๋ฉด์ "๊ทธ๋ฅผ ๋น์์ด๋ผ, ๊ทธ๊ฐ ๋ด๊ฐ ์๊ฐํ๋ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ ํ ์คํธ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฐ๋ณด์ผ. ํด์ผ ํ๋ค."
@SlexAxton ์ AssetRace ์ ์ฅ์๋ฅผ ์์ ๋กญ๊ฒ ๋ถ๊ธฐํ๊ณ LABjs ๋ฒ์ ์ ์ถ๊ฐํ์ญ์์ค.
๊ธฐ๊บผ์ด ๊ทธ๋ ๊ฒ ํ๊ฒ ์ต๋๋ค. ํ์ง๋ง ๋ด ๋ค๋ฅธ ํ ์คํธ๊ฐ ์ ํจํ์ง ์๋ค๋ ๋ฐ ๋์ํ๊ธฐ ๋๋ฌธ์ด ์๋๋๋ค. ๋ด ํ ์คํธ ์ค์ ์ด ์ ํจํ์ง ์์ ์ด์ ์ ๋ํด ํฉ๋ฆฌ์ ์ด๊ณ ์์ค ๋์ ์ฃผ์ฅ์ด ์๋ ๊ฒฝ์ฐ ๊ณต์ ํ์ญ์์ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๋ํด ๊ทธ๋ฐ ๋ฐ๋ณด๊ฐ๋๋ ๊ฒ์ ๊ทธ๋ง ๋์ญ์์ค.
@jashkenas--
์์ ์ 1๊ฐ์ HTTP ์์ฒญ์ ํตํด ์ ๊ณต๋๋ ๋์ผํ ์ฝํ ์ธ ๊ฐ 10๊ฐ์ HTTP ์์ฒญ์์ ์ ๊ณต๋๋ ๋์ผํ ์ฝํ ์ธ ๋ฅผ ๋ฅ๊ฐํ๋ค๋ ๊ฒ์ ๋๋ค.
๋๋ ๋น์ (๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค)์ด ์ด ํ ๋ก ์ด concat๊ณผ not-concat์ ๊ดํ ๋ชจ๋ ๊ฒ์ ๋ํด ์ด๋ป๊ฒ ์ฌ๊ธฐ์์ ๊ณ์ํด์ ์๋ฆฌ๋ฅผ ์ง๋ ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ค๋ ๋์ ํจ์ฌ ๋ ์๋ถ๋ถ์ ์ฝ์๋ค๋ฉด ํด๊ฒฐํด์ผ ํ ๋ ๊ฐ์ง ์ง๋ฌธ์ด ์์์ ์ธ์ ํ์ต๋๋ค. ๋ด๊ฐ ์๋ ํ ๋ ๊ฐ์ง ๋ฌธ์ ๋ ์ง๊ตํฉ๋๋ค. ์ฒซ ๋ฒ์งธ๋ ๋งํฌ์ ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋์์ ์ฌ์ฉ๋๋ ๋์ ์คํฌ๋ฆฝํธ ์์์ ๊ฐ๊ฑฐ๋ ๋ ์ข์ ์ ์๋์ง ์ฌ๋ถ์ ๋๋ค. ๊ทธ ์ง๋ฌธ์ ๋ด๊ฐ ์ฌ์ ํ ํ ์คํธ๋ฅผ ํตํด ํด๊ฒฐํ๋ ค๊ณ ํ๋ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์์ง ์ป์ง ๋ชปํ ๋ ๋ฒ์งธ ์ง๋ฌธ์ script-concat์ด ํญ์ ๋ ๋์์ง์ ๊ดํ ๊ฒ์ ๋๋ค. ๋๋ ๋น์ ์ด ์ด๋ฏธ ๊ทธ๊ฒ์ ํ์ ํ๊ณ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ทธ๊ฒ์ด ๊ทธ๋ ๊ฒ ๊ฐ๋จํ์ง ์๋ค๋ ๊ฒ์ ์์ฌํ๋ ๋ฐ๋ ์ฆ๊ฑฐ๊ฐ ์์ต๋๋ค. ๊ทธ ์ง๋ฌธ๋ ์ฒ ์ ํ ๊ฒ์ฆํด์ผ ํฉ๋๋ค. ํ์ง๋ง ์ง๊ธ ์ด ์ค๋ ๋์์ ํด๊ฒฐํ๋ ค๊ณ ํ๋ ๊ฒ์ ์๋๋๋ค.
๋น์ ์ ๋ฐฉ๋ฒ์ด ๋ ๋์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ๊ณ์ ์ฃผ์ฅํจ์ผ๋ก์จ, ๋น์ ์ ์ ์ฒด ํ ๋ก ์ ๋ ์ ์พํ๊ฒ ๋ง๋ค ๋ฟ์ ๋๋ค. ์ ๊ฐ ํ๋ ค๊ณ ํ๋ ์ผ์ ์ด ๋ ๊ฐ์ง ์ฃผ์ ์ง๋ฌธ ๊ฐ๊ฐ์ ๋ํ ๋ช ๊ฐ์ง ์ฆ๊ฑฐ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์ค์ ํ๋ ๊ฒ์ด๋ฏ๋ก ์ถ์ธก์ ๋ฉ์ถ๊ณ ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๋น์ ์ด ๋์ ๋์ํ์ง ์๋๋ค๋ ์ด์ ๋ก ๋์๊ฒ ๋ฐ๋ณด์ง์ ํ๋ ค๊ณ ํ๋ ๋์ ์ ๋น์ ์ด ๋์ธ ์ ์๋ ์ผ์ด ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
defer
ํ
์คํธ ๋ LABjs ํ
์คํธ์ ๊ด๋ จํ์ฌ IE9, FF8(์ผ๊ฐ) ๋ฐ Chrome15(์นด๋๋ฆฌ์)์์ ๋ ๊ฐ์ง ์ผ๋์ผ ํ
์คํธ์ ๋น ๋ฅธ ์คํฌ๋ฆฐ์บ์คํธ ์บก์ฒ๋ฅผ ์ํํ์ต๋๋ค.
defer
๋จ์ ์ ๋ํ @paulirish ์ ์ด์ ์ง๋ฌธ(https://github.com/paulirish/html5-boilerplate/issues/28#issuecomment-1765361)์ ๋๋ตํ๋ ค๋ฉด IE์์ "DOMContentLoaded"๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ณด์ธ์. defer
ํ
์คํธ์ Chrome ๋ฐ Firefox.
IE9 ๋ฐ Chrome15์์ DOMContentLoaded ์ด๋ฒคํธ๋ ๋ณด๋ฅ(์ฐจ๋จ)๋๊ณ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ๋๊น์ง ์คํ๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ FF์์๋ DOMContentLoaded ์ด๋ฒคํธ๊ฐ ์ ์ง๋์ง ์๊ณ ์ฆ์ ์คํ๋๊ณ ์คํฌ๋ฆฝํธ๊ฐ ๊ทธ ์ดํ์ ์คํ๋๊ธฐ ์์ํฉ๋๋ค. ์ด๋ ์ต์ ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ ๊ฑธ์ณ ์์ฒญ๋ ๋ถ์ผ์น์ด๋ฉฐ defer
๊ฐ ์ถฉ๋ถํ์ง ์๋ค๊ณ ์๊ฐํ๋ ์ด์ ์ค ํ๋์
๋๋ค.
์ฌ์์ ์ฝ๊ณ ์ ์ ์๋ ํ ์ด๋ค ๋์์ด ์ฌ๋ฐ๋ฅธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ธ๋ผ์ฐ์ ๊ฐ์๋ ๋ถ๋ช ํ ๊ธฐ๋ฐํ๊ณ ์ผ๊ด์ฑ์ด ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
@getify ์ ๋ ๋ฐ๋ณด๊ฐ ๋๋ ค๊ณ ํ๋ ๊ฒ์ด ์๋๋๋ค. ๋ง์์ ์์ฒ๋ฅผ ๋๋ฆฐ ์ ์ง์ฌ์ผ๋ก ์ฌ๊ณผ๋๋ฆฝ๋๋ค.
๋น์ฐํ, ๋น์ ์ด ์ํ๋ ๊ฒ์ผ๋ก ๋ณด๋ ๊ฒ์ ํ ๋ก ์ ์์ ์ผ๋ก ... ๊ทธ๋ฆฌ๊ณ ๋ด๊ฐ ๋ฑ ๊ธฐ๋ฆ์ผ๋ก ๋ณด๋ ๊ฒ์ ๋น์ ์ ๋์์ด ๋๋ ํ ๊ฑธ์์ผ๋ก ๋ด ๋๋ค.
๋ ๊ฐ์ง ๋ฌธ์ ๋ ์ค์ ๋ก ์ง๊ตํฉ๋๋ค(์๋ ๊ฒ์๋ฌผ์์ ์ฌ์ฉํ ์ธ์ด).
์ฒซ ๋ฒ์งธ๋ ๋งํฌ์ ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ
๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋์์ ์ฌ์ฉ๋๋ ๋์ ์คํฌ๋ฆฝํธ ์์.
์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ์ ๋ํด ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๊ทธ๊ฒ์ ์ค์ํ์ง ์์ต๋๋ค. ๋ฌผ๋ก ๋ณ๋ ฌ ๋ก๋ฉ์ ํ๋ ์ด์์ ์คํฌ๋ฆฝํธ์ ๋ํ ์์ฐจ ๋ก๋ฉ๋ณด๋ค ๋น ๋ฅผ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌผ๋ก , ๋งํ๊ฑฐ๋, ๋น ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ๊ทธ ์ผ์ <body>
๋๋๊ณผ ํ๊ทธ defer
, ๋๋ ์คํฌ๋ฆฝํธ ๋ก๋์ ๋ธ๋กํน๋ณด๋ค ๋ ์ข์ ๊ฒ์ด๋ค <head>
.
๊ทธ๋ฌ๋ ์ด๊ฒ์ ์์ ์ ๋์น๊ณ ์์ต๋๋ค. ์์ฐจ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ๋ฃ๋ ๊ฒ์ ๋น๊ตํ๊ธฐ ํ๋ ์ผ์ ๋๋ค. JavaScript์ ์ฑ๋ฅ์ ๊ด์ฌ์ด ์๋ ์ฌ๋์ ์๋ฌด๋ ๊ทธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์์ฐจ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ณด๋ค ๋ ๋น ๋ฅธ ๊ฒ์ ๋ฌด์์ ๋๊น? _์๋ฌด๊ฒ_.
์ฐ๋ฆฌ๊ฐ ์์ง ์ป์ง ๋ชปํ ๋ ๋ฒ์งธ ์ง๋ฌธ์
script-concat์ ํญ์ ๋ ์ข์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด ์ง๋ฌธ์ "์ป์๋ค". ์ฌ์ค, ์ด ํ์ด์ง ์๋จ์ @paulirish ์ ์ง๋ฌธ์ ๋๋ค. ์ด ์ค๋ ๋์์ ํด๊ฒฐํ๋ ค๊ณ ํ์ง ์๋๋ค๋ฉด ๊ทธ๋ ๊ฒ ํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ด ์ค๋ ๋์์ ๋ฟ๋ง ์๋๋ผ ์๋ ์ ๊ฑธ์ณ LABjs๊ฐ ํ๋ ์ผ์ ๋ํ ๋ชจ๋ ์ฃผ์ฅ์ ํต์ฌ์ ์ฐ๋ฆ ๋๋ค.
๊ทธ ์ง๋ฌธ๋ ์ฒ ์ ํ ๊ฒ์ฆํด์ผ ํฉ๋๋ค.
๋ฐ๋ณตํ๊ธฐ ์ํด, ์ฌ๊ธฐ์ (๊ณต์ ํ) ํ ์คํธ ์ผ์ด์ค๊ฐ ์์ต๋๋ค. ๋์ผํ 5๊ฐ์ ์ค์ ์คํฌ๋ฆฝํธ, ๋ค๋ฅธ ์์ฐ์ด ์๋ ์ค๊ฐ ํฌ๊ธฐ ํ์ด์ง์ ๋ก๋ํฉ๋๋ค. ํ๋๋ ๋ก๋ ์์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด LABjs ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ํ๋๋ ์ฐ๊ฒฐ๋ ๋จ์ผ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
http://jashkenas.s3.amazonaws.com/misc/snake-oil/labjs.html
http://jashkenas.s3.amazonaws.com/misc/snake-oil/vanilla.html
์กฐ์ฌํ๊ณ ์ถ์ ๋ค๋ฅธ ํ ์คํธ ์ฌ๋ก๋ ์คํํด๋ณด๊ณ ์ถ์ ์ค์ LABjs ์ฌ์ฉ ์น์ฌ์ดํธ๊ฐ ์๋ค๋ฉด ๊ณต์ ํด ์ฃผ์ธ์.
@SlexAxton ๊ฐ์ฌํฉ๋๋ค. ์ด์ ๋ํ Yehuda์ ๊ฒฌํด์ ๋ค๋ฅธ ๊ฐ๋ ฅํ ์๊ฒฌ(๋ฆฌํฉํ ๋งํ๊ธฐ๊ฐ ๋๋ฌด ์ด๋ ต๋ค๋ ์ ์ ์ธ)์ ๋ฃ๊ณ ์ถ์ต๋๋ค. ๋ด๊ฐ ๋ฐ๊ฒฌ ์ด ์ด์ผ๊ธฐ๋ฅผํ์ง๋ง.
@geddesign ์ ์๊ฒฌ์ ๋ช ํํ ์ค๋ ํ์ฌ AMD ๋ชจ๋์ ํ๋ชจ๋ ๋ชจ๋๋ก ์๋นํ ์ฝ๊ฒ ๋ณํ๋ ์ ์์ง๋ง ๋ด๊ฐ ์๊ฐํ๋ ํ๋ชจ๋ ๋ชจ๋ ์ ์์ ์ฌ์ ํ โโ์ ๋์ ์ด๋ฉฐ ๋์ค์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์์ง ์๊ฒฉํ ๊ตฌํ ํ ์คํธ๋ฅผ ๊ฑฐ์น์ง ์์์ง๋ง ์ด๋ ์ ๋ ๋ค๋ฆฌ๋ฅผ ๋๊ธฐ ์์ํ์ต๋๋ค. ํ๋ฌ์ค ์ธก๋ฉด์์ AMD ๋ก๋ + ๋ก๋ ํ๋ฌ๊ทธ์ธ์ ์ผ๋ถ ์กฐํ ์์ด๋์ด๋ฅผ ์๋ํ๋ ๋ฐ ํ์คํ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
@SlexAxton ์ ์๊ฒฌ:
loadrunner์ ๊ฒฝ์ฐ: ๊ตฌ๋ฌธ์ด ๋ ๋์์ง, ๋จ์ง ๋ค๋ฅธ์ง ๋ช ํํ์ง ์์ต๋๋ค. AMD๋ฅผ ์ง์ํ๋ฏ๋ก ์ฌ์ ํ ์๋ํฉ๋๋ค.
strobe์ ๊ฒฝ์ฐ: ์์ง ๊ทธ๋ค๋ก๋ถํฐ ์ฝ๋๋ฅผ ๋ณด์ง ๋ชปํ์ต๋๋ค. ๋๋ Yehuda๊ฐ ๊ทธ ๋ฐ์ ์ ์ด๊ธฐ ์ํด ํ ์ผ์ ๊ฐ์ฌํ์ง๋ง ๊ทธ๋ค์ ์๋นํ ๋ด๋ฉด์ ์ด์ ์ ๋ง์ถ ๊ฒ ๊ฐ์ต๋๋ค. Alex, ๊ทธ๋ค์ด ์๊ฐํ๋ ๊ฒ์ ๋ํ ํฌ์ธํฐ๊ฐ ์๋ค๋ฉด ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์ ๊ทผ ๋ฐฉ์์ด ์ค์ฒฉ๋ ์ข ์์ฑ์ ํ์ฉํ๋ ค๋ฉด(๊ด๋ฒ์ํ ์ฝ๋ ๊ณต์ ์ ํ์ํจ) ๋ค์๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ด ํ์ํฉ๋๋ค.
์ด๊ฒ์ด AMD๊ฐ ์ ๊ณตํ๋ ๊ฒ์ด๋ฉฐ ๊ตฌ๋ฌธ์ ๊ฐ๋ฅํ ํ ์ฌ๋ฆผํฉ๋๋ค. ๋ค๋ฅธ ๊ฒ์ ์ด๋ฆ๊ณผ ์ผ๋ถ ์ ํ์ ๊ตฌ๋์ ์ ๋๊ณ ์ธ์ฐ๋ ๊ฒ๋ฟ์ ๋๋ค. ์ด๋ค ์์ ์์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ํํด์ผ ํ๊ณ , ์ง๊ธ๊น์ง Dan Webb ๋๋ Yehuda๋ก๋ถํฐ AMD๋ฅผ ์ง์งํ ์ ์๋ ๊ตฌ์กฐ์ ์ฝ์ ์ ๋ํด ๋ค์ด๋ณธ ์ ์ด ์์ต๋๋ค. requirejs์ ๊ฐ์ ์ผ๋ถ AMD ๋ก๋๋ ์ผ๋ฐ ์คํฌ๋ฆฝํธ๋ง ๋ก๋ํ ์ ์์ผ๋ฉฐ ๋ชจ๋์ผ ํ์๋ ์์ต๋๋ค.
ํนํ ๋ชจ๋์ ๋ํ ์ฝ๋ ๊ตฌ๋ฌธ์ ์๊ฐํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ๊ณ ๋ชจ๋ ์ฌ๋์ด ์์ ์ ๊ฐ์ธ์ ์ธ ์ ํธ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ์ ์ ์ดํดํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ AMD๋ ์ด๋ค ์ข ๋ฅ์ ๋์๋ฅผ ์ป๊ธฐ ์ํด ์ด์ฌํ ๋ ธ๋ ฅํ์ผ๋ฉฐ ๋ ์ค์ํ๊ฒ๋ ์ด๋ฅผ ๋ฐฑ์ ํ๊ธฐ ์ํ ์ค์ ์ฝ๋ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ํํ ๊ฝค ๊น์ ์ญ์ฌ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. AMD๊ฐ ์ ํฉํ์ง ์์ ์ด์ ์ ๋ํด ๋งค์ฐ ๋ช ํํ๊ณ ๋ช ํํ๊ฒ ์ค๋ช ํด์ผ ํ๋ ์ฑ ์์ ์ด์ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ์๋ค๊ณ ์๊ฐํฉ๋๋ค(์ด ํฐ์ผ์ ์ด๋ฅผ ์ํ ์ฅ์๊ฐ ์๋๋๋ค. ์ธ์ ๋ ์ง ์ ์๊ฒ ์ฐ๋ฝํ์ง ์๊ฑฐ๋ amd-implement list๋ฅผ ์ฌ์ฉํ์ญ์์ค) .
๊ทธ๋ฌ๋ @SlexAxton ์ ๊ฒฌํด์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. HTML ์์ฉ๊ตฌ์ ๋ํ AMD ์ ๊ทผ ๋ฐฉ์์ ํ์คํํ๋ ๊ฒ์ ์๊ธฐ์์กฐ์ผ ์ ์์ผ๋ฉฐ ์ ๋ ๊ทธ๊ฒ์ ๋ํด ์์ ํ ๊ด์ฐฎ์ต๋๋ค. ์์ฉ๊ตฌ ํ๋ก์ ํธ๊ฐ ํ๋๋ฅผ ์ ํํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด AMD๋ ๊ด๋ฒ์ํ JS ๊ฐ๋ฐ์ ์ ํฉํ ๊ฐ๋ ฅํ ์ ํ์ ๋๋ค.
@SlexAxton ๋น์ ๊ณผ ํจ๊ป ํด์. ๋ด ์์ ์ ์ฝ๋๋ AMD์ ๋๋ค. ๋ชจ๋๊ฐ ์คํฌ๋ฆฝํธ ๋์ ๋ชจ๋์ ์์ฑํ์ผ๋ฉด ์ข๊ฒ ์ง๋ง ์ด ์ข๊ฒ๋ RequireJS๋ ์ผ๋ฐ ์คํฌ๋ฆฝํธ์ ๋ชจ๋์ ๋ก๋ํ ์ ์์ต๋๋ค.
Yehuda์ handlebars.js ํ ํ๋ฆฟ์ ์ธ๊ธํ๋ ๊ฒฝ์ฐ RequireJS์ ๋งค์ฐ ์ ์๋ํฉ๋๋ค. ํนํ ํ ํ๋ฆฟ์ ์ปดํ์ผ/์บ์ฑํ๊ณ ํ ํ๋ฆฟ ๊ธฐ๋ฅ์ ๋ฐํํ๋ ํ๋ฌ๊ทธ์ธ์ ์์ฑํ๋ ๊ฒฝ์ฐ.
define(['tmpl!navigation.html'], function(nav){
$('body').append(nav(data));
});
๊ทธ๋ฌ๋ ๋๋ ์ด ์ง์ ์ ๋์ํ์ง ์์ต๋๋ค.
AMD๊ฐ ๊ธฐ๋ณธ๊ฐ์ด ๋์์ผ๋ฉด ์ข๊ฒ ์ง๋ง ๋ค์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ/newb ๊ด์ ์์ ๋ด๊ฐ ์ํ๋ ๋งํผ ํ๋ช ํ์ง ์์ ์ ์์ต๋๋ค.
Newbs๋ ์ ์ญ ๋ณ์ ์ถฉ๋์ ๋ ์ทจ์ฝํ๊ธฐ ๋๋ฌธ์ AMD๊ฐ ๋ ธ๋ จํ ๊ฐ๋ฐ์๋ณด๋ค ํจ์ฌ ๋ ๋ง์ ๊นจ๋ํ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค. ๋ฑ. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ชจ๋๋ก๋ถํฐ ๋ง๋ํ ์ด์ ์ ์ป์ต๋๋ค. ์ด๊ฒ์ด ๊ณง ์ถ์๋ Dojo 1.7 ๋ฐ Mootools 2.0์ด AMD๋ก ์ด๋ํ๋ ์ด์ ์ ๋๋ค. jQuery๊ฐ ํ์ฌ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ฐ์ฅ ํฐ ๋ถ๋ง ์ค ํ๋๋ "์ ๋ถ ์๋๋ฉด ์ ๋ฌด"์ ๋๋ค. ์ ๋๋ฉ์ด์ , ajax, ์ด๋ฒคํธ ๋ฑ๋ ํ์ด์ง์ ๋ก๋ํ์ง ์๊ณ ๋ ๋ฐ์ด๋ DOM ์กฐ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค, AMD๋ ์์์ ๋๋ค. HTML5 Boilerplate๊ฐ ์ฌ๋๋ค์๊ฒ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์๋ ค์ฃผ๊ณ ์ถ๋ค๋ฉด AMD๋ฅผ ์ ์ธํ๋ ๊ฒ์ ๋ถ๋๋ฌ์ด ์ผ์ด ๋ ๊ฒ์ ๋๋ค. JavaScript์ ๋ง์ ๋ฌธ์ ๋ฅผ ์ฐ์ํ๊ฒ ํด๊ฒฐํฉ๋๋ค.
ํ์คํ๊ฒ. ๋๋ ๋์ํ๋ค. ๋๋ ๊ทธ๋ค์ด ๋ชจ๋ ๋ฐฉ๋ฒ์ ํ์๋ก ์ฌ์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๋ ๊ทธ๋ค์ด ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๋๋ ์ฌ๋๋ค์ด ์์ง AMD๊ฐ ๋ชจ๋ ์ง์งํ ๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ์ ํ์ด๋ผ๋ ๊ฒ์ ๊นจ๋ซ์ง ๋ชปํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ผ๋จ ๊ทธ๋ ๊ฒ ํ๋ฉด ์์ฌ์ ํฅํ ์ธํฐ๋ทฐ์์ ์์ ์ด ์๊ณ ์๋ ๋ด์ฉ์ ๋งํ๊ณ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ ๋ชจ๋๊ฐ ์ฐ๋ฆฌ์ ๋ชซ์ ๋คํ๊ณ "์ฝ๊ณ ๋ ์ข๊ณ ์ค์ํฉ๋๋ค"๋ผ๊ณ ๋งํ๊ณ ์ ํ์ด๋ก ๋ง๋ ๋ค๋ฉด ๋ฌด๋ฆฌ๋ ์์ ์ ๊ฒฝ๋ ฅ์ ์ํด ๋ฐ๋ผ๊ฐ ๊ฒ์ ๋๋ค.
@jashkenas--
์ฒซ ๋ฒ์งธ๋ ๋งํฌ์ ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋์์ ์ฌ์ฉ๋๋ ๋์ ์คํฌ๋ฆฝํธ ์์์ ๊ฐ๊ฑฐ๋ ๋ ์ข์ ์ ์๋์ง ์ฌ๋ถ์ ๋๋ค.
์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ์ ๋ํด ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค. ๊ทธ๊ฒ์ ์ค์ํ์ง ์์ต๋๋ค.
์ฌ์ค, ๋๋ ๋์ ์คํฌ๋ฆฝํธ ์์ ๋ก๋ฉ์ด ์คํฌ๋ฆฝํธ ํ๊ทธ๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ์ ์ด๋์ด๋ผ ๊ฒ์ด๋ผ๋ ๋ฐ ๋ชจ๋๊ฐ ๋์ํ๋ค๋ ๊ฐ์ ํ์ ์ด ์ค๋ ๋์ ์ฐธ์ฌํ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ @paulirish ์ @slexaxton ์ ๋ชจ๋ _this_ ์ค๋ ๋์์ ์ด๋ฌํ ๊ฐ์ ์ ์๋ฌธ์ ์ ๊ธฐํ์ต๋๋ค.
@paulirish ๋ defer
๊ฐ ์ผ๋ฐ ol' ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ๋์ ์คํฌ๋ฆฝํธ ์์ ๋ก๋ฉ ๋์๋ณด๋ค ์ข๊ฒ(๋๋ ๋ ์ข๊ฒ) ๋ง๋๋ ์ถฉ๋ถํ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์ ์ํ์ต๋๋ค. ๋๋ defer
๊ฐ ์ถฉ๋ถํ๋ค๋ ๋ฐ ๋์ํ์ง ์์ผ๋ฉฐ, ์ด์ ๊ทธ ์ด์ ๋ฅผ ๋ช ๊ฐ์ง ์ค์ ํ์ต๋๋ค.
๋ฐ๋ผ์ ์ฒซ ๋ฒ์งธ ์ง๋ฌธ์ ๊ฒํ ํ๊ณ defer
๊ฐ ์คํฌ๋ฆฝํธ ๋ก๋๋ณด๋ค ๋์์ง ์ดํด๋ณด๋ ๊ฒ์ด ํ๋นํ๋ค๊ณ ์๊ฐํฉ๋๋ค. defer
๋ฒ์ด๋ ์ ์๋ ๋ช ๊ฐ์ง ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์์ง๋ง ์ผ๋ฐํ๋ ๊ฒฝ์ฐ ์คํฌ๋ฆฝํธ ๋ก๋๋ ๋ชจ๋ ๋จ์ ์ ์ฒ๋ฆฌ/์ ๊ทํํ๋ ๋ฐ๋ฉด defer
๋ ์ด๋ฌํ ๋ฌธ์ ์ ๋
ธ์ถ๋ฉ๋๋ค.
๋๋ ์ฌ์ ํ ๋ชจ๋ ์ฌ๋๋ค์ด defer
๊ฐ ์ถฉ๋ถํ์ง ์์ ์ด์ ๋ฅผ ๋ณด๊ฑฐ๋ ๋์ํ๋์ง ํ์ ํ์ง ๋ชปํฉ๋๋ค.
๋ฐ๋ณตํ๊ธฐ ์ํด, ์ฌ๊ธฐ์ (๊ณต์ ํ) ํ ์คํธ ์ผ์ด์ค๊ฐ ์์ต๋๋ค. ๋์ผํ 5๊ฐ์ ์ค์ ์คํฌ๋ฆฝํธ, ๋ค๋ฅธ ์์ฐ์ด ์๋ ์ค๊ฐ ํฌ๊ธฐ ํ์ด์ง์ ๋ก๋ํฉ๋๋ค. ํ๋๋ ๋ก๋ ์์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด LABjs ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ํ๋๋ ์ฐ๊ฒฐ๋ ๋จ์ผ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๊ฒ์ ๋น์ ๊ณผ ๋ค๋ฅธ ์ฌ๋๋ค์ ์๋ชป๋ ํ ์คํธ ์ ์ ์ ๋๋ค. ์ ๋ 1๊ฐ ๋์ 5๊ฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ ๊ฒ์ด ๋ ๋น ๋ฅผ ๊ฒ์ด๋ผ๊ณ ์ฃผ์ฅํ ์ ์ด ์์ต๋๋ค. ์ ๋. ํญ์. ๋ ๋ช ํํด์ง ์ ์์ต๋๊น? ์ ์ ๋ 5 ๋ 1์ด ์๋์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ํ
์คํธ๋ 3๊ฐ์ ์คํฌ๋ฆฝํธ ํ๊ทธ์ 3๊ฐ์ script()
ํธ์ถ์ ํ
์คํธํ๋ ๊ฒ์ด์์ต๋๋ค. ์๋ํ๋ฉด ๊ทธ๊ฒ์ด ๊ณต์ ํ ํ
์คํธ์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น๋์ค์ ํ
์คํธ๋ ๊ทธ ์๋๋ฆฌ์ค์์ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ด ์ ์ตํ๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ ๋ฒ์งธ, ๊ทธ๋ฆฌ๊ณ ํจ์ฌ ๋ ๋ณต์กํ ํ ์คํธ ์ง๋ฌธ์ ์ด๋ฏธ ๋ชจ๋ JS๋ฅผ ํ๋์ ํ์ผ์ ๋ก๋ํ๊ณ ์๋ ์ฌ์ดํธ์ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋์ง ์ฌ๋ถ์ ๋๋ค. ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ๊ทธ๊ฒ์ ๊ฐ์ ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ๋งํฉ๋๋ค. ๋๋ ๋์ํ์ง ์๋๋ค.
์ฐธ๊ณ : ์ด ์ง๋ฌธ์ด ์ง๊ตํ๋ ์ด์ ๋ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ document.createElement("script")
์ ํ ๋์ ๋ก๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋จ์ผ ์ฐ๊ฒฐ ํ์ผ์ ๋ก๋ํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ ์ชฝ์ด๋ ๋จ์ผ concat ํ์ผ์ ๋ํ ์ง๋ฌธ์ ์ ํจํ ์ง๋ฌธ์ด์ง๋ง ์คํฌ๋ฆฝํธ ํ๊ทธ ๋๋ ๋์ ์คํฌ๋ฆฝํธ ๋ก๋ฉ์ด ๋ ๋์์ง ์ฌ๋ถ์๋ ๋ณ๊ฐ์
๋๋ค.
์ด ์ค๋ ๋์ ๋ค๋ฅธ ๋ง์ ์ปจํ ์คํธ(์ฃผ์ ์ ๋ํ ๋ชจ๋ ํ์, ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ๋ฑ ํฌํจ)์์ ์ ๊ฐ ์ฌ๋ฌ ๋ฒ ๋งํ๋ ๊ฒ์ ๋ค์์ ๋ ๋จ์ผ JS ํ์ผ ์ฐ๊ฒฐ์ ๊ฐ์ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. "์ฒญํฌ"(ํฐ ์ฐ๊ฒฐ ํ์ผ์ ๋ถํ ํ๋ ๊ฒ)๋ฅผ 2๊ฐ ๋๋ 3๊ฐ์ ์ฒญํฌ๋ก(์ต๋) ์ชผ๊ฐ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํฉ๋๋ค. ์ฒญํฌ๊ฐ ~๊ฐ์ ํฌ๊ธฐ์ด๊ณ ๋ณ๋ ฌ๋ก ๋ก๋๋๋ ๊ฒฝ์ฐ "Keep-Alive" ์ฐ๊ฒฐ, ๋ณ๋ ฌ ๋ก๋ ํจ๊ณผ ๋ฑ์ผ๋ก ์ธํด ์ถ๊ฐ HTTP ์ค๋ฒํค๋๊ฐ ์๋๋ผ๋ ํ์ด์ง๊ฐ ๋ ๋นจ๋ฆฌ ๋ก๋๋ ์ ์์ต๋๋ค.
์ฌ์ค ์ ๋ LABjs์ ์ฒซ ๋ฒ์งธ ๋ฆด๋ฆฌ์ค ์งํ์ธ 2009๋ 11์์ ์ด ์ฃผ์ ์ ๋ํด ๊ธ์ ์ฐ๊ณ ์์์ต๋๋ค. http://blog.getify.com/2009/11/labjs-why-not-just-concat/
๊ทธ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ดํ๋ก ์ ๋ ์ฌ๋ฌ๋ถ์ด ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํ๋ ์์น์ ์๋ค๋ฉด(๋ชจ๋ ์ฌ๋์ด... ์ฌ์ค, ๋๋ถ๋ถ์ ์น์ด ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ) ๋ค์์ ์ํํด์ผ ํ๋ค๊ณ ๋งํ์ต๋๋ค. ๊ทธ๋์. ๊ธฐ๊ฐ. ์ธ์ ๋. ํญ์ 10-20๊ฐ์ ๋ก์ปฌ ํ์ผ์์ ํจ์ฌ ์ ์ ์๋ก ํ์ผ์ ์ฐ๊ฒฐํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋จ์ผ ์ฐ๊ฒฐ ํ์ผ์ด ์์ผ๋ฉด ๋จ์ผ ํ์ผ์ 2-3๊ฐ์ ์ฒญํฌ๋ก ๋ณ๋ ฌ๋ก ๋ก๋ํ๊ณ (์คํฌ๋ฆฝํธ ๋ก๋ ์ฌ์ฉ) ๋ก๋ํ๋ ๊ฒ์ด ๋์์ด ๋ ์๋ ์์ต๋๋ค.
์ด๊ฒ์ด ๋ ๋์ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋๋ ๊ทธ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ๊ทธ๊ฒ์ ๋์ดํ์ง๋ง ๊ฐ๋จํ ๋งํด์ :
๊ฒฐ๋ก ์... concat ๋ ๋ณ๋ ฌ์ ์ฃผ์ ์ ๋ํด... ๋๋ _ํญ์_ ์ฌ๋๋ค์๊ฒ ๋งํฉ๋๋ค. ๋ ๋ค.
@getify ์ ๋งํ๋ค.
Kyle์ LABjs๊ฐ ์ ์ง์์ ๋ฐ๊ณ ์์ต๋๋ค.
์ฌ์ดํธ์ ์ฑ๋ฅ ํฅ์์ ๋๋ ์ปจ์คํดํธ๋ก์ ์ ๋ LABjs๊ฐ ์ ์๋ํ๋ ๊ฒ์ ์ฌ๋ฌ ๋ฒ ๋ณด์์ต๋๋ค.
์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋์์ ๋ฟ๋ง ์๋๋ผ(100ms๊ฐ ์๋๋ผ 1์ด ์ด์) ๊ฐ๋ฐ์๋ค๋ ์ข์ํ์ต๋๋ค.
์ดํดํ๊ธฐ ์ฝ๊ณ ๊ตฌํํ๊ธฐ ์ฝ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๋ ์ด ๊ธฐํ๋ฅผ ํตํด "Kyle์๊ฒ LABjs์ ๋ํ ํฐ ์ง์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ ๊ธฐ๋์น๋ฅผ ๋ช ๋ฒ์ด๋ ์ด๊ณผํ์ต๋๋ค."๋ผ๊ณ ๊ณต๊ฐ์ ์ผ๋ก ๋งํ ๊ฒ์ ๋๋ค.
์ฐ๊ฒฐ Keep-Alive๋ฅผ ์ฌ์ฉํ๋ฉด 2-3๊ฐ์ ๋์ ์ฐ๊ฒฐ์ ์ป์ ์ ์์ต๋๋ค(2-3๊ฐ์ ์ ์ฒด ์ฐ๊ฒฐ ์ค๋ฒํค๋ ํจ๋ํฐ ์์ด).
HTTP๋ ์๋ต์ mux/interleaveํ์ง ์์ผ๋ฏ๋ก ๋จผ์ ์ฌ๋ฌ ์ฐ๊ฒฐ์ ์ด์ง ์๊ณ ๋ณ๋ ฌ ๋ค์ด๋ก๋๋ฅผ ํ ์ ์์ต๋๋ค. ์๊ตฌ ๋ฐ ํ์ดํ๋ผ์ธ ์ฐ๊ฒฐ์ ์ด์์ ์ธ ๊ฒฝ์ฐ๋ ๋จ์ผ ํ์ผ(+ ์์์ ํค๋)์ ์ฐ์์ ์ผ๋ก ๋ค์ด๋ก๋ํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
@ํฌ๋ฅด๋ฌ--
์ ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋จ์ผ ์๋ฒ์ ๋ํด ๋ณ๋ ฌ๋ก ์ฌ๋ฌ ์ฐ๊ฒฐ์ ์ด ์ ์๋ค๋ ๊ฒ์ ์ง์ ๋ณด์๊ณ ํ์ธํ์ต๋๋ค. ์ฐ๊ฒฐ ์ ์ง๊ฐ ์๋ํ๋ฉด ๋ ๋ฒ์งธ ๋ฐ ์ธ ๋ฒ์งธ ์ฐ๊ฒฐ์ ๋ํ ์ค๋ฒํค๋๊ฐ ์ฒซ ๋ฒ์งธ ์ฐ๊ฒฐ๋ณด๋ค ํจ์ฌ ์ ์ต๋๋ค. ๊ทธ๊ฒ์ด ๋ด๊ฐ ๋งํ๋ ํจ๊ณผ์ ๋๋ค.
@getify Fantastic, ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ผ์ข ์ ํฉ์์ ๋๋ฌํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ธฐ์ต์ ์๋ก ๊ณ ์น๋ ค๋ฉด:
๋๋ ๋น์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์กฐ๊ธ์ฉ ๋ก๋ํ๋ ๊ฒ์ ๋ํ ๋ฐ๋ก ์ ์์ํ ์ ์์ต๋๋ค ...
๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์คํฌ๋ฆฝํธ ๋ก๋ฉ ๊ธฐ์ ๊ณผ ์์ ํ ์ง๊ตํ๋ฏ๋ก ์๋ตํ์ญ์์ค.
ํ ๋ก ์.
์, ์๊ตฌ ์คํฌ๋ฆฝํธ์ ๋ค๋ฅธ JS ํ์ผ์์ ํ๋ฐ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ ๊ฒ์ด ์ข๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ํน์ ํ์ด์ง์๋ง ํ์ํ ์คํฌ๋ฆฝํธ๋ฅผ ํด๋น ํ์ด์ง์๋ง ๋ก๋ํ๋ ๊ฒ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ฅญํฉ๋๋ค.
๋ด๊ฐ ์น ๊ฐ๋ฐ์์ด๊ณ ๋ง์ JavaScript๊ฐ ํฌํจ๋ ํ์ด์ง๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? LABjs๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์๊ตฌ ์คํฌ๋ฆฝํธ๋ฅผ ํ๋์ ํ์ผ์ ์ฐ๊ฒฐํ๊ณ ํ๋ฐ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค๋ฅธ ํ์ผ์ ์ฐ๊ฒฐํ๊ณ <script defer="true">
body ํ๊ทธ์ ๋งจ ์๋์ ๋ ๋ค ๋ก๋ํฉ๋๊น?
์ ๋ด ์ฑ์ด ์บ์ฑ ๋ฌธ์ , ๋ธ๋ผ์ฐ์ ๋นํธํ์ฑ, ํ์ด์ง ์์ ์ด๋ฏธ์ง ๊ฒฝ์, ๊ทธ๋ฆฌ๊ณ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ๊ฐ์ ธ์ค๋ ๋๋จธ์ง ๋ฌธ์ ์ ๋ ธ์ถ๋์ด์ผ ํฉ๋๊น?
์ฑ๋ฅ์ ์ํด ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ์ฌ์ฉํ๋ ์ ์ฒด ์ ์ ๊ฐ ๋ ๊ฐ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ ์ฝ๊ณ ๊ฐ๋จํ๋ค๋ ๊ฒ์ด๋ผ๋ฉด ... ๋ธ๋ฃจํด๋ฆฐ์์ ํ๋งคํ ๋ค๋ฆฌ๊ฐ ์์ต๋๋ค.
@getify ๋ ์น ์๋ฒ๋ฅผ ๋ ๋ฒ ์ด์ ๊ตฌํํ์ต๋๋ค. ์ฐ๊ฒฐ ์ ์ง๋ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ๋์ ์์ฒญ์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉฐ ํ์ ์์ฒญ์ ๋น์ฉ๋ง ์ ๊ฐํฉ๋๋ค. ์ฐ๊ฒฐ ์ ์ง๊ฐ ์๋ ๋ ๊ฐ์ ํ์ ์์ฒญ์ด ์๋ ๋ถํ ๋ณธ๋ฌธ์ ๋จ์ผ ์์ฒญ๋ณด๋ค ์ฌ์ ํ ๋น์๋๋ค. ๋ ๊ฐ์ ๋ณธ๋ฌธ ๋ถ๋ถ์ ๋ํด ๋ ๊ฐ์ ๋์ ์์ฒญ์ด ์์ผ๋ฉด ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ผ ์ ์์ง๋ง ๋ธ๋ผ์ฐ์ ๋ ์ ํ๋ ์์ ๋์ ์์ฒญ(๋ธ๋ผ์ฐ์ ๋ฐ ๊ตฌ์ฑ์ ๋ฐ๋ผ ์ฝ 5๊ฐ ์ ๋)๋ง ์ด ์ ์๋ค๋ ์ ์ ์ผ๋์ ๋์ญ์์ค. ์ธ ๊ฐ์ js ํ์ผ์ ๋ก๋ํ๋ ๊ฒ์ด์ง๋ง @jashkenas ๊ฐ ๋ ๋ฒ ์ด์ ์ง์ ํ๋ฏ์ด ์ด๋ฏธ์ง ๋๋ CSS ํ์ผ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์์ฐ์ด ์๋ ๊ฒฝ์ฐ ๋ฌธ์ ์ ๋๋ค.
@jashkenas-
๋ด๊ฐ ์น ๊ฐ๋ฐ์์ด๊ณ ๋ง์ JavaScript๊ฐ ํฌํจ๋ ํ์ด์ง๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? LABjs๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์๊ตฌ ์คํฌ๋ฆฝํธ๋ฅผ ํ๋์ ํ์ผ์ ์ฐ๊ฒฐํ๊ณ ํ๋ฐ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค๋ฅธ ํ์ผ์ ์ฐ๊ฒฐํ๊ณ <script defer="true">๋ฅผ ์ฌ์ฉํ์ฌ body ํ๊ทธ ๋งจ ์๋์ ๋ ๋ค ๋ก๋ํ์๊ฒ ์ต๋๊น?
TL;DR: ๋ ๋ค
์ฒซ์งธ, ์น์ ๋ง์ ์ฌ์ดํธ๊ฐ CMS๋ก ์กฐํฉ๋ฉ๋๋ค. ์ฆ, ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ ๋ธ๋ก์ด ํ์ด์ง ์ ์ฒด์ ํฉ์ด์ ธ ์๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ฉฐ "๋ชจ๋ ์ฝ๋๋ฅผ ํ๋์ ํ์ผ๋ก ์ด๋"์ด๋ผ๊ณ ๋งํ๋ ๊ฒ๋ง์ผ๋ก๋ ์ ์ง ๊ด๋ฆฌ ์ธก๋ฉด์์ ํด๊ฒฐํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ๋ฐ๋ผ์ _๋๋ถ๋ถ์_ ์ฌ์ดํธ๊ฐ ๋ค๋ฅธ ์ธ๋ถ ์คํฌ๋ฆฝํธ๊ฐ ๋ก๋ ๋ฐ ์คํ๋ ํ ์คํํ "์ธ๋ผ์ธ ์ฝ๋" ์์ด๋ ๋ฒ์ด๋ ์ ์๋ค๋ ์ ์ ๋ ๊ธฐ๊ปํด์ผ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋์งธ, ๋ค์ํ ๋ธ๋ผ์ฐ์ ์์ defer
๊ฐ DOMContentLoaded
์ ๋ํด ๋ค๋ฅด๊ฒ ์๋ํ๋ค๋ ๊ฒ์ ์ฆ๋ช
ํ์ต๋๋ค. ์ผ๋ถ ๋ธ๋ผ์ฐ์ ์์๋ ์คํฌ๋ฆฝํธ๊ฐ DOM ์ค๋น๋ณด๋ค ๋จผ์ ์คํ๋๊ณ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์์๋ DOM ์ค๋น ์ดํ์ ์คํ๋ฉ๋๋ค. DOM ์ค๋น ์ ํ์ ๋ฐ์ํ๋ ์คํฌ๋ฆฝํธ์ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ defer
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ํนํ๋ ์คํด์ ํผ๋์ด ๋ง์ ๋ฏผ๊ฐํ ๋ถ๋ถ์ด๋ผ ๊ธ์ธ "๋จ์ํ ํด๋ฒ์ด ์๋๋ค"๋ผ๋ ๋ง์ด ๋์ค๋ ๊ฒ ์ฌ์ค์ด๋ค. ํจ์ฌ ๋ ๋ง์ ์๊ฐ์ด ํ์ํฉ๋๋ค.
์
์งธ, ๋ด๊ฐ ์ฌ์ฉํ๋ ์์ ์ ๋งํฌ ์
์ ๋ณ๊ฒฝ, ์ฌ์ดํธ์ ๋ง์์ ๋ํ ์๊ฐ $LAB.script()
๋์ <script>
์ ์ผ๋ถ ์๋ (๋๋ ์๋) bulid ๊ณผ์ ์ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๊ทธ๋ค์๊ฒ ์ค๋ช
ํ๋ ๊ฒ๋ณด๋ค ๋ ์ฝ๊ฒ ๋ง์ ๊ทธ๋ค์ ์ฌ๊ธฐ๋ ์ฌ๋. ํนํ ํด๋น ์ฌ์ดํธ๊ฐ ๊ณต์ ํธ์คํ
(๋๋ถ๋ถ์ ์น์ด ์์)์ ์๊ณ ์๋ฒ์ ๋ง์ ๋ถ๋ถ์ ์ค์ ๋ก ์ ์ดํ์ง ์๋ ๊ฒฝ์ฐ ์ฝ๋ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ์ฑ์ด ์์ค๋์ง ์๋๋ก ๋น๋ ํ๋ก์ธ์ค๋ฅผ ํ์
ํ๋๋ก ์์ฒญํ๋ ๊ฒ์... ๊ธ์์. .. ์ฌ์ํ์ง ์์.
์ด๋ฌํ ๊ฒ๋ค์ ๊ทน๋ณตํ ์ ์์๊น์? ๋ค. ๋ฌผ๋ก ๊ทธ๋ค์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ ๋ง์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ ๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋(DOM ์ค๋น๊ฐ ๋ ๊ฒ๊ณผ ๊ฐ์) ์ค์ ๋ก ์ฝ๋๋ฅผ ํ๋ค๊ฒ ์กฐ์ ํด์ผ ํ ์๋ ์์ต๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ์ ๋ฆฌํ๋ ค๋ฉด ์ด ๋ถ์ผ์์ ํ์ ์ ์ธ ๋ ธ๋ ฅ๊ณผ ๋ง์ ์ ๋ฌธ ์ง์๊ณผ ์ด์ ์ ๊ฐ์ง ์ฌ๋์ด ํ์ํฉ๋๋ค.
๋์กฐ์ ์ผ๋ก <script>
ํ๊ทธ ๋์ LABjs์์ "๋น ๋ฅธ ์น๋ฆฌ"๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์๊ฐํด์ผ ํ ๊ฒ์ด ๊ฑฐ์ ์์ต๋๋ค( document.write()
์ ์ธ). ๋๋ถ๋ถ์ ๊ฒฝ์ฐ "๊ทธ๋ฅ ์๋ํฉ๋๋ค". ๊ทธ๋ฆฌ๊ณ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํ์ด์ง ๋ก๋ ์๋๊ฐ ์ฆ์ ์ฆ๊ฐํฉ๋๋ค. ๋๋ถ๋ถ์ ์ฌ์ดํธ์์ ์ด๋ ํฐ ์น๋ฆฌ์
๋๋ค.
๊ทธ๋์, ๊ทํ์ ์ง๋ฌธ์ ๋ตํ๊ธฐ ์ํด, ์ ๊ฐ ์ ์ ๋งํ๋ฏ์ด, ๋ ๊ฐ์ง ๋ชจ๋ ๋ฅผ ํ๋ผ๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ๋จผ์ LABjs์ ๋๋กญํ๊ณ , ์ฆ๊ฐ์ ์ธ ์๋ ์ฆ๊ฐ๋ฅผ ๋ณด์ญ์์ค. ์ด์ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ฌ 15๊ฐ ํ์ผ์์ 2๊ฐ ํ์ผ(1๊ฐ ํ์ผ์ ๋ฐ๋ก ์ชผ๊ฐ์ง)๋ก ์ด๋ํ๋ ์ด์ ์ ๊ฐ๋ ฅํ๊ฒ ๊ณ ๋ คํ์ญ์์ค. ๊ทธ๋ ๊ฒ ํ ๋(๋ด๊ฐ ๋งํ๋ฏ์ด ๋๋ถ๋ถ์ ๊ทธ๋ ๊ฒ ํ์ง ์์ ๊ฒ์
๋๋ค) ๊ทธ๋ ๊ฒ ํ๋ฉด ์ ๋ง ์ํ๋ฉด LABjs๋ฅผ ๋ฒ๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ํด๋ ์์ต๋๋ค(๋ชจ๋ฐ์ผ์์๋ ์๊ณ ์บ์๊ฐ ์ ๋จ). ๋ ํ์ผ ์ฒญํฌ๋ฅผ ๊ณ์ ์ ๋ก๋ํ๊ณ defer
์ธํด ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์์ด ๋ก๋๋ฉ๋๋ค.
๋ํ LABjs๊ฐ ์ด๋ฏธ ์์ผ๋ฉด ๋์ค์ "๊ฒ์ผ๋ฅธ/์ฃผ๋ฌธํ ๋ก๋"ํ ์ ์๋ ์ฝ๋๋ฅผ ํ์ ํ๊ธฐ ์์ํ๋ 3๋จ๊ณ๋ฅผ ์ํํ๋ ๊ฒ์ด ์ด๋ฆฌ์๊ฒ ๊ฐ๋จํฉ๋๋ค. ์คํฌ๋ฆฝํธ ๋ก๋ ์์ด๋ ํ ์ ์์ต๋๋ค. LABjs๊ฐ ์ด๋ฏธ ์๊ณ ์น์ํ๋ค๋ ๊ฒ์ ํด๋น ์ฃผ๋ฌธํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ํ ๊ฑฑ์ ํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
@rkh--
(ํนํ Apache์์ Keep-Alive ์ค์ ์ ํ ๊ธํ์ฌ) ์ฌ๋ฌ ๋ณ๋ ฌ ์์ฒญ์ด ์ด๋ป๊ฒ ์ํฅ์ ๋ฐ์๋์ง ๋ณด์ฌ์ฃผ์์ต๋๋ค(Keep-Alive๊ฐ ์์ ๋ ๊ธ์ ์ ์ผ๋ก). ์ ๋ ์ด ๋ถ์ผ์ ์ ๋ฌธ๊ฐ๊ฐ ์๋๋ฏ๋ก ์๋ ๋ฐฉ์์ ๋ํ ์ ํํ ์ธ๋ถ ์ฌํญ์ ๋ ผํ๋ ๊ฒ์ ์ ๋ชซ์ ๋๋ค. Keep-Alive๊ฐ ์์ ๋ ์์ฒญ #2์ ํ์ด๋ฐ์ด ์์ฒญ #1์ ํ์ด๋ฐ๋ณด๋ค ์ ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์ ์๋ฒ๊ฐ ๊ทธ๋ ๊ฒ ํ ๋ฐฉ๋ฒ์ ๋ถ๋ถ์ ์ผ๋ก๋ง ์ถ์ธกํ ์ ์์ ๋ฟ์ ๋๋ค.
์ฐ๊ฒฐ ์ ์ง๊ฐ ์๋ ๋ ๊ฐ์ ํ์ ์์ฒญ์ด ์๋ ๋ถํ ๋ณธ๋ฌธ์ ๋จ์ผ ์์ฒญ๋ณด๋ค ์ฌ์ ํ ๋น์๋๋ค.
๋๋ ๋ ๋ฒ์งธ ์์ฒญ์ด ๋ฌด๋ฃ๋ผ๊ณ ์ฃผ์ฅํ ์ ์ด ์์ต๋๋ค. ๋๋ ๋ ๋ฒ์งธ ์์ฒญ์ด ์ฒซ ๋ฒ์งธ ์์ฒญ๋งํผ ๋น์ธ์ง ์๋ค๊ณ ์ฃผ์ฅํ๋ค. ๋ฐ๋ผ์ ์ ์ด๋ ํ๋์ ์์ฒญ์ด ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค๊ณ ๊ฐ์ ํ ๋ ๋ ๋ฒ์งธ ์์ฒญ์ ๋ณ๋ ฌ๋ก ๊ฐ๋ ๊ฒ์ ์ค๋ฒํค๋ ๋๋ ์๊ฐ ๋น์ฉ ์ธก๋ฉด์์ ๋์ผํ ์๋ฒ์ ๋ํด ์์ ํ ๋ ๋ฆฝ์ ์ธ ๋ ์ฐ๊ฒฐ์ ๊ฐ๋ ๊ฒ๊ณผ ๋์ผํ์ง ์์ต๋๋ค.
์์๋๋ก ์์ฒญ #1์ ์๋น์ค์ ๋ํ X์ด๊ณ #2๋ Keep-Alive์ ๋ณํํ์ฌ 0.7X์ธ ๊ฒ ๊ฐ์์ต๋๋ค. ์๋ฒ๊ฐ ๋ ๋ฒ์งธ ์์ฒญ์ ์ฒ๋ฆฌํ ๋ ๊ธฐ์กด ์ฐ๊ฒฐ ์ค๋ฒํค๋ ์ค ์ผ๋ถ๋ฅผ ํ์ฉํ ์ ์์ด ๋น์ฉ์ด ์กฐ๊ธ ๋ ์ ๋ ดํด์ง๋ค๊ณ ์ค๋ช ํ์ต๋๋ค. ์ฐ๊ฒฐ ์ ์ง๊ฐ ํด์ ๋ ์ํ์์ ๋ ๋ฒ์งธ ์์ฒญ์๋ ์ธก์ ๊ฐ๋ฅํ ๊ฐ์๊ฐ ์์์ต๋๋ค.
์ด ๋ชจ๋ ํ ๋ก ์ ์ฌ๊ฐํ๊ฒ ๊น์ ํ ๋ผ ๊ตฌ๋ฉ์ ๋๋ค. ์ ๋ ์๋ฒ ์ ๋ฌธ๊ฐ๊ฐ ์๋๋๋ค. ๊ทธ๋ด ํ์ ์์ด ๋๋ ์ด ์ ํํ ์ฃผ์ ์ ๋ํด ์ค์ ๋ก ๋ณด์๊ณ ํ ์คํธ๋ฅผ ๋ง๋ค์๋ค๋ ๊ฒ๋ง ์ค๋ช ํ ์ ์์ต๋๋ค... ๋จ์ผ 100k ํ์ผ ๋ก๋ ์๊ฐ๊ณผ ๋์ผํ ํ์ผ์ ๋ ์ ๋ฐ์ ๋ณ๋ ฌ๋ก ๋ก๋ํ๋ ๊ฒ์ ํ ์คํธํ ์ ์์ต๋๊น? ๋ ๋ฒ์งธ ํ ์คํธ๋ ์ธก์ ํ ์ ์์ต๋๊น? ๊ธ์ก์ด ๋ ๋น ๋ฆ ๋๋ค. ๋ด๊ฐ ๋งํ๋ฏ์ด, ๋๋ ์ฒญํฌ ์ธ ๋ณ๋ ฌ ํ ์คํธ์์ 15-25% ๋ ๋น ๋ฅธ ๊ฒ์ ๋ณด์์ต๋๋ค. ์ด๋ป๊ฒ ๊ทธ๋ ๊ฒ ํ๊ณ ๋์ฐํ "OMG HTTP RESPONSE OVERHEAD IS TERRIBLE" ํจ๊ณผ๋ฅผ ์ด๋ป๊ฒ๋ ๋ฐ๋ผ์ก์๊ณ ์ฌ์ ํ ๋ ๊ฐ์ ๋ณ๋ ฌ ๋ก๋ฉ์ ์ด์ ์ ์ป์์ต๋๋ค. ์ ๋ ๊ณผํ์ ์ผ๋ก ์ฆ๋ช ํ ์๊ฒฉ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๊ด์ฐฐ์ ์ํด ํ์คํ ์ด๋ฃจ์ด์ก์ต๋๋ค.
๋ง์์ฌ, ๋นจ๋ฆฌ ํ์. ์ฝ๊ธฐ๋ฅผ ๋ง์น๊ณ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํ๋ฉด ๋๊ธ์ด 9๊ฐ ๋ ์์ต๋๋ค.
๋์์ด ํ์ํด ๋๋ ์ด ์ค๋ ๋์์ _๋ณด์ผ๋ฌํ๋ ์ดํธ HTML ํ์ผ์ ๊ฐ์ฅ ์ ํฉํ ๊ฒ_์ ๋ํด ๋ ผ์ํ๋ ๊ฒ๋ถํฐ _์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ค๋ค์ดํฌ ์ค์ผ_์ธ์ง ์ฌ๋ถ์ ๋ํด ๋ ผ์ํ๋ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ํํ ์์น๋ฅผ ์ฐพ์ผ๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค.
@getify , ๋น์ ์ ํ์คํ LABjs๋ฅผ ๋ฐฉ์ดํ๊ณ ์ค๋ ๋์์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ํ ํน์ ๋นํ์ ์๋ตํด์ผ ํ์ง๋ง (@jashkenas ์ ์ธ) LABjs๋ฅผ ๋นํํ๋ ์ฌ๋๋ค์ ๊ทธ๊ฒ์ด ์์ฉ๊ตฌ์ ๋ํ ์ต์์ ์๋ฃจ์
์ด ์๋๋ผ๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. script[defer]
๋ณด๋ค๋ ๋ ๊ฑฐ์ ํ์ด์ง๋ฅผ LABjs๋ก ๋ณํํ๋ ๊ฒ์ด ๋ ์ฝ๋ค๊ณ ์ฃผ์ฅํ๋๋ฐ ๊ทธ๊ฒ์ด ์ฌ์ค์ผ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์ด๋ป๊ฒ ์์ฉ๊ตฌ HTML ํ์ผ(์ ์์ ์ฒ์๋ถํฐ ์์)์ ์ ์ฉ๋ฉ๋๊น?
๋น์ ์ ๊ทธ๊ฒ์ด ๋ฉ์ง ๋น๋ ํ๋ก์ธ์ค๊ฐ ์๋ ์ฌ๋๋ค์ ์ํด ์ค๊ณ๋์๋ค๊ณ ๋งํ์ง๋ง, ๋น์ ์ ๋ํ ์ฐ๊ฒฐ, ๋์ผํ ํฌ๊ธฐ์ ์ฒญํฌ๋ก ๋ถํ ๋ฐ ๋ณ๋ ฌ ๋ก๋ฉ์ ์นํธํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋น๋ ์คํฌ๋ฆฝํธ์ ์์ ์ด ์๋๊ฐ์? ๋ค์ ๋งํ์ง๋ง, ์ฌ์ฉ์์๊ฒ ์ง๋ฅํ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋๋ก ์ค๊ณ๋ ์์ฉ๊ตฌ์ ๋ํ ์๋ชป๋ ์ ํ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌ์ฉ์๊ฐ 20-30% ์๋ ์ฆ๊ฐ๋ฅผ ์ํ๋ฉด ์์ฉ๊ตฌ๊ฐ ์ ๊ณตํ๋ ๊ฒ๋ณด๋ค ๋์ค์ ์ ๊ทธ๋ ์ด๋ํ๋๋ก ์ ํํ ์ ์์ง๋ง ์ด๋ ์ฌ์ํ ์์ ์ด ์๋๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ๋งํ์ง๋ง ์ฌ๋ฌ๋ถ์ด ์ผ๋ฐ์ ์ธ ์ฃผ์ ("์คํฌ๋ฆฝํธ ๋ก๋: ๊ท์คํ ๋๊ตฌ ๋๋ ๋ฑ ๊ธฐ๋ฆ?")๋ก ๊ณ์ ์งํํ๊ณ ์ถ๋ค๋ฉด ๊ธฐ๊บผ์ด ํ์ฝ์ ๋ง๋ค๊ฒ ์ต๋๋ค.
@getify : ๋ ๋ฒ์งธ ๋ฐ ์ธ ๋ฒ์งธ ์ฐ๊ฒฐ์ด ์ฒซ ๋ฒ์งธ ์ฐ๊ฒฐ๋ณด๋ค ๋ ๋นจ๋ฆฌ ์ด๋ฆด ์ ์๋ค๋ ๋ฐ ๋์ํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์ฐ๊ฒฐ์ DNS๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ง๋ ์ฒซ ๋ฒ์งธ ํจํท์ ์๋ฒ๋ก ๋ผ์ฐํ ํ๋ ๊ฒ์ด ๋๋จธ์ง๋ฅผ ๋์ผํ ๊ฒฝ๋ก๋ก ๋ผ์ฐํ ํ๋ ๊ฒ๋ณด๋ค ์ฝ๊ฐ ๋๋ฆฝ๋๋ค. HTTPS์์ SSL ์ธ์ ์บ์๋ ํ์ ์ฐ๊ฒฐ์ ๋ง์ ๋์์ด ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ๋๋ ์ด ์ํฉ์์ Keep-Alive์ ๊ด๋ จ์ฑ์ ๋ณด์ง ๋ชปํฉ๋๋ค. ๋์ผํ ์ฐ๊ฒฐ์ ๋ํ ํ์ _requests_๋ Keep-Alive๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋น ๋ฅด๊ฒ ์์๋์ง๋ง ์ด๋ฌํ ์์ฒญ์ ์ฐ๊ฒฐ ๋ด์์ ์ง๋ ฌ์ ๋๋ค.
์ด์ ๊ฑฐ์ ๋๋ฌ์ต๋๋ค. ์ด์ ๋ง ์คํฌ๋ฆฝํธ ๋ก๋์ ๊ด๋ จํ์ฌ "๋ฏธ์ณค๊ณ ๋ ์ด์ ์ฐธ์ง ์์ ๊ฒ"์ด๋ผ๋ ์๊ฐ์ ๋๋ฌํ์ต๋๋ค.
๊ทธ๋ ๊ธด ํ์ง๋ง, ํ์ผ ์ถ์ ๋ฅผ ์ํ ์ด ์ค๋ ๋๋ ์ค์ ๋ก ์๋นํ ์์ฐ์ ์ด์์ต๋๋ค. LABjs๊ฐ ๋ถ์ดํ๊ณ ๋ฌด๋ฅํ ์น ์ฌ์ดํธ์ ๋ํ ์ฃผ์ฅ์ ํผ์น๊ณ ์ค์ ๋ก ์ฌ์ดํธ๋ฅผ ๋น ๋ฅด๊ฒ ๋ก๋ํ๋ ค๋ ์ฌ๋๋ค์ ํ๋ก ๋ด๋ฒ๋ ค ๋๋ฉด ํฐ ์ง์ ์ ๋๋ค.
์น๊ตฌ, ์ง์
@savetheclocktower--
๊ณต์ ํ ์ง๋ฌธ.
๋๋ LABjs(๋๋ ๋ชจ๋ ์คํฌ๋ฆฝํธ ๋ก๋)๊ฐ h5bp์ ํฌํจ๋ ๊ฒ์ ๊ฐ๋ ฅํ๊ฒ ์นํธํ๋ ์ด ์ค๋ ๋์ ์ฐธ์ฌํ๊ธฐ ์์ํ์ง ์์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์ ์ฉํ๋ค๊ณ ์๊ฐํ์ง๋ง(์๋ ์ฐธ์กฐ), ์ ์ด ๋ ๊นฌ ๊ฒ์ ๋ด ์ฃผ์ ๊ด์ฌ์ฌ๊ฐ ์๋์์ต๋๋ค. ๋ถ๋ช ํ ์ด ์ค๋ ๋๋ "์คํฌ๋ฆฝํธ ๋ก๋ฉ"์ธ ๋ชจ๋ ๊ฒ์ ๋ํ ์ ๋ฉด์ ์ธ ๊ณต๊ฒฉ์ผ๋ก ๋ณํ์ต๋๋ค. ๊ทธ๊ฒ์ ๋ถ๋ช ํ ๋ด๊ฐ ์กฐ๊ธ ๋ ์ ๊ฒฝ ์ฐ๋ ๊ฒ์ ๋๋ค.
๋น์ ์ ๊ทธ๊ฒ์ด ๋ฉ์ง ๋น๋ ํ๋ก์ธ์ค๊ฐ ์๋ ์ฌ๋๋ค์ ์ํด ์ค๊ณ๋์๋ค๊ณ ๋งํ์ง๋ง, ๋น์ ์ ๋ํ ์ฐ๊ฒฐ, ๋์ผํ ํฌ๊ธฐ์ ์ฒญํฌ๋ก ๋ถํ ๋ฐ ๋ณ๋ ฌ ๋ก๋ฉ์ ์นํธํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋น๋ ์คํฌ๋ฆฝํธ์ ์์ ์ด ์๋๊ฐ์?
์ ๋ ๋จผ์ ์์ญ ๊ฐ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ๋ชจ๋ LABjs์ ๊ฐ์ ๋ณ๋ ฌ ์คํฌ๋ฆฝํธ ๋ก๋๋ก ์ด๋ํ๋ ๊ฒ์ ์ง์งํฉ๋๋ค. ์ด๊ฒ์ ๋งํฌ์ ์ ์กฐ์ ํ๋ ๋ฅ๋ ฅ ์ด์์ ํ์๋ก ํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๊ฒ์ mom&pop ์ฌ์ดํธ์ ์๋ํ๋ node.js ๊ธฐ๋ฐ ๋น๋ ์์คํ ์ ์ฌ์ฉํ๋๋ก ์ง์ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ์ฝ๊ณ ๋ ์ํ์ ์ธ ๋จ๊ณ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ผ ๋น๋๋ฅผ ํ ์ ์๋ ์ฌ๋๋ค์ ์ํด LABjs๊ฐ ์ด๋ฌํ ์ฒญํฌ๋ฅผ ๋ณ๋ ฌ๋ก ๋ก๋ํ๋ ๋ฐ ๋์์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ์ด์ ์ด ์๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. ์ฒญํฌ๊ฐ ์ด๋ค ์์ผ๋ก๋ ์ ์ฉํ๋ค๋ ๋ฐ ๋์ํ์ง ์๋๋ค๋ฉด defer
๋ณด๋ค LABjs๋ฅผ ์ฌ์ฉํ ์ด์ ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฒญํฌ๊ฐ _์ ์ฉํ_ ์ด์ ๋ฅผ ์ ์ ์๋ค๋ฉด ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ ํด๋น ํ๋ก์ธ์ค์์ _๋์์ ์ค ์ ์์ต๋๋ค_ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
๋ค์ ๋งํ์ง๋ง, ์ฌ์ฉ์์๊ฒ ์ง๋ฅํ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํ๋๋ก ์ค๊ณ๋ ์์ฉ๊ตฌ์ ๋ํ ์๋ชป๋ ์ ํ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์คํฌ๋ฆฝํธ ๋ก๋(ํนํ LABjs์ ๊ฐ์ด ์คํฌ๋ฆฝํธ ํ๊ทธ์ script()
ํธ์ถ ๊ฐ์ ์ผ๋์ผ ๋งคํ์ ๊ฐ๋๋ก ์ค๊ณ๋)๊ฐ ์์ฉ๊ตฌ์์ ์ด์ ์ด ์๋ค๊ณ ์๊ฐํ๋ ์ ์ผํ ์ด์ ๋ ์์ฉ๊ตฌ์์ , ํ๊ทธ์ ๊ฐ์ ๊ฒ์ ํ๋์ ์ธ์คํด์ค๋ฅผ ์์ฃผ ๋ณผ ์ ์์ผ๋ฉฐ ํ์ด์ง๋ฅผ ๊ตฌ์ถํ๋ ๊ฒฝํฅ์ ํ์ํ ๋งํผ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๋ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ์์ฉ๊ตฌ์ ์ฑ๋ฅ์ด ์ข์ง ์์ ํจํด(์คํฌ๋ฆฝํธ ํ๊ทธ)์ด ์์ผ๋ฉด ์ฌ๋๋ค์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ์์ญ ๋ฒ ๋ณต์ ํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ํ๊ท ์ ์ผ๋ก $LAB.script()
ํธ์ถ์ ์ฌ๋ฌ ๋ฒ ๋ณต์ ํ๋ฉด ์ฑ๋ฅ์ด ์์ ๋งํผ ๋์์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
๊ทธ๊ฒ์ด ๋ด๊ฐ ์ด ์ค๋ ๋์ ์ฐธ์ฌํ๊ธฐ ์์ํ ์ ์ผํ ์ด์ ์ ๋๋ค. ๋ด๊ฐ @paulirish ์ "๋งน๋ชฉ์ ์ธ ๋ฏฟ์" ๋๊ธ์ ์ฌ๊ธฐ ์ค๋ ๋์์ ๋ฌธ์ ๋ก
๊ทธ๋ ๊ตฐ์.
๋๋ ์ด ๋ ผ์๊ฐ ์คํฌ๋ฆฝํธ ๋ก๋๊ฐ h5bp ํ๋ก์ ํธ์ ์ ํฉํ์ง ์ฌ๋ถ๋ฅผ ์ง๋์ณ ๊ฐ๋ค๋ ๊ฒ์ด ๋ถ๋ช ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด ์ฃผ์ ๋ ํ์ํ ๊ฐ์น๊ฐ ์์ผ๋ฏ๋ก ์ข์ต๋๋ค.
์ด์จ๋ ์ ๋ ํ ์คํธ ๊ฒฐ๊ณผ์ ํจ๊ป ์ฌํ ๊ฐ๋ฅํ ํ ์คํธ ์ผ์ด์ค์ ๋งค์ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
๋ํ @defer
์ ๋ํ ์ฌ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ํจ๊ป ์ ๊ณตํ๋ ์ผ๋ถ ๋ถ๊ท์นํ ๋์์ ๋ณดํธํ๊ธฐ ์ํด ์์ฑ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ ํ๋์ ๋ฌธ์ํ๋์ด์ผ ํฉ๋๋ค. ์ค๋น๊ฐ ๋๋ฉด MDC๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๊ฒ์ ๋์๋๋ฆด ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ , ๋ค์ํ ์ฐ๊ฒฐ ์ ํ ๋ฐ ๋คํธ์ํฌ ํจ๊ณผ๋ฅผ ์บก์ฒํ๋ ์ด๋ฌํ ๋์์ ๋ํ ์ง์ ์ ์ธ ๋ฌธ์๊ฐ ํ์ํฉ๋๋ค. ํ ์คํธ ์ฅ๋น๊ฐ cuzillion ๋๋ assetrace๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง ํ์คํ์ง ์์ง๋ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
https://github.com/paulirish/lazyweb-requests/issues/42์ ๋ํ ๊ด์ฌ์ ๋ชจ์ผ๊ธฐ ์ํด ํฐ์ผ์ ์ค์ ํ์ต๋๋ค.
webperf ์ฐ๊ตฌ ๋ฐ ์ฆ๊ฑฐ ๋ฌธ์ํ๋ผ๋ _superfun_ ์์ ์ ๊ด์ฌ์ด ์๋ค๋ฉด ์ ์ ํจ๊ป ํ์ญ์์ค.
์ฌ๋ฌ๋ถ, ์ด ์ค๋ ๋๋ฅผ ๋ซ์๋ค๊ณ ์๊ฐํฉ์๋ค.
@jrburke ๊ฐ ๊ทธ์ ์๊ฒฌ์์ ์ค๋ช
ํ ๊ฒ์ฒ๋ผ ์ง์ฐ ๋ก๋ฉ์ AMD ๋ชจ๋์ ํต์ฌ ์ด์ ์ด ์๋๋๋ค. ๋ด๊ฐ AMD ๋ชจ๋์ ์ต๋ํ ์ฌ์ฉํ๊ธฐ๋ก ์ ํํ ์ฃผ๋ ์ด์ ๋ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์์ค ํ์ผ์ ์๊ณ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํฉ๋๋ค. ๊ฐ๋ฐ ๋ฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ์ฝ์ต๋๋ค. ๊ฐ๋ฐ ์ค์ CSS @import
์ฌ์ฉํ๊ณ ์คํ์ผ์ํธ๋ฅผ ๊ฒฐํฉํ๊ธฐ ์ํด ์๋ํ๋ ๋น๋๋ฅผ ์คํํ๋ ๊ฒ๋ ๋๊ท๋ชจ ํ๋ก์ ํธ์ ๊ถ์ฅ๋๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์
๋๋ค...
์๋ ์ ์ด ์ด ๊ฒ์๋ฌผ์ด ๋ค์ ์ฃผ์ ์ ์ ํฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค . ์ฑ๋ฅ ๋๊ทธ๋ง -
๊ทธ๋ฆฌ๊ณ ์ ๋ @SlexAxton ๊ณผ ํจ๊ป RequireJS ์ตํฐ๋ง์ด์ Ant ์์ ) ๋์ RequireJS ์ตํฐ๋ง์ด์ ๋ฅผ ์คํํ๋ ์ ์ค์ ์ ์ถ๊ฐํ๋ ๊ฒ์ผ ์ ์์ต๋๋ค. ์ด๋ ๊ฝค ๋ฉ์ง๊ณ ๊ตฌํํ๊ธฐ ์ด๋ ต์ง ์์ ๊ฒ์ ๋๋ค.
์ฌ๋ฌ๋ถ, ์ด ์ค๋ ๋๋ฅผ ๋ซ์๋ค๊ณ ์๊ฐํฉ์๋ค.
@paulirish AMD ์ง์์ ํฌํจํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์ด๋์์ ๋ ผ์ํด์ผ ํ ๊น์?
@benatkin ์ ํฐ์ผ์ ์ฝ๋๋ค ํ.
@paulirish ์๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค. @jrburke ์์ํ ํ ๋ก ์ ๊ณ์ํ๋ ค๋ฉด ์ ํฐ์ผ์ ์ด์ด ์ฃผ์๊ฒ ์ต๋๊น? ์๊ฒฌ์ ์ถ๊ฐํ ์ ์์ ๊ฒ ๊ฐ์ง๋ง AMD ์ง์ ์ฌ๋ก๋ฅผ ์ฌ๋ฌ๋ถ๋งํผ ์ ์ ๋ฆฌํ ์๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๋ฏธ์๊ณ ์ ์ตํ ์ ๋ณด. ๊ณ ๋ง์ ์๋ค์.
๋๊ตฐ๊ฐ ์๋ก์ด ์คํฌ๋ฆฝํธ ๋ก๋ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ณ "Issue28"์ด๋ผ๊ณ ์ด๋ฆ์ ์ง์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. :)
๊ฐ์ฅ ๊ด๋ฒ์ํ ํธํ์ฑ์ ์ํด ์คํฌ๋ฆฝํธ๋ฅผ ๋งจ ์๋์ ๋๊ณ , ์ถ์ํ๊ณ , gzipํ๋ฉด ๋น ๋ฅธ ์ฑ๋ฅ์ ์ป์ ์ ์์ง๋ง ์ฐ๊ธฐํ์ง ๋ง์ญ์์ค. ์ ์ด๋ ๋ช ๋ ๋์ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ด ์ผ๊ด๋ ๋๊น์ง๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
๋ณ๋ชฉ ํ์์ ๊ด๊ณ , ๋๋ฌด ๋ง์ ์๋ฐ์คํฌ๋ฆฝํธ, ๋ถํ๋ ค์ง HTML, ๋๋ฌด ๋ง์ CSS, ๋๋ฌด ๋ง์ iframe, ๋๋ฌด ๋ง์ ์์ฒญ, ์๋ฒ ๋๊ธฐ ์๊ฐ, ๋นํจ์จ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐ์ํ ์ ์์ต๋๋ค. ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋๋ฌด ๋ง์ ์๋ฐ ์คํฌ๋ฆฝํธ๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง๋ง ๊ทธ ์ด์์ผ๋ก ๋๋ถ๋ถ ๋ถํ๋ ค์ง HTML, ์๋ชป๋ HTML, ๋๋ฌด ๋ง์ CSS ๋ฐ ๋นํจ์จ์ ์ธ ์๋ฐ ์คํฌ๋ฆฝํธ์ ๊ฐ์ ๋ค๋ฅธ ๋ง์ ๋ฌธ์ ๋ ์๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. Twitter๋ ๋ ๊ฐ์ง ๋ฒ์ ์ jQuery์ ๋ ๊ฐ์ onscroll ํธ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋ฅธ์ชฝ ์ด onscroll์ด ํ๋ ํ์์ ์ ๋ฐํฉ๋๋ค.
์ค์ํ ๊ฒ์ ์์ ์ด ๋ฌด์์ ํ๊ณ ์๋์ง ์๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํผํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. jQuery ๋๋ ๋ฐ์ค๊ณผ ๊ฐ์ ๊ฒ์ด ํ์ํ์ง ์์ผ๋ฏ๋ก ์คํฌ๋ฆฝํธ๊ฐ ํจ์ฌ ์์ต๋๋ค. ๊นจ๋ํ๊ณ ๊ฐ๋จํ๋ฉฐ ์ ํจํ HTML ๋ฐ CSS๋ฅผ ์์ฑํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํ์ด์ง๊ฐ ๋ ๋นจ๋ฆฌ ๋ก๋๋๊ณ ์ฑ์ด ๋ณ๊ฒฝ ์ธก๋ฉด์์ ๋ ์ ์ฐํด์ง๋ฉฐ SEO๊ฐ ํฅ์๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์คํฌ๋ฆฝํธ ๋ก๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ๋นํ ๋ณต์ก์ฑ๊ณผ ์ค๋ฒํค๋๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
https://github.com/BroDotJS/AssetRage
ํ! ๋๋ ํด๋ฝ์ ๋ซ๊ณ ์ค์ ๋ซ์ต๋๋ค.
๋ฌด์จ ์ค๋ ๋ ... ์์ฐ.
Imo, ํ ๋ก ์ ์น ๊ฐ๋ฐ์๋ฅผ ์ํ ์ถ๋ฐ์ ์ผ๋ก ์๋๋ h5bp์ ๋งฅ๋ฝ์์ ์์๋์์ต๋๋ค.
๋ฐ๋ผ์ h5bp๋ฅผ ์ฌ์ฉํ๋ webdev๋ ์ค์ ๋ก ๊นจ๋ํ HTML, ๊นจ๋ํ CSS, ์ข์ .htaccess ๋ฑ์ ๊ฐ๊ฒ ๋ ๊ฒ์ด๋ฉฐ ๋๋ฌด ๋ง์ ์ด๋ฏธ์ง, ๋นํจ์จ์ ์ธ JS, ๋ง์ ํํธ์๋ ์ 3์ JS ๋ฑ์ผ๋ก ์ธํด _์ด์ฉ๋ฉด_ _๊ทธ๋ ์ง ์์ ์๋ ์์ต๋๋ค. ์น ๊ฐ๋ฐ์๊ฐ ๊ณ ์ฑ๋ฅ h5bp๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ์ ํํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ฑ๋ฅ์ ๊ด์ฌ์ด ์๊ธฐ ๋๋ฌธ์ ํ์ด์ง๋ก ์ด๋ํ๋ ๋น h5bp ํญ๋ชฉ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ผ ๊ฒ์
๋๋ค.
์ค๋ ๋์์, ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๋งฅ๋ฝ์์ ๋ถํํ๋ ์ต์ข
๊ฒฐ๋ก ์ ๋ด๋ฆฌ๊ธฐ์ ์ถฉ๋ถํ ์ฆ๊ฑฐ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ๋ Paul๊ณผ ํจ๊ป ์ฐ๊ตฌ๋ฅผ ์งํํ๊ณ ๋ฌธ์ํํด์ผ ํ ์ฌํญ์ ๋ฌธ์ํํฉ๋๋ค.
๋๋ฅผ ๋ฐ์ธ๋ก ์ธ์ด ๋ณด์ญ์์ค.
์ฌ์ด๋๋
ธํธ. ์ ๋ AMD์ ๋ํด ์ ์์ง ๋ชปํ๋ฉฐ, ์ธ๋ป ๋ณด๊ธฐ์ ์ ์๊ฒ ์ํ์ ์ด๊ฑฐ๋ ์ ์ด๋ ์ ๊ฐ ์ฝ๊ฒ ์ง์ด๋ค ์ ์๋ ๊ฒ์ ์๋ ๊ฒ ๊ฐ์์ต๋๋ค. ๋๋ ๋๋ถ๋ถ์ '์ผ๋ฐ' ์น ๊ฐ๋ฐ์๊ฐ ๋์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
h5bp์์ ๋ณผ ์ ์๋ ํญ๋ชฉ์ ์ง์
์ฅ๋ฒฝ์ด ๋ฎ์์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฌ์ฉ๋์ง ์๊ณ h5bp์ ํก์๊ฐ ์๋ ๊ฒฝ์ฐ๋ณด๋ค ๋๋ฆด ์ ์์ต๋๋ค.
AMD์ ๊ฐ์ ๊ฒ์ด h5bp์ ์ํ๋์ง ์์ฌ์ค๋ฝ์ต๋๋ค.
๊ฐ๋จํ๊ฒ ์ ์งํ์ธ์.
๊ทธ๋ฆฌ๊ณ ๋ํ๋์ ๋๊ธ....
'์ตํ๋จ์ ์คํฌ๋ฆฝํธ ๋ฃ๊ธฐ' ๋ฐ 'JS ํ์ผ์ ๋จ์ผ ํ์ผ๋ก ์ฐ๊ฒฐ'์ ์๋
๋์ Web Perf ๋ชจ๋ฒ ์ฌ๋ก ๋ชฉ๋ก์์ ์์์ ์์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฌ๋ด ๊ฐ๋ฐ์์ ์ต๊ณ ์ ๋ธ๋๋ ์์ด์ ์๊ฐ ๊ตฌ์ถํ ํ๊ท ์ฌ์ดํธ์ 90% ์ด์์ ์ฌ์ ํ HEAD์ ์ฌ๋ฌ ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ์ ๋ง, ์ ๊ทธ๋?
๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง 9%๋ HEAD์ ํ๋์ ์ฐ๊ฒฐ๋ JS ํ์ผ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ผ๋ถ ์ต๊ณ ์ ์น ์ฑ๋ฅ ๊ฐ๋ฐ์๊ฐ ๋งจ ์๋์ ํ๋์ ์คํฌ๋ฆฝํธ๋ก ๊ตฌ์ถํ _not_ '๋ณดํต' ์ฌ์ดํธ๋ฅผ ๊ฑฐ์ ๋ณผ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์๋ ๋ช ๋
๋์ ๊ณ์ํด์ ์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํฉ๋๋ค.
์ฌ์ดํธ ์์ ์๋ ๋์์ธ๊ณผ ๊ธฐ๋ฅ์ ๊ฐ์ฅ ์ค์ํ๊ฒ ์๊ฐํ๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ์๊ฐ์ ํฌ์ํ๋ ๊ฒ์
๋๋ค.
์์ ๋ฐฉ์, ๋น๋ ์์คํ , ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ... ๊ทธ๊ฒ์ ์ฝ๊ณ , ์์ฃผ ์ฌ์์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ผ์ด๋์ง ์์ ๊ฒ์ ๋๋ค.
HEAD์ JS๋ฅผ ๋จ์ผ ํ์ผ๋ก ๊ฒฐํฉํ๊ณ BODY์ ๋งจ ์๋์ ๋ก๋ํ๋ฉด ์ฌ์ดํธ์ ํ์ด์ง๊ฐ ์์๋๋ ๋ง์ ์ฌ์ดํธ์์ ์์ ํ์ต๋๋ค. ๊ทธ ๋ค์์? ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ํ ์๊ฐ์ด ์์๋์ง ์์ต๋๋ค. ์ฌ๊ฐํ ๋ฆฌํฉํ ๋ง์ด ํ์ํฉ๋๋ค... ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ง์ ๋ถ์กฑ, ํนํ ์๊ฐ ๋ถ์กฑ์ผ๋ก ์ธํด ๋ฐ์ํ์ง ์์ต๋๋ค.
(์ ๋ง๋ค, ์ฐ๋ ๋๊ฐ ๋ซํ๋ค...)
jQuery์ Modernizr์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋น๋์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ๋งํด์ค๋๋ค. ๋๊ฐ ๊ทธ๊ฒ์ ์ฌ์ฉํฉ๋๊น? ์ค, ์ ์ฅ, ๋ ๊ฐ์ jQuery๋ฅผ ์ฌ์ฉํ๊ณ ์์ค ์ฝ๋์๋ ๋ค์์ด ํฌํจ๋ Twitter.com์ ์์ด๋ฒ๋ ธ์ต๋๋ค.
352ํ, 6์ด: ๋ ํ๊ทธ div๊ฐ ํ์๋์ง๋ง ์ด๋ฆฐ ์์๊ฐ ์์ต๋๋ค. ์ค๋ฅ ๋ผ์ธ 350, ์ด 6: ๋ซํ์ง ์์ ์์ ul. ์ค๋ฅ ์ค 330, ์ด 6: ๋ซํ์ง ์์ ์์ ul.
๊ทธ๋ฆฌ๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ์ค๋ฅ๋ฅผ ์์ ํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ ๊ฒ์ ๋ฌธ์ ๋ HTML4๊ฐ ์ค๋ฅ ์์ ๋ฉ์ปค๋์ฆ์ ์ ์ํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋๊ฐ ์ด๋์ ๋ฌด์์ ์๊ณ ์๋์ง๋ฅผ ์๊ฒ ๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ฌผ๋ก HTML5๋ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ ์ํ์ง๋ง ์๊ธ ์ ์ฉ๋์ง๋ ์์ต๋๋ค. ์ฌ์ ํ "์ค๋๋" ๋ธ๋ผ์ฐ์ ๊ฐ ๋ง์ด ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ฅ, ์ฌ๊ธฐ ๋๊ตฐ๊ฐ jQuery ES5 shim์ ๋ณธ ์ ์ด ์์ต๋๊น?
BTW, "h5bp๋ฅผ ์ฌ์ฉํ๋ webdev๊ฐ ์ค์ ๋ก ๊นจ๋ํ HTML์ ๊ฐ์ง ๊ฒ"์ด๋ผ๊ณ aaronpeters์ ์ง์ ์ ์ถ๊ฐํ ๊ฒ์ด ์์ต๋๊น?
@GarrettS ok, ok, "์๋ง๋ _ ๊นจ๋ํ HTML์ ๊ฐ์ง ๊ฒ"์ด๋ผ๊ณ ์ผ์ด์ผ ํ์ต๋๋ค.
:-D ์ฐ๋ฆฌ๋ ํญ์ ํฌ๋งํ ์ ์์ต๋๋ค!
๋๋ ์ฃฝ์ ๋ง์ ์ด๊ธฐ๊ณ ์๋ค๋ ๊ฒ์ ์๋๋ค ... ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ์ด ํฅ๋ฏธ๋ก์ด ํ ๋ก ์ ํ๊ณ ์๋ ๋์์ ํ์ฌ ๋ฒ์ ์ LABjs์๋ ์ค์ ๋ก ์ผ๋ถ ๋ธ๋ผ์ฐ์ ์์ JavaScript๊ฐ ์๋ชป๋ ์์๋ก ์คํ๋๋๋ก ํ๋ ๋ฒ๊ทธ๊ฐ ์์์ต๋๋ค: https: //github.com/getify/LABjs/issues/36
์ค, ์์ด๋ฌ๋.
ํด์ผํ๋ค. ์ ํญํ๋ค. ์ ๊ธฐ. ์์ ํ. [๋ถ์ ์ ]. ์์. ์์ํ. ์ด์ . ์ฑ๋ช .... ์ด์ด์ฟ ! ๊ณ ๋!
๋ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ๋ถ๋ถ์ dhtmlkitchen.com (ํ์ฌ ์์ ํ ์๋ง์ง์ฐฝ) ์ ๋ง๋ ์น๊ตฌ๊ฐ ๋งํฌ์ ์ค๋ฅ์ ๋ํด ์ด์ผ๊ธฐํ๊ธฐ ์์ํ์ ์ต๋๋ค .
ํด๋น ์ฌ์ดํธ๋ Paulo Fragomeni์๊ฒ ์ด์ ๋์์ต๋๋ค. ์, ๋๋ ๊ทธ๊ฒ์ ๋ง๋ค์๊ณ ์ฌ๊ธฐ์์ ๋ด๊ฐ ์ด ๊ฒ์ ์๋์ค๋ฝ๊ฒ ์๊ฐํฉ๋๋ค. ์ฝํ ์๋ฐํ์ ์คํฌ๋ฆฐ์ท์ ์ฐ์ผ์ธ์.
...์ด ์์ ์ ๋ง์น ํ์๋ ๊ณ ๊ฐ๋ฅผ ๊ฐธ์๊ฑฐ๋ฆฌ๋ฉฐ ๋ด ์ค๋๋ ๊ฐ์ธ ์น์ฌ์ดํธ(์ด๋ ๋ ์ด์ ๋ด๊ฐ ์ ์ง ๊ด๋ฆฌํ์ง ์์)์ ํ์์ ๊ฐ๋ฐํ๊ณ ์ฌ์ ์ง์์ ๋ฐ๋ ์น์ฌ์ดํธ ๊ฐ์ ์ฐจ์ด์ ์ ์ดํดํ๋ ค๊ณ ์์ต์ ๋ด๋ ์๋ฐฑ๋ง ๋ฌ๋ฌ์ ํ์ฌ(ํธ์ํฐ์ ๊ฐ์น๋ AFAIK ์์ญ์ต ๋ฌ๋ฌ์ผ ์ ์์).
์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ ๊ณ ๊ธ์ค๋ฝ๊ฒ ์ ์งํ๊ณ _์ฃผ์ ์ ๋ํด_ ๋คํ์ ๋๋ค.
jashkenas๋ ์ด ํ ๋ก ์ ์ด๊ธฐ์ ๊ด๋ จ ์ ๋ณด๋ฅผ ์ป์์ต๋๋ค.
ํ์ง๋ง ๋ฐ๋ฐ์ด ๊ฑฐ์ ๋ค. ์๋์! ๊ทธ๊ฒ์ ์๋๋ค! Souders๋ ๊ทธ๊ฒ์ ํ ๋งํ๋ค! ๊ทธ๋ฆฌ๊ณ ์คํจํ์ ๋ ์ด๋ป๊ฒ ์คํจํ๋์ง ์ ๊ฒฝ ์ฐ์ง ์๊ณ defer๋ฅผ ์ฌ์ฉํ๋ผ๋ ๋์ ์กฐ์ธ์ด ์์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ด๋ฌ๋ํ๊ฒ๋, ์ด๋์ ๊ฐ h5bp ์ฌ์ฉ์๋ค์ด ์ ๋๋ก ์ผ์ ํ ๊ฒ์ด๋ผ๋ ์ฃผ์ฅ์ด ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์๊ฒฌ์ ๋ถ๋ช ํ ์๋ชป๋ ๋งํฌ์ ์ ์์ฑํ๊ณ ๋ง์ ์ 3์ ์ถ์ํ ๊ณ์ธต(๋ฐ ๋์ฐํ ๊ณ์ธต)์ ์ฌ์ฉํ๋ ์ง์ง์๋ค์ ์๊ฒฌ์ด _ํ์_ ๋์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์์ด๋ฌ๋ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ defer ์ฌ์ฉ์ ๋ํ ์ฃผ์ ํ.
๊ทธ๋ ๋ค๋ฉด ์ด ์ค dhtmlkitchen.com์ด ๋ค์ด๋๋ ๊ฒ๊ณผ ์ด๋ค ๊ด๋ จ์ด ์์ต๋๊น? ์ ํ, ๋ถ๋ช ํ. ๊ทธ๊ฒ์ ๋นํ์ ์ฐธ์ ์ ์๋ h5bp ํฌํฌ์ ์ฝํ ์ฝ์ด์์ต๋๋ค.
๋ธ๋ผ๋์ค
๋
์.
๋ธ๋ผ๋์ค
์ด ์ค๋ ๋๋ ๋ซํ ์์ต๋๋ค. ๊ธฐ์ตํ๋ค? ์ง์ ๊ฐ ํ์๋ ์์ง๋ง ์ฌ๊ธฐ์์ ๋ถ์ ๋ถ์ผ ์๋ ์์ต๋๋ค.
์ด๋ด, ์ฐ๋ฆฌ๊ฐ ์ฌ๋ฌ ํ ๋ก , ๊ฐ์ธ์ ์ธ ๋ถ๊ฝ ์ ์, ์ฌ๋ฐฉ์์ ์ฌ๋๋ค์ด ํ๋ฅผ๋ด๋ ์ฌ๋๋ค, ์ธ์ค์ ์ธ ์ด๋ฏธ์ง ํ๋ ๊ฐ, ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์ฃผ์์ ์ข์ ์๊ฐ์ด ์์๋ ์ฅ๋ํ ์ค๋ ๋๋ฅผ ๋ง๋ค์๋ ๊ฒ์ ๊ธฐ์ตํ์ญ๋๊น? ๋ฌด๋ฃ์๋ค๋๊ฒ ๋ฏฟ๊ธฐ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ธ์ ๊ฐ ๊ทธ๊ฒ์ ๋ค์ ํด์ผ ํฉ๋๋ค.