본문 바로가기
DOM, Script

오랜 시간 동작되는 스크립트에 대한 브라우져별 대처와 원인??

by eqzero 2010. 12. 8.

간혹  웹서핑중에
이 페이지의 스크립트로 인해 Internet Explorer 실행의 속도가 느려질 수 있습니다. 스크립트를 계속 실행할 경우 컴퓨터가 응답하지 않을 수 있습니다. 스크립트 실행을 중단하시겠습니까?
위와 같은  알렛창을 본적이 잇을것이다. 아쉽게도 이런메시지가 나온다면 십중팔구는 스크립트가 무한루프에 빠졋다고
봐도 되지 싶다.;;

브라우져별로 위와같이 무한루프 또는 너무 오랫동안 실행중임을 알려주는 알렛을 보여주는거는 브라우져마다 차이가 있다.

1. IE 
    - ie의 경우는 스크립트에 의해 실행된 문장의 수를 모니터링한다. 이후 실행된 문장의 수가 최대수(기본값 5백만) 보다
      많이 실행된다면 위와같은 알렛이 뜨는것이다.
      혹시나 무한루프는 아니지만 스크립트가 완료되는데 더 문장의 수를 늘려야 한다면
      http://support.microsoft.com/kb/175500 에서 해결책을 제시해준다.

2. 파이어폭스
   - 파이어폭스는 스크립트가 실행되는 시간을 모니터링한다. 그래서 기본적으로 지정된 10초보다 더 지속될경우 위와같은
      메시지를 만나게 된다.

3. 사파리
   - 사파리도 파이어폭스와 동일하게 실행되는 시간을 모니터링한다 파폭과 차이점은 기본 지정시간이 5초로 짧다.;;;

4. 크롬1.0버젼
   -  자바스크립트의 실행시간에 제한을 두지 않는다 메모리를 다 써버리면 프로세스가 죽는다.;;
      음.. 크롬의 자바스크립트 엔진이 타 브라우져보다 빠르니깐 메모리 다 쓸때까지 그냥 무시해버리는건가? ;;

5. 오페라
   - 오페라는 크롬보다 더 막장이다. 아에 아무런 조치를 취하지 않는다.ㅡㅡ;;.. 스크립트 동작이 완료될때까지 기다린다..;

스크립트는 단일 쓰레드 기반이기때문에 어느 하나 스크립트가 너무 많은 시간을 사용한다면 다른 스크립트는 마냥 기다릴수밖에 없는 상황이다.
일반적으로 스크립트 작성시 권고하는 실행시간은 100밀리초보다 길지 않아야 한다.

위와 같은 메시지를 만나게된다면 해당 스크립트 찾아 다음 사항을 확인해보자
 - 너무 많은 DOM 작업
 - 너무 많은 반복문
 - 너무 많은 재귀 함수 사용 (자바스크립트 엔진은 재귀 호출의 횟수를 제한하고 있지만 되도록이면 재귀호출은 사용하지 말도록하자;; 자칫 무한루프로 가는 지름길이 될수도 있다..-_-;;;)

참고 도서  : O'REILLY. Even Faster Web Sites(초고속 웹사이트 구축)