์๋ง์ ์จ๋ผ์ธ ์ฌ์ดํธ์์ JavaScript๋ณด๋ค CSS๋ฅผ ํฌํจํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ถ๋ก ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ ๊ณผ ๊ฐ์ ํ์์ ๋๋ค .
CSS์ JavaScript๋ฅผ ์ฃผ๋ฌธํ ๋๋ CSS๊ฐ ์ฐ์ ์ ๋๋ค. ๋ ๋๋ง ์ค๋ ๋์๋ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ์คํ์ผ ์ ๋ณด๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. JavaScript๊ฐ ๋จผ์ ํฌํจ๋๋ฉด JavaScript ์์ง์ ๋ค์ ๋ฆฌ์์ค ์ธํธ๋ฅผ ๊ณ์ํ๊ธฐ ์ ์์ด๋ฅผ ๋ชจ๋ ๊ตฌ๋ฌธ ๋ถ์ํด์ผํฉ๋๋ค. ์ด๋ ๋ ๋๋ง ์ค๋ ๋์ ํ์ํ ๋ชจ๋ ์คํ์ผ์ด ์๊ธฐ ๋๋ฌธ์ ํ์ด์ง๋ฅผ ์์ ํ ํ์ ํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ค์ ํ ์คํธ ๊ฒฐ๊ณผ๋ ์๋นํ ๋ค๋ฆ ๋๋ค.
๋ด ํ ์คํธ ํ๋ค์ค
๋ค์ Ruby ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ํ ์์์ ๋ํ ํน์ ์ง์ฐ์ ์์ฑํฉ๋๋ค.
require 'rubygems'
require 'eventmachine'
require 'evma_httpserver'
require 'date'
class Handler < EventMachine::Connection
include EventMachine::HttpServer
def process_http_request
resp = EventMachine::DelegatedHttpResponse.new( self )
return unless @http_query_string
path = @http_path_info
array = @http_query_string.split("&").map{|s| s.split("=")}.flatten
parsed = Hash[*array]
delay = parsed["delay"].to_i / 1000.0
jsdelay = parsed["jsdelay"].to_i
delay = 5 if (delay > 5)
jsdelay = 5000 if (jsdelay > 5000)
delay = 0 if (delay < 0)
jsdelay = 0 if (jsdelay < 0)
# Block which fulfills the request
operation = proc do
sleep delay
if path.match(/.js$/)
resp.status = 200
resp.headers["Content-Type"] = "text/javascript"
resp.content = "(function(){
var start = new Date();
while(new Date() - start < #{jsdelay}){}
})();"
end
if path.match(/.css$/)
resp.status = 200
resp.headers["Content-Type"] = "text/css"
resp.content = "body {font-size: 50px;}"
end
end
# Callback block to execute once the request is fulfilled
callback = proc do |res|
resp.send_response
end
# Let the thread pool (20 Ruby threads) handle request
EM.defer(operation, callback)
end
end
EventMachine::run {
EventMachine::start_server("0.0.0.0", 8081, Handler)
puts "Listening..."
}
์์ ๋ฏธ๋ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ฉด JavaScript ํ์ผ (์๋ฒ ๋ฐ ํด๋ผ์ด์ธํธ ๋ชจ๋) ๋ฐ ์์์ CSS ์ง์ฐ์ ๋ํ ์์ ์ง์ฐ์ ์ค์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด http://10.0.0.50:8081/test.css?delay=500CSS๋ฅผ ์ ์กํ๋ ๋ฐ 500ms ์ง์ฐ์ด ๋ฐ์ํฉ๋๋ค.
๋ค์ ํ์ด์ง๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธํฉ๋๋ค.
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<script type='text/javascript'>
var startTime = new Date();
</script>
<link href="http://10.0.0.50:8081/test.css?delay=500" type="text/css" rel="stylesheet">
<script type="text/javascript" src="http://10.0.0.50:8081/test2.js?delay=400&jsdelay=1000"></script>
</head>
<body>
<p>
Elapsed time is:
<script type='text/javascript'>
document.write(new Date() - startTime);
</script>
</p>
</body>
</html>
CSS๋ฅผ ๋จผ์ ํฌํจํ๋ฉด ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐ 1.5 ์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.

JavaScript๋ฅผ ๋จผ์ ํฌํจํ๋ฉด ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋ฐ 1.4 ์ด๊ฐ ๊ฑธ๋ฆฝ๋๋ค.
Chrome, Firefox ๋ฐ Internet Explorer์์ ๋น์ทํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ต๋๋ค. ๊ทธ๋ฌ๋ Opera์์๋ ์์๊ฐ ์ค์ํ์ง ์์ต๋๋ค.
์ผ์ด๋๊ณ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ JavaScript ํด์๊ธฐ๊ฐ ๋ชจ๋ CSS๋ฅผ ๋ค์ด๋ก๋ ํ ๋๊น์ง ์์์ ๊ฑฐ๋ถํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ JavaScript ์ค๋ ๋๋ฅผ ๋ ๋ง์ด ์คํํ๋ฉด JavaScript๋ฅผ ๋จผ์ ํฌํจํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ ๋๋ค.
๋ด๊ฐ ๋น ๋จ๋ฆฐ ๊ฒ์ด ์์ต๋๊น? JavaScript๊ฐ ํฌํจ๋๊ธฐ ์ ์ CSS๋ฅผ ํฌํจ์ํค๋ ๊ฒ์ด ์ข์ต๋๋ค?
๋น๋๊ธฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ setTimeout์ ์ฌ์ฉํ์ฌ ๋ ๋๋ง ์ค๋ ๋๋ฅผ ๋น์ฐ๊ฑฐ๋ JavaScript ์ฝ๋๋ฅผ ๋ฐ๋ฅ ๊ธ์ ๋ฃ๊ฑฐ๋ JavaScript ๋ก๋๋ฅผ ์ฌ์ฉํ ์ ์์์ด ๋ถ๋ช ํฉ๋๋ค. ์ฌ๊ธฐ์ ์์ ์ ํ์ JavaScript ๋นํธ์ CSS ๋นํธ์ ์์์ ๊ดํ ๊ฒ์ ๋๋ค.
๋ต๋ณ
์ด๊ฒ์ ๋งค์ฐ ํฅ๋ฏธ๋ก์ด ์ง๋ฌธ์
๋๋ค. ๋๋ ํญ์ CSS๋ฅผ CSS <link href="...">์์ ๋์์ต๋๋ค. <script src="...">์๋ํ๋ฉด โํ๋ฒ ๋ ๋์ ์ก๊ธฐ ๋๋ฌธ์
๋๋ค.โ ๊ทธ๋์ ๋น์ ์ด ๋ง์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ค์ ์ฐ๊ตฌ๋ฅผ ์ํ ํ ์๊ฐ์
๋๋ค!
Node์์ ์์ฒด ํ ์คํธ ํ๋ค์ค๋ฅผ ์ค์ ํ์ต๋๋ค (์๋ ์ฝ๋). ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ :
- HTTP ์บ์ฑ์ด ์๋์ง ํ์ธํ์ฌ ํ์ด์ง๊ฐ๋ก๋ ๋ ๋๋ง๋ค ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ฒด ๋ค์ด๋ก๋๋ฅผ ์ํํด์ผํฉ๋๋ค.
- ํ์ค์ ์๋ฎฌ๋ ์ดํธํ๊ธฐ ์ํด jQuery์ H5BP CSS๋ฅผ ํฌํจ ์์ผฐ์ต๋๋ค.
- ํ ํ์ด์ง๋ ์คํฌ๋ฆฝํธ ์ CSS, ๋ค๋ฅธ ํ๋๋ ์คํฌ๋ฆฝํธ ํ CSS๋ฅผ ์ฌ์ฉํ์ฌ ๋ ํ์ด์ง๋ฅผ ์ค์ ํฉ๋๋ค.
- ์์ ์ธ๋ถ ์คํฌ๋ฆฝํธ
<head>๋ฅผ ์คํ ํ๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ๊ธฐ๋กํ์ต๋๋ค. - ์์ ์ธ๋ผ์ธ ์คํฌ๋ฆฝํธ
<body>๋ฅผ ์คํ ํ๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ๊ธฐ๋ก ํ์ต๋๋คDOMReady. - CSS ๋ฐ / ๋๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ธ๋ผ์ฐ์ ์ 500ms๊น์ง ์ง์ฐ์ํต๋๋ค.
- 3 ๊ฐ์ ์ฃผ์ ๋ธ๋ผ์ฐ์ ์์ ํ ์คํธ๋ฅผ 20 ๋ฒ ์คํํ์ต๋๋ค.
๊ฒฐ๊ณผ
๋จผ์ CSS ํ์ผ์ด 500ms ์ง์ฐ๋์์ต๋๋ค.
Browser: Chrome 18 | IE 9 | Firefox 9
CSS: first last | first last | first last
=======================================================
Header Exec | | |
Average | 583ms 36ms | 559ms 42ms | 565ms 49ms
St Dev | 15ms 12ms | 9ms 7ms | 13ms 6ms
------------|--------------|--------------|------------
Body Exec | | |
Average | 584ms 521ms | 559ms 513ms | 565ms 519ms
St Dev | 15ms 9ms | 9ms 5ms | 13ms 7ms
๋ค์์ผ๋ก jQuery๋ฅผ CSS ๋์ 500ms ์ง์ฐํ๋๋ก ์ค์ ํ์ต๋๋ค.
Browser: Chrome 18 | IE 9 | Firefox 9
CSS: first last | first last | first last
=======================================================
Header Exec | | |
Average | 597ms 556ms | 562ms 559ms | 564ms 564ms
St Dev | 14ms 12ms | 11ms 7ms | 8ms 8ms
------------|--------------|--------------|------------
Body Exec | | |
Average | 598ms 557ms | 563ms 560ms | 564ms 565ms
St Dev | 14ms 12ms | 10ms 7ms | 8ms 8ms
๋ง์ง๋ง์ผ๋ก jQuery์ CSS ๋ชจ๋ 500ms ์ง์ฐ๋๋๋ก ์ค์ ํ์ต๋๋ค.
Browser: Chrome 18 | IE 9 | Firefox 9
CSS: first last | first last | first last
=======================================================
Header Exec | | |
Average | 620ms 560ms | 577ms 577ms | 571ms 567ms
St Dev | 16ms 11ms | 19ms 9ms | 9ms 10ms
------------|--------------|--------------|------------
Body Exec | | |
Average | 623ms 561ms | 578ms 580ms | 571ms 568ms
St Dev | 18ms 11ms | 19ms 9ms | 9ms 10ms
๊ฒฐ๋ก
๋จผ์ , ๋๋ <head>๋ฌธ์์ ๋์ ์คํฌ๋ฆฝํธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๊ณ ์๋ํ๋ค๋ ์ ์ ์ ์ํด์ผํฉ๋๋ค <body>. <head>๋ฌธ์์ ๋๊ณผ ๋ ์์ ์คํฌ๋ฆฝํธ์ ๋งํฌ ํ ์์๋ ์ด์ ์ ๋ํ ๋ค์ํ ์ฃผ์ฅ์ด ์์ง๋ง์ด ๋ต๋ณ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค. ์ด๊ฒ์ s์์ s <script>๋ณด๋ค ๋จผ์ ๊ฐ์ง ์ฌ๋ถ <link>์ ๊ดํ ๊ฒ <head>์
๋๋ค.
์ต์ DESKTOP ๋ธ๋ผ์ฐ์ ์์ CSS์ ์ฐ๊ฒฐ ํ๋ฉด ์ฑ๋ฅ์ด ํฅ์ ๋์ง ์์ต๋๋ค . CSS๋ฅผ ์คํฌ๋ฆฝํธ ๋ค์ ๋์ผ๋ฉด CSS์ ์คํฌ๋ฆฝํธ๊ฐ ๋ชจ๋ ์ง์ฐ ๋ ๋ ์ฌ์ํ ์์ ์ด๋์ ์ป์ ์ ์์ง๋ง CSS๊ฐ ์ง์ฐ๋๋ฉด ํฐ ์ด๋์ ์ป์ ์ ์์ต๋๋ค. last์ฒซ ๋ฒ์งธ ๊ฒฐ๊ณผ ์งํฉ์ ์ด๋ก ํ์๋ฉ๋๋ค .
CSS์ ๋ง์ง๋ง์ผ๋ก ์ฐ๊ฒฐํด๋ ์ฑ๋ฅ์ด ์ ํ๋์ง ๋ ์์ง๋ง ํน์ ์ํฉ์์ ์ด์ ์ ์ป์ ์ ์์ผ๋ฏ๋ก ์ด์ ๋ธ๋ผ์ฐ์ ์ ์ฑ๋ฅ์ด ์ค์ํ์ง ์์ ๊ฒฝ์ฐ ๋ฐ์คํฌํฑ ๋ธ๋ผ์ฐ์ ์์๋ง ์ธ๋ถ ์คํฌ๋ฆฝํธ์ ์ฐ๊ฒฐ ํ ํ ์ธ๋ถ ์คํ์ผ ์ํธ์ ์ฐ๊ฒฐํด์ผํฉ๋๋ค . ๋ชจ๋ฐ์ผ ์ํฉ์ ์ฝ์ผ์ญ์์ค.
์?
์ญ์ฌ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ <script>์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ํ๊ทธ๋ฅผ ๋ฐ๊ฒฌ ํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ HTML ๊ตฌ๋ฌธ ๋ถ์ ์ ์ค์ง ํ๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฒ์ ํ ํ ์คํ ํ ๋ค์ HTML ๊ตฌ๋ฌธ ๋ถ์์ ๊ณ์ํฉ๋๋ค. ๋ฐ๋๋ก, ๋ธ๋ผ์ฐ์ ๊ฐ <link>์ธ๋ถ ์คํ์ผ ์ํธ๋ฅผ ๋ฐ๊ฒฌ ํ ๊ฒฝ์ฐ CSS ํ์ผ์ ๊ฐ์ ธ ์ค๋ ๋์ HTML์ ๊ณ์ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค (๋ณ๋ ฌ).
๋ฐ๋ผ์ ์คํ์ผ ์ํธ๋ฅผ ๋จผ์ ๋ฐฐ์นํ๋ผ๋ ๋๋ฆฌ ๋ฐ๋ณต๋๋ ์กฐ์ธ โ ๋จผ์ ๋ค์ด๋ก๋ํ๊ณ ๋ค์ด๋ก๋ ํ ์ฒซ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณ๋ ฌ๋ก๋ก๋ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ต์ ๋ธ๋ผ์ฐ์ (์์์ ํ ์คํธ ํ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ํฌํจ)๋ ์ถ์ธก ๋ถ์ ์ ๊ตฌํ ํ์ฌ ๋ธ๋ผ์ฐ์ ์์ HTML์ โ ์์ โํ๊ณ ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์คํ ํ๊ธฐ ์ ์ ๋ฆฌ์์ค ๋ฅผ ๋ค์ด๋ก๋ ํ๊ธฐ ์์ํฉ๋๋ค .
์ถ์ธก ๋ถ์์ด์๋ ์ค๋๋ ๋ธ๋ผ์ฐ์ ์์๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋จผ์ ๋ฐฐ์นํ๋ฉด ๋ณ๋ ฌ๋ก ๋ค์ด๋ก๋๋์ง ์์ผ๋ฏ๋ก ์ฑ๋ฅ์ ์ํฅ์์ค๋๋ค.
๋ธ๋ผ์ฐ์ ์ง์
์ถ๋ก ํ์ฑ์ ๋ค์์์ ์ฒ์ ๊ตฌํ๋์์ต๋๋ค. (2012 ๋ 1 ์ ํ์ฌ์ด ๋ฒ์ ์ ์ฌ์ฉํ๋ ์ ์ธ๊ณ ๋ฐ์คํฌํฑ ๋ธ๋ผ์ฐ์ ์ฌ์ฉ์์ ๋น์จ๊ณผ ํจ๊ป)
- ํฌ๋กฌ 1 (WebKit 525) (100 %)
- IE 8 (75 %)
- ํ์ด์ด ํญ์ค 3.5 (96 %)
- ์ฌํ๋ฆฌ 4 (99 %)
- ์คํ๋ผ 11.60 (85 %)
ํ์ฌ ์ฌ์ฉ์ค์ธ ๋ฐ์คํฌํฑ ๋ธ๋ผ์ฐ์ ์ ์ฝ 85 %๊ฐ ์ถ๋ก ๋ก๋ฉ์ ์ง์ํฉ๋๋ค. CSS ์์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฃ์ผ๋ฉด ์ ์ธ๊ณ ์ฌ์ฉ์์ 15 %๊ฐ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ ํฉ๋๋ค . ์ฌ์ดํธ์ ํน์ ์ ์ฌ ๊ณ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํ YMMV (๊ทธ๋ฆฌ๊ณ ๊ทธ ์๊ฐ ์ค์ด๋ค๊ณ ์์์ ๊ธฐ์ตํ์ญ์์ค.)
๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ์์๋ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ์ OS ํ๊ฒฝ์ด ์ผ๋ง๋ ์ด์ง์ ์ธ๊ฐ์ ๋ฐ๋ผ ๊ฒฐ์ ์ ์ธ ์ซ์๋ฅผ ์ป๋ ๊ฒ์ด ์กฐ๊ธ ๋ ์ด๋ ต์ต๋๋ค. ์ถ๋ก ๋ ๋๋ง์ WebKit 525 (2008 ๋ 3 ์ ๋ฆด๋ฆฌ์ค)์์ ๊ตฌํ๋์์ผ๋ฉฐ ๊ฑฐ์ โโ๋ชจ๋ ๊ฐ์น์๋ ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ๊ฐ WebKit์ ๊ธฐ๋ฐ์ผ๋กํ๊ธฐ ๋๋ฌธ์ โ๋๋ถ๋ถ์โ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ ๊ฐ์ด๋ฅผ ์ง์ ํด์ผํ๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์์ต๋๋ค . quirksmode ์ ๋ฐ๋ฅด๋ฉด iOS 2.2 / Android 1.0์ WebKit 525๋ฅผ ์ฌ์ฉํฉ๋๋ค. Windows Phone์ ๋ชจ์์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๊ทธ๋ฌ๋ Android 4 ๊ธฐ๊ธฐ์์ ํ ์คํธ๋ฅผ ์คํํ์ผ๋ฉฐ ๋ฐ์คํฌํฑ ๊ฒฐ๊ณผ์ ๋น์ทํ ์ซ์๋ฅผ ๋ณด์์ง๋ง Android ์ฉ Chrome ์ ํ์์ ์ธ ์๋ก์ด ์๊ฒฉ ๋๋ฒ๊ฑฐ ์ ์ฐ๊ฒฐํ์ผ๋ฉฐ ๋คํธ์ํฌ ํญ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ค์ ๋ก ๋ค์ด๋ก๋ ๋๊ธฐ ์ค์์ ๋ํ ๋์ต๋๋ค ์๋ฐ ์คํฌ๋ฆฝํธ๊ฐ ์์ ํ๋ก๋ ๋ ๋๊น์ง CSS, ์ฆ ์ต์ ๋ฒ์ ์ Android ์ฉ WebKit์กฐ์ฐจ๋ ์ถ๋ก ํ์ฑ์ ์ง์ํ์ง ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ๋ชจ๋ฐ์ผ ์ฅ์น ๊ณ ์ ์ CPU, ๋ฉ๋ชจ๋ฆฌ ๋ฐ / ๋๋ ๋คํธ์ํฌ ์ ์ฝ์ผ๋ก ์ธํด ๊บผ์ ธ์์ ์ ์์ต๋๋ค.
์ํธ
๋ฐ๋ณด๋ฅผ ์ฉ์ํ์ญ์์ค โ ์ด๊ฒ์ Q & D์์ต๋๋ค.
app.js
var express = require('express')
, app = express.createServer()
, fs = require('fs');
app.listen(90);
var file={};
fs.readdirSync('.').forEach(function(f) {
console.log(f)
file[f] = fs.readFileSync(f);
if (f != 'jquery.js' && f != 'style.css') app.get('/' + f, function(req,res) {
res.contentType(f);
res.send(file[f]);
});
});
app.get('/jquery.js', function(req,res) {
setTimeout(function() {
res.contentType('text/javascript');
res.send(file['jquery.js']);
}, 500);
});
app.get('/style.css', function(req,res) {
setTimeout(function() {
res.contentType('text/css');
res.send(file['style.css']);
}, 500);
});
var headresults={
css: [],
js: []
}, bodyresults={
css: [],
js: []
}
app.post('/result/:type/:time/:exec', function(req,res) {
headresults[req.params.type].push(parseInt(req.params.time, 10));
bodyresults[req.params.type].push(parseInt(req.params.exec, 10));
res.end();
});
app.get('/result/:type', function(req,res) {
var o = '';
headresults[req.params.type].forEach(function(i) {
o+='\n' + i;
});
o+='\n';
bodyresults[req.params.type].forEach(function(i) {
o+='\n' + i;
});
res.send(o);
});
css.html
<!DOCTYPE html>
<html>
<head>
<title>CSS first</title>
<script>var start = Date.now();</script>
<link rel="stylesheet" href="style.css">
<script src="jquery.js"></script>
<script src="test.js"></script>
</head>
<body>
<script>document.write(jsload - start);bodyexec=Date.now()</script>
</body>
</html>
js.html
<!DOCTYPE html>
<html>
<head>
<title>CSS first</title>
<script>var start = Date.now();</script>
<script src="jquery.js"></script>
<script src="test.js"></script>
<link rel="stylesheet" href="style.css">
</head>
<body>
<script>document.write(jsload - start);bodyexec=Date.now()</script>
</body>
</html>
test.js
var jsload = Date.now();
$(function() {
$.post('/result' + location.pathname.replace('.html','') + '/' + (jsload - start) + '/' + (bodyexec - start));
});
jquery.js๋ jquery-1.7.1.min.js์์ต๋๋ค.
๋ต๋ณ
CSS๋ฅผ JavaScript๋ณด๋ค ์ฐ์ ํ๋ ๋ ๊ฐ์ง ์ฃผ์ ์ด์ ๊ฐ ์์ต๋๋ค.
-
์ค๋๋ ๋ธ๋ผ์ฐ์ (Internet Explorer 6-7, Firefox 2 ๋ฑ)๋ ์คํฌ๋ฆฝํธ ๋ค์ด๋ก๋๋ฅผ ์์ํ ๋ ๋ชจ๋ ํ์ ๋ค์ด๋ก๋๋ฅผ ์ฐจ๋จํฉ๋๋ค. ๋ฐ๋ผ์
a.js๊ณ์b.cssํด์ ๋ค์ด๋ก๋ํ๋ฉด ์์ฐจ์ ์ผ๋ก ๋ค์ด๋ก๋๋ฉ๋๋ค. ๋จผ์ a ๋ค์ b. ๋น์ ์ด ๊ฒฝ์ฐb.css๋ค์์a.js๊ทธ๋ค์ด ๋ ๋นจ๋ฆฌ ํ์ด์ง๊ฐ๋ก๋ ๋ ์ ์๋๋ก ๋ณ๋ ฌ๋ก ๋ค์ด๋ก๋๋ฐ์. -
๋ชจ๋ ์คํ์ผ ์ํธ๋ฅผ ๋ค์ด๋ก๋ ํ ๋๊น์ง ์๋ฌด๊ฒ๋ ๋ ๋๋ง๋์ง ์์ต๋๋ค. ์ด๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ ์ฉ๋ฉ๋๋ค. ์คํฌ๋ฆฝํธ๋ ๋ค๋ฆ ๋๋ค . ํ์ด์ง์์ ์คํฌ๋ฆฝํธ ํ๊ทธ ์๋์์๋ ๋ชจ๋ DOM ์์์ ๋ ๋๋ง์ ์ฐจ๋จ ํฉ๋๋ค. ์คํฌ๋ฆฝํธ๋ฅผ HEAD์ ๋ฃ์ผ๋ฉด ๋ชจ๋ ์คํ์ผ ์ํธ ๋ฐ ๋ชจ๋ ์คํฌ๋ฆฝํธ๊ฐ ๋ค์ด๋ก๋ ๋ ๋๊น์ง ์ ์ฒด ํ์ด์ง๊ฐ ๋ ๋๋ง๋์ง ์๋๋ก ์ฐจ๋จ๋ฉ๋๋ค. ์คํ์ผ ์ํธ์ ๋ํ ๋ชจ๋ ๋ ๋๋ง์ ์ฐจ๋จํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ฏ๋ก (์ฒซ ๋ฒ์งธ๋ก ์ฌ๋ฐ๋ฅธ ์คํ์ผ์ ์ ์ฉํ๊ณ ์คํ์ผ์ด ์ง์ ๋์ง ์์ ์ฝํ ์ธ FOUC๊ฐ ๋ฐ์ํ์ง ์๋๋ก) ์คํฌ๋ฆฝํธ์ ์ ์ฒด ํ์ด์ง ๋ ๋๋ง์ ์ฐจ๋จํ๋ ๊ฒ์ ์ ํฉํ์ง ์์ต๋๋ค. ์คํฌ๋ฆฝํธ๋ ์ข ์ข DOM ์์ ๋ DOM ์์์ ์ผ๋ถ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค. ๊ฐ๋ฅํ ํ ํ์ด์ง์์ ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ๋ฅํ ์ ๊ฒ๋ก๋ํ๊ฑฐ๋ ๋น๋๊ธฐ ์ ์ผ๋ก๋ก๋ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
Cuzillion์ผ๋ก ์์ ๋ฅผ ๋ง๋๋ ๊ฒ์ ์ฌ๋ฏธ ์์ต๋๋ค . ์๋ฅผ ๋ค์ด, ์ด ํ์ด์ง ์๋ HEAD์ ์คํฌ๋ฆฝํธ๊ฐ ์์ผ๋ฏ๋ก ๋ค์ด๋ก๋๊ฐ ์๋ฃ ๋ ๋๊น์ง ์ ์ฒด ํ์ด์ง๊ฐ ๋น์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์คํฌ๋ฆฝํธ๋ฅผ BODY ๋ธ๋ก์ ๋์ผ๋ก ์ด๋ํ๋ฉด ์ด ํ์ด์ง์์ ๋ณผ ์ ์๋ฏ์ด ํด๋น DOM ์์๊ฐ SCRIPT ํ๊ทธ ์์์ ๋ฐ์ํ๋ฏ๋ก ํ์ด์ง ํค๋๊ฐ ๋ ๋๋ง ๋ฉ๋๋ค .
๋ต๋ณ
๋๋ ๋น์ ์ด ์ป์ ๊ฒฐ๊ณผ์ ๋ํด ๋๋ฌด ๊ฐ์กฐํ์ง ์๊ณ ์ฃผ๊ด์ ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง js ์ ์ CSS์ ๋ฃ๋ ๊ฒ์ด ๋ซ๋ค๋ ๊ฒ์ ์ค๋ช ํ ์ด์ ๊ฐ ์์ต๋๋ค.
์น ์ฌ์ดํธ๋ฅผ๋ก๋ํ๋ ๋์ ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ง ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค.
CASE 1 : ํฐ์ ํ๋ฉด> ์คํ์ผ์ด ์ ์ฉ๋์ง ์์ ์น ์ฌ์ดํธ> ์คํ์ผ์ ์น ์ฌ์ดํธ> ์ํธ ์์ฉ> ์คํ์ผ ๋ฐ ๋ํ ํ ์น ์ฌ์ดํธ
CASE 2 : ํฐ์ ํ๋ฉด> ์คํ์ผ์ด ์ ์ฉ๋์ง ์์ ์น ์ฌ์ดํธ> ์ํธ ์์ฉ> ์คํ์ผ ์น ์ฌ์ดํธ> ์คํ์ผ ๋ฐ ๋ํ ํ ์น ์ฌ์ดํธ
์์งํ ์ผ์ด์ค 2๋ฅผ ์ ํํ๋ ์ฌ๋์ด ์์ํ ์์๋ ๊ฒ์์ด ์๋ฏธํ๋ ๊ฒ ์ธํฐ๋ท ์ฐ๊ฒฐ ์๋๊ฐ ๋๋ฆฐ ๋ฐฉ๋ฌธ์๋ ์คํ์ผ์ด ์ง์ ๋์ง ์์ ์น ์ฌ์ดํธ๋ฅผ ์ ํ๊ฒ๋๋ฏ๋ก ์๋ฐ ์คํฌ๋ฆฝํธ (์ด๋ฏธ๋ก๋ ๋ ์ดํ)๋ฅผ ์ฌ์ฉํ์ฌ ์น ์ฌ์ดํธ์ ์ํธ ์์ฉํ ์ ์์ต๋๋ค. ๋ํ ์คํ์ผ์ด ์ง์ ๋์ง ์์ ์น ์ฌ์ดํธ๋ฅผ ๋ณด๋ ๋ฐ ์์๋๋ ์๊ฐ์ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ทน๋ํ๋ฉ๋๋ค. ์ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ์ ์ํ ๊น์?
๋ํ jQuery ์ํ ๋ก ๋ ์ ์๋ํฉ๋๋ค.
โCSS ์คํ์ผ ์์ฑ์ ๊ฐ์ ์์กดํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ ์ ์ธ๋ถ ์คํ์ผ ์ํธ๋ฅผ ์ฐธ์กฐํ๊ฑฐ๋ ์คํ์ผ ์์๋ฅผ ํฌํจ์ํค๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.โ
ํ์ผ์ด ์๋ชป๋ ์์๋ก๋ก๋๋๋ฉด (๋จผ์ JS, CSS) CSS ํ์ผ์ ์ค์ ๋ ์์ฑ (์ : div์ ๋๋น ๋๋ ๋์ด)์ ์์กดํ๋ Javascript ์ฝ๋๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ๋ก๋๋์ง ์์ต๋๋ค. ์๋ชป๋ ๋ก๋ฉ ์์๋ก ์ฌ๋ฐ๋ฅธ ์์ฑ์ด Javascript์ ์๋ ค์ง โ๋๋๋กโ์ธ ๊ฒ ๊ฐ์ต๋๋ค (์๋ง๋ ์ด๊ฒ์ด ๊ฒฝ์ ์กฐ๊ฑด์ผ๋ก ์ธํ ๊ฒ์ ๋๊น?). ์ด ํจ๊ณผ๋ ์ฌ์ฉํ๋ ๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ผ ํฌ๊ฑฐ๋ ์๊ฒ ๋ณด์ ๋๋ค.
๋ต๋ณ
ํ ์คํธ๋ ๊ฐ์ธ์ฉ ์ปดํจํฐ ๋ ์น ์๋ฒ์์ ์ํ ๋์์ต๋๊น? ๋น ํ์ด์ง์ด๊ฑฐ๋ ์ด๋ฏธ์ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ์ด์๋ ๋ณต์กํ ์จ๋ผ์ธ ์์คํ ์ ๋๊น? ์คํฌ๋ฆฝํธ๊ฐ ๊ฐ๋จํ ํธ๋ฒ ์ด๋ฒคํธ ๋์์ ์ํํฉ๋๊น, ์๋๋ฉด ์น ์ฌ์ดํธ๊ฐ ์ฌ์ฉ์๋ฅผ ๋ ๋๋งํ๊ณ ์ํธ ์์ฉํ๋ ๋ฐฉ๋ฒ์ ํต์ฌ ๊ตฌ์ฑ ์์์ ๋๊น? ์ฌ๊ธฐ์ ๊ณ ๋ คํด์ผ ํ ๋ช ๊ฐ์ง ์ฌํญ์ด ์์ผ๋ฉฐ ์ด๋ฌํ ๊ถ์ฅ ์ฌํญ์ ๊ด๋ จ์ฑ์ ๊ฑฐ์ ํญ์ ๋์ ์์ค์ ์น ๊ฐ๋ฐ์ ํฌ์ ํ ๋ ๊ท์น์ด๋ฉ๋๋ค.
๊ท์น์ โํ๋จ์์ ์๋จ๊ณผ ์คํฌ๋ฆฝํธ์ ๋ฃ์ด ์คํ์ผโ์ ๋ชฉ์ ์ ์ฆ, ์ผ๋ฐ์ ์ผ๋ก ์ต์ ๋ฌ์ฑํ๊ธฐ ์ํด ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด๋ค ์ง๋ณด์ ์ธ ๋ ๋๋ง , ์ฌ์ฉ์ ๊ฒฝํ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๊ทธ ๋ฐ์ ๋ชจ๋ ๊ฒ์ ์ ์ณ๋๊ณ : ํ ์คํธ๊ฐ ์ ํจํ๊ณ , ์ผ๋ฐ์ ์ธ ๊ท์น๊ณผ ๋ฌ๋ฆฌ ์ค์ ๋ก ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์ค์ ๋ก ๋๋ผ์ด ๊ฒฐ๊ณผ๋ ์๋๋๋ค. ๋ชจ๋ ์น ์ฌ์ดํธ (๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๊ฒ์ด ์ฌ์ฉ์์ ํ๋ฉด์ ๋ํ๋๊ฒํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ๊ฒ)๋ ๋ค๋ฅด๋ฉฐ ์ธํฐ๋ท์ ๋์์์ด ๋ฐ์ ํ๊ณ ์์ต๋๋ค.
๋ต๋ณ
๋ค๋ฅธ ์ด์ ๋ก Javascript ์์ CSS ํ์ผ์ ํฌํจ์ํต๋๋ค.
๋ด ์๋ฐ ์คํฌ๋ฆฝํธ๊ฐ ์ผ๋ถ ํ์ด์ง ์์์ ๋์ ํฌ๊ธฐ ์กฐ์ ์ ์ํ ํด์ผํ๋ ๊ฒฝ์ฐ (CSS๊ฐ ์ค์ ๋ก ์ฃผ์ํ ์ฝ๋ ๊ฒฝ์ฐ) JS๊ฐ ์ข ๋ฃ ๋ ํ CSS๋ฅผ๋ก๋ํ๋ฉด ๊ฒฝ์ ์กฐ๊ฑด์ด ์๊ธธ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ CSS ์คํ์ผ๋ณด๋ค ์์์ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋ฉ๋๋ค ์คํ์ผ์ด ๋ง์นจ๋ด ์์๋ ๋ ์ด์ํ๊ฒ ๋ณด์ ๋๋ค. CSS๋ฅผ ๋ฏธ๋ฆฌ๋ก๋ํ๋ฉด ์ํ๋ ์์๋๋ก ์คํ๋๊ณ ์ต์ข ๋ ์ด์์์ด ๋ด๊ฐ ์ํ๋ ๊ฒ์ ๋ณด์ฅ ํ ์ ์์ต๋๋ค.
๋ต๋ณ
JavaScript ์ ์ CSS๋ฅผ ํฌํจํ๋๋ก ๊ถ์ฅํ๋ ๊ฒ์ด ์ ํจํ์ง ์์ต๋๊น?
๋จ์ํ ์ถ์ฒ์ผ๋ก ์ทจ๊ธํ๋ค๋ฉด ์๋๋๋ค. ๊ทธ๋ฌ๋ ๋น์ ์ด ๊ทธ๊ฒ์ ๋จ๋จํ๊ณ ๋น ๋ฅธ ๊ท์น์ผ๋ก ์ทจ๊ธํ๋ค๋ฉด, ๊ทธ๋ ์ต๋๋ค, ๊ทธ๊ฒ์ ์ ํจํ์ง ์์ต๋๋ค.
์์ https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded
์คํ์ผ ์ํธ๋ ๋ธ๋ก ์คํฌ๋ฆฝํธ ์คํ์๋ก๋ํ๋ฏ๋ก,
<script>
์ดํ์<link rel="stylesheet" ...>ํ์ด์ง๊ฐ ๊ตฌ๋ฌธ ๋ถ์์ ์๋ฃํ์ง ์์ผ๋ฉด ์คํ์ผ ์ํธ๊ฐ๋ก๋ ๋ ๋๊น์ง DOMContentLoaded๊ฐ ์คํ๋์ง ์์ต๋๋ค.
๊ฐ ์คํฌ๋ฆฝํธ๊ฐ ์์กดํ๋ ๊ฒ์ ์๊ณ ์ฌ๋ฐ๋ฅธ ์๋ฃ ์ด๋ฒคํธ๊ฐ ๋๋ ๋๊น์ง ์คํฌ๋ฆฝํธ ์คํ์ด ์ง์ฐ๋๋์ง ํ์ธํด์ผํฉ๋๋ค. ์คํฌ๋ฆฝํธ๊ฐ DOM์๋ง ์์กดํ๋ ๊ฒฝ์ฐ ondomready / domcontentloaded์์ ๋ค์ ์์ํ ์ ์์ต๋๋ค.๋ก๋ ํ ์ด๋ฏธ์ง ๋๋ ์ ์ฉ ํ ์คํ์ผ ์ํธ์ ์์กดํ๋ ๊ฒฝ์ฐ ์์ ์ฐธ์กฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฝ์ผ๋ฉด onload ์ด๋ฒคํธ๊น์ง ํด๋น ์ฝ๋๋ฅผ ์ฐ๊ธฐํด์ผํฉ๋๋ค.
์๋ง ํฌ๊ธฐ๊ฐ ๋ชจ๋ ํ๋งค๋๋ ๋ฐฉ์์ด์ง๋ง ์๋ง ํฌ๊ธฐ๊ฐ ๋ชจ๋ ๋ง๋ ๊ฒ์ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์คํ์ผ์ด๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋จผ์ ๋ก๋ ํ ๊ฒฐ์ ์ ์ธ ๋ต์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ค ์์๋ก๋ก๋ํด์ผํ๋์ง, ๊ทธ๋ฆฌ๊ณ โ์ค์ํ ๊ฒฝ๋กโ์ ์์ง ์์ ๊ฒ์ผ๋ก ๋์ค์ ์ง์ฐ ๋ ์์๋ ๊ฒ์ ๊ฒฐ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง์ต๋๋ค.
๊ด์ฐฐ์์๊ฒ ๋งํ๋ฉด ์ํธ๊ฐ ์์๊ฒ ๋ ๋๊น์ง ์ฌ์ฉ์์ ์ํธ ์์ฉ ๋ฅ๋ ฅ์ ์ง์ฐ์ํค๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ฑฐ๊ธฐ์๋ ๋ง์ ์ฌ๋๋ค์ด ์์ผ๋ฉฐ ๊ทธ ๋ฐ๋๋ฅผ ๋๋ผ๋ ์๋๋ฐฉ์ ๊ท์ฐฎ๊ฒํฉ๋๋ค. ๊ทธ๋ค์ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํด ํ์ฅ์ ์์ต๋๋ค. ์ ์ฌ๋ฅผ ๋ง์น๋ ๋ฐ ์ค์ํ์ง ์์ ๊ฒ๋ค์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ์ฌ์ดํธ์ ์ํธ ์์ฉํ๋ ๋ฅ๋ ฅ์ด ์ง์ฐ๋์ด ๋งค์ฐ ์ค๋ง ์ค๋ฝ์ต๋๋ค. ๋๋ ๋น์ ์ด ํ๋ ธ๋ค๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋ผ, ๋น์ ์ ์ฐ์ ์์๋ฅผ ๊ณต์ ํ์ง ์๋ ๋ ๋ค๋ฅธ ์ง์์ด ์๋ค๋ ๊ฒ์ ์์์ผํ๋ค๋ ๊ฒ์ ๋๋ค.
์ด ์ง๋ฌธ์ ํนํ ์น ์ฌ์ดํธ์ ๊ฒ์ฌ๋๋ ๋ชจ๋ ๊ด๊ณ ์ ์ ์ฉ๋ฉ๋๋ค. ์ฌ์ดํธ ์์ฑ์๊ฐ ๊ด๊ณ ์ฝํ ์ธ ์ ๋ํด ์๋ฆฌ ํ์ ์ div ๋ง ๋ ๋๋งํ๊ณ onload ์ด๋ฒคํธ์ ๊ด๊ณ ๋ฅผ ์ฝ์ ํ๊ธฐ ์ ์ ์ฌ์ดํธ๊ฐ๋ก๋๋๊ณ ๋ํ ํ์ธ์ง ํ์ธํ๊ณ ์ถ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๋ถํ๋ฆฐ ๊ด๊ณ ๊ฐ๋ก๋๋๋ ๋์ ์ฌ์ดํธ ์ฝํ ์ธ ๋ฅผ ์คํฌ๋กคํ๋ ๊ธฐ๋ฅ์ ์ํฅ์ ๋ฏธ์น๊ธฐ ๋๋ฌธ์ ๊ด๊ณ ๊ฐ ํ ๋ฒ์ ๋ชจ๋ ๋์ ์ง๋ ฌ๋ก๋ก๋๋๋ ๊ฒ์๋ณด๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ํ ์ฌ๋์ ๊ด์ ์ผ๋ฟ์ ๋๋ค.
- ์ฌ์ฉ์์ ๊ทธ๋ค์ด ๋ฌด์์ ์ค์ํ๊ฒ ์๊ฐํ๋์ง ์์๋ณด์ญ์์ค.
- ์ฌ์ฉ์์ ์ด๋ค์ด ์ฌ์ฉํ๋ ๋ธ๋ผ์ฐ์ง ํ๊ฒฝ์ ํ์ ํ์ญ์์ค.
- ๊ฐ ํ์ผ์ ๊ธฐ๋ฅ๊ณผ ์ ์ ์กฐ๊ฑด์ด ๋ฌด์์ธ์ง ํ์ ํ์ญ์์ค. ๋ชจ๋ ๊ฒ์ด ์๋ํ๊ฒ ๋ง๋๋ ๊ฒ์ ์๋์ ์์๊ธฐ๋ณด๋ค ์ฐ์ ํฉ๋๋ค.
- ๊ฐ๋ฐ์ ๋คํธ์ํฌ ํ์ ๋ผ์ธ์ ๋ณด์ฌ์ฃผ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๊ฐ ํ๊ฒฝ์์ ํ ์คํธํ์ญ์์ค. ์ฌ์ฉ์ ํ๊ฒฝ์ ๋ฐ๋ผ๋ก๋ ์์๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํ ์๋ ์์ต๋๋ค (ํ์ด์ง ์์ฑ์ ์๋ฒ ์ธก).
- ํ์คํ์ง ์์ ๊ฒฝ์ฐ ์์๋ฅผ ๋ณ๊ฒฝํ๊ณ ๋ค์ ์ธก์ ํ์ญ์์ค.
- ๋ก๋ ์์์์ ํผํฉ ์คํ์ผ๊ณผ ์คํฌ๋ฆฝํธ๊ฐ ์ต์ ์ผ ์ ์์ต๋๋ค. ํ๋๊ฐ ์๋๋ผ ๋ค๋ฅธ ํ๋๊ฐ ์๋๋๋ค.
- ํ์ผ์๋ก๋ํ๋ ์์๋ฟ๋ง ์๋๋ผ ์์น๋ฅผ ์คํํ์ญ์์ค. ๋จธ๋ฆฌ? ๋ชธ์? ๋ฐ๋ ํ? DOM ์ค๋น /๋ก๋? ์ง์ ์ค์?
- ์ ์ ํ ๊ฒฝ์ฐ ๋น๋๊ธฐ ๋ฐ ์ง์ฐ ์ต์ ์ ๊ณ ๋ คํ์ฌ ํ์ด์ง์ ์ํธ ์์ฉํ๊ธฐ ์ ์ ์ฌ์ฉ์๊ฐ ๊ฒฝํํ๋ ์ ์ง์ฐ์ ์ค์ ๋๋ค. ๊ทธ๋ค์ด ๋์์ด๋๋์ง ์ํ๊ฒ๋๋์ง ํ ์คํธํ์ญ์์ค.
- ์ต์ ์๋ก๋ ์ค๋๋ฅผ ํ๊ฐํ ๋๋ ํญ์ ๊ณ ๋ คํด์ผ ํ ํธ๋ ์ด๋ ์คํ๊ฐ ์์ต๋๋ค. ์์ ๋ ๋ฐ์ ํ์ ํ๋์ ๋๋ค.
๋ต๋ณ
2017-12-16 ์ ๋ฐ์ดํธ
OP์ ํ ์คํธ์ ๋ํด ํ์ ํ์ง ๋ชปํ์ต๋๋ค. ๋๋ ์ฝ๊ฐ์ ์คํ์ํ๊ธฐ๋ก ๊ฒฐ์ฌํ๊ณ ์ผ๋ถ ์ ํ๋ฅผ ํ์ด์์ผฐ๋ค.
๋๊ธฐ์
<script src...>์ ๋ค์ด๋ก๋ ๋ฐ ์คํ๋ ๋๊น์ง ์๋์์๋ ๋ฆฌ์์ค์ ๋ค์ด๋ก๋๋ฅผ ์ฐจ๋จํฉ๋๋ค.
๋ ์ด์ ์ฌ์ค์ด ์๋๋๋ค . Chrome 63์์ ์์ฑ ๋ ํญํฌ๋ฅผ ์ดํด๋ณด์ญ์์ค.
<head>
<script src="//alias-0.redacted.com/payload.php?type=js&delay=333&rand=1"></script>
<script src="//alias-1.redacted.com/payload.php?type=js&delay=333&rand=2"></script>
<script src="//alias-2.redacted.com/payload.php?type=js&delay=333&rand=3"></script>
</head>
<link rel=stylesheet>์๋์ ์คํฌ๋ฆฝํธ ๋ค์ด๋ก๋ ๋ฐ ์คํ์ ์ฐจ๋จํ์ง ์์ต๋๋ค
์ด๊ฒ์ ์๋ชป๋ ๊ฒ ์ ๋๋ค. ์คํ์ผ ์ํธ๋ ๋ค์ด๋ก๋๋ฅผ ์ฐจ๋จํ์ง ์์ต๋๋คํ์ง๋ง ๊ฒ์ ๋๋ค (์คํฌ๋ฆฝํธ์ ์คํ์ ์ฐจ๋จ ์ฌ๊ธฐ์ ์ฝ๊ฐ์ ์ค๋ช ). Chrome 63์์ ์์ฑ ๋ ์ฑ๋ฅ ์ฐจํธ๋ฅผ ์ดํด๋ณด์ญ์์ค.
<link href="//alias-0.redacted.com/payload.php?type=css&delay=666" rel="stylesheet">
<script src="//alias-1.redacted.com/payload.php?type=js&delay=333&block=1000"></script>
์์ ์ฌํญ์ ์ผ๋์๋๊ณ OP์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ ์ ์์ต๋๋ค.
CSS ์ฐ์ :
CSS Download 500ms:<------------------------------------------------>
JS Download 400ms:<-------------------------------------->
JS Execution 1000ms: <-------------------------------------------------------------------------------------------------->
DOM Ready @1500ms: โ
JS ์ฐ์ :
JS Download 400ms:<-------------------------------------->
CSS Download 500ms:<------------------------------------------------>
JS Execution 1000ms: <-------------------------------------------------------------------------------------------------->
DOM Ready @1400ms: โ