자바스크립트 최적화에 관해서..
Request의 요청수를 최대한 없애고 캐쉬를 활용하고 gzip을 제 아무리 활용해서 0.5초 많게는 1초를 앞당겼다고 치죠..
그게 확실한 최적화 일까요? 모 최적화라면 세심한 부분까지도 신경쓰는 것이 맞겠지요..
자 그럼 대고객 서비스를 하는 사이트가 하나 있습니다. 다음이나 네이버같은 대형 사이트라고 이야기 해 봅시다.
최적화 방법론에 맞추어서 Request의 수를 줄이기 위해서 js파일을 한 바구니에 담아 봅시다.
이렇게 한바구니에 담은 js를 utils.js라고 묶어 버렸습니다. 그런데 하나로 묶어 버리니 Request를 줄여서 좋기는 하나..
- 한 두개의 메소드를 사용하기 위해 매번 묶음을 로드 하는 것이 맞을까요?
- 한 두개의 메소드를 따로 빼서 js파일로 따로 뺀다면 파일이 잘개 잘개 쪼개 질텐데 그렇다면 최적화 방법에 어긋나지 않을까요?
- 따로 뺄 필요 없이 jsp나 php, asp에 자바스크립트 블럭을 넣어서 관리 하는 것이 맞을까요? 그게 맞다면 재사용은 물건너 가지 않을까요?
혹시 이런 경험은 없었습니까?
<html>
<head>
</head>
<script src=http://example.com/js/common.js type="javascript/text"></script>
<script src=http://example.com/js/utils.js type="javascript/text"></script>
<script src=http://example.com/js/main.js type="javascript/text"></script>
<script src=http://example.com/js/validate.js type="javascript/text"></script>
<script src=http://example.com/js/chkUser.js type="javascript/text"></script>
<script src=http://example.com/js/chkBrowser.js type="javascript/text"></script>
<script type="javascript/text">
function clickHandler(evt){
goUrl("/index.jsp");
}
</script>
저 goUrl메소드는 어디에 들어 있을까요? 한번에 찾을 수 있는 감이 오나요??
또한 저 위의 js파일을 하나로 묶어버린다면 정말 끔찍한 일이 벌어 지지 않을까요?
다음으로 대 고객 서비스를 해야 하는데 천하무적 common.js를 감히 건드려서 배포할 수 있는 배짱이 있는 사람은 몇명이나 될까요?
common.js하나 고쳤는데 결제 서비스가 먹통이 되버린다던가..
사이트의 레이아웃이 깨진다던가..
아예 사이트가 로딩중에 멈춰 버린다던가 해버린다면.. 초당 몇 천명이나 몇만명이 방문하는 사이트라면..쉽게 할 수 있을까요?
아.. staging서버 배포절차가 있을 테니....이렇게 진행하는 곳도 있을 겁니다..
로컬에서 Test를 하고 개발이 완료되면 개발서버에 올립니다. 실 서버에 배포되기 전에 스테이징 서버에서 qa가 테스트를 합니다.
테스트가 완료되면 실 서버에 배포가 진행되니 그런 문제는 없습니다.. 이렇게 말씀 하실 수도 있겠네요..
그렇다면 static에 관련된 서버도 몇벌이 존재한다..?? 음.. 돈있고 인력있고 여유 있다면....관계 없겠죠.. (ㅡ,.ㅡ+);
이런 사이트도 있더군요...
다들 아시겠지만 inc_header 혹은 header_inc 같은 레이아웃의 공통 요소인 헤더가 존재 할 수 있습니다.
footer도 될 수 있겠지요 :)
inc_header에
<script type="text/javascript">
function a(){
//로직
}
function b(){
//로직
}
</script>
갑자기 header_inc의 자바스크립트를 수정할 일이 생겼습니다..
과감하게 inc_header.jsp같은 파일을 배포 할 수 있을까요? 초당 동접자만 해도 몇천에서 몇만인데.... 서버가 좋다면야.. ^^ 과감히
배포해야할 서버만 해도 몇 천대가 있는 곳이라면 적용이 완료 되기까지 많은 시간이 걸려야 하겠죠..
자 문제 나갑니다..
자바스크립트의 최적화란 Request를 줄이는 것이 맞을까요?
jsp에 기술하는 것이 맞을까요?
그것도 아니면 잘개 잘개 쪼개는게 맞을까요? ^^;;
비현실적인 이야기가 아닙니다.. 현실입니다.. 이런 현실을 격으시는 분들이 소수일 수 있을 수는 있지만..
한가지 더...
대고객 서비스를 하는 대형 사이트들은 CDN(Contents Delivery Network )이라는 것을 사용합니다. 정적인 요소들은 CDN에 넣어 두고 메모리에 캐쉬에 올려 두는 것이죠..빠른 서비스를 위해서 입니다..
클라이언트가 이미지를 요청하면 CDN에 속해 있는 서버는 그 이미지가 메모리에 올라가 있으면 하드 액세스를 하지 않고 캐쉬에 있는 것을 바로 리턴해 줍니다. 거기다 제일 가까운 거리에 있는 서버가 응답을 주기 때문에 반응 속도 또한 빠릅니다..
다만 일정 시간이 되면 Header의 lastModified가 같지 않을 경우 갱신을 합니다.
자 근데 여기서 중요한 것은 갑작스레 자바스크립트 파일을 고쳐야 할 경우가 발생 했습니다. 최대한 빠른 시간내에 전파를 해야 하는데...CDN이 바로 인식하게 하는 방법은 없을까요? 물론 CDN의 장비에 있는 해당 리소스를 갱신하는 툴은 많이 있습니다만.. 더 간단하고 확실하고 빠르게... 말이죠.. 서버사이드 언어에 스크립트 블럭을 만드는 것은 .. 위에서 아니라고 판명이 났고..
2년 전 이런 고민을 했었습니다...
최적화란 용량을 줄이고 Request의 숫자를 줄이는 일이 아니라는 것을 말하고 싶었고...그건 일부에 지나지 않는 다는 것을 말하고 싶었습니다. 0.5초 ~ 1초 물론 의미 있는 숫자입니다.. 하지만 속도 때문이라면 쓸대 없는 이미지 없애는 것이 훨씬 효과적입니다 ^^;;
초초초 울트라 슬림화를 하더라도 유지보수라는 문턱이 있습니다.. 모두 만족해야 하죠...
답없는 포스트 올렸네요 ^^ 정말 답이 없을까요?


댓글을 달아 주세요
비슷한 고민에 대한 답으로 ASP.NET AJAX 3.5 SP1 에서는 Script Combining이란 기능이 추가되었습니다. 10개 이상의 script를 불러와야 하는 경우에 내부적으로 합쳐서 한두번의 호출만으로 가능하게 되는... 아래는 관련 문서(걍 참고로...)
http://blogs.infragistics.com/blogs/tony_lombardo/archive/2008/07/28/script-combining-what-s-the-big-deal.aspx
좋은 정보 감사드립니다
그런데 ..위에서 이야기한 goUrl을 찾기 위해서는? 10개중 한개를 뒤져야 하는 걸까요?
배포의 이슈는 없을까요?
좋은 하루 되세요 ^^
좋은 지적이신것 같습니다. 스크립트이기 때문에 편집 중에 goUrl을 찾기 위해서는 말씀하신 모두 뒤지는 방법을 써야할 것 같네요.(디버깅 시라면 중단점을 걸고 찾거나) 물론, 편집 시에도 개발툴에서 제공하는 기능들로 찾으면 더 쉽게 찾을 수 있긴 할 것 같고요.
감사합니다.
이렇게 스크립트를 묶어주는 것이 배포 하는 데 있어서 특별히 이슈가 되는 것이 있을지는 잘 모르겠네요.
Script Combining을 사용할 경우는 스크립트를 모두 하나로 묶어 버리기고 빈 공간도 없애 버리기 떄문에 모니터링 툴같은 걸로 뒤져봐도 알기 어렵겠죠.. 원본을 봐야 한다는 이야기가 되겠네요..
배포의 이슈라고 함은 .net은 잘 안해봐서 모르겠지만 서버가 1000개 이상이라는 가정을 해보신다면... 전부 다 적용되는데 어느정도의 시간이 걸릴까요? 그리고 그 서버들이 동접자가 많은 사이트라면 컴파일을 할 수 있는 CPU의 여력이 남아 있을까요? 설령 컴파일을 한다해도 그 당시 서비스를 받고 있는 사람들에게 영향을 끼치지 않을까요? 그런 영향을 없애기 위해서 Request의 요청을 막아 버리고 한대씩 반영한다고 쳐도 .. 시간이 많이 걸리겠죠..
그런 배포의 이슈입니다.. 그냥 이런 이슈가 나올 수 있다는 전제를 깔아 본 것입니다.
ㅋㅋ 넘 억어지인가요? ^^;
제 경험입니다.. 2년전 격었던..
중스님 좋은 하루 되세요! 감사합니다.
좋은 내용 감사합니다. 원본을 보지 않고 하는 것은 쉽지 않겠네요. 그리고 말씀 하신 것처럼 서버가 많은 상황이라면 일시에 배포되는 것이 쉽지는 않을 것 같구요(새벽에 많이 하는 점검을 이용? ㅎ) 좋은 하루 되세요~
아.. 마우스 이번주 목요일 배송 된다고 확인했습니다. 기다리게 해서 지송... 암튼 마우스는 학실히 만족하실 거예요 ㅎ
^^;; 중스님 반갑습니다~ ^^)/
아마 제가 제시한 건 일반적인 상황이나 환경은 아닐겁니다..그런데 그런 여건속에 있다는 가정하에 해결책을 제시해보려고... 글을 적어 봤어요.. 명확한 해결책이 될지는 모르겠지만요..
곧 포스팅을 하게 될거 같습니다.. ^^;;
마우스 언제 주나요? ㅋㅋㅋ
내일 이군요
그렇게 말씀하시니 정말 궁금해지는데요.
감사합니다 _(__)_
아..목요일 배송으로 들었는데, 그게 until인지 그날인지 좀 불확실해서.. 흑..