web page loading 속도 향상시키는 방법 / page loading / fast page loading
우연찮게 찾아들어간 page 에서 web page 의 loading 속도를 향상시키는 법을 이야기 하고 있어서 간략하게 정리 해 본다.
여기서 이야기하는 바는 현재 web browser 에서는 javascript 가 download 끝나기 전에 다른 것들을 download 하지 않는데, trick 을 써서 javascript 와 page 에서 요청하는 다른 file 들을 동시에 download 하도록 하는 것이다.
web browser 에서 file 을 download 하는 시점
web browser 는 javascript 가 download 되고 run되는 동안에는 다른 file 들을 download 하지 않는다.(ref. 3 의 그림을 보면 이해가 쉬울 듯 하다.)
javascript 가 page 가 필요로 하는 download 할 파일들을 바꿀 수 있기 때문이다.(예를 들면, javascript 로 image 를 안보이게 설정할 수도 있고...) 그래서 javascript 가 download 되기전에 다른 파일들을 download 하는게 의미가 없다.
body tag 의 끝나는 지점에 script tag 를 삽입
그러면 모든 것들이 먼저 다운로드 되고나서 javascript 를 다운로드 하게 된다.화면에 보여지는 속도는 향상될 수 있지만, javascript 가 실행전의 시간은 줄일 수 없다. 이 방법은 loading 등의 화면을 보여줄 때 좋다.(see also 1. 참조)
fast downloading
빠른 인터넷 속도를 가진 visitor(방문자) 들에게 빠른 load 를 가능하게 할 수 있다.script tag 에 javascript 의 경로가 있는 아래와 같은 경우에는
<script src="javascript.js"></script>javascript 를 전부 다운로드 받기 전에는 다른 녀석들을 download 하지 않으며, javascript 의 download 가 끝난 이후에 다른 파일들(이미지등)은 동시에, 2개내지 6개씩 다운로드하게 된다.(browser 의 설정에 따라 다르다.)
<script src="javascript2.js"></script>
여기서는 이를 피하기 위해서 script tag 에 작은 크기의 javascript 를 두고, 그 javascript 에서 head 에 새로운 script tag 를 넣는 방식을 취한다. 그러면 이렇게 요청된 javascript file 들은 browser 에서 정해놓은 동시에 다운로드 받는 file 수에 해당하지 않기 때문에, 다른 file 들을 download 받으면서 javascript 를 동시에 다운로드 받을 수 있는 것이다.
function addJavascript(jsname) { var th = document.getElementsByTagName('head')[0]; var s = document.createElement('script'); s.setAttribute('type','text/javascript'); s.setAttribute('src',jsname); th.appendChild(s); } addJavascript('myscript1.js'); addJavascript('myscript2.js');
이 방법은 page downloading 하는 것보다 큰 대역폭(bandwidth) 를 가진 visitor 에게는 빠른 방식이지만, 만약 browser 에서 정해놓은 동시에 다운로드 가능한 file 의 개수를 다운로드 받는데에 자신의 bandwidth 를 모두 쓰는 경우에는, 당연한 이야기이지만, page 에서 요청한 file 들을 모두 다운로드 받고나서 javascript 를 받아야 하기 때문에 조금 느려진다.
HTML 5 async attribute
ref.2 에 보면 html5 부터는 script 에 async attribute 를 제공한다고 한다. safari 에서는 조금 다르지만, defer 라는 script 를 제공한다고 한다.<script src="jquery.js" type="text/javascript" charset="utf-8" async defer></script>위와 같은 방식으로 사용하면 된다. ref. 2 에서는 댓글에서는 다른 javascript 와 dependency 가 없는 경우에 사용하면 될 것 같다고 한다.
defer 와 async 의 차이점은 ref. 3 에서 확인할 수 있다.
See Also
Reference
- Faster Loading Web Pages, About.com
- http://davidwalsh.name/html5-async
- http://peter.sh/experiments/asynchronous-and-deferred-javascript-execution-explained/
댓글 없음:
댓글 쓰기