Page 1 of 1

다수의 XMLHttpRequest 필요시 효율

Posted: 2006 02 12 06:26 59
by 박민권
역시 이번에도 제목 글자수의 압박이;;

AJAX 채팅 프로그램을 만들고 있습니다.
(블로그와 이곳에 스크립트 관련 글을 줄줄이 올리는 이유죠.ㅎㅎ)

크게 데이터를 읽는 부분과 데이터를 전송하는 부분에서 XMLHttpRequest 를 통한 통신이 이루어지고 있습니다.

아래 예중 어느것이 가장 효율적일지 의견을 들어보고 싶습니다.
1. XMLHttpRequest 객체 하나를 전역으로 선언해서 사용한다.

2. XMLHttpRequest 객체를 읽기, 쓰기에 각각 하나씩 전역으로 선언해서 사용한다.

3. 함수 종료시 소멸될 수 있도록 지역으로 선언하여 필요할때 생성 후 소멸시킨다.
효율을 떠나 3번이 가장 마음에 들기는 하는데 말이죠. :)

Posted: 2006 02 13 11:05 24
by hiphapis
1. XMLHttpRequest 객체 하나를 전역으로 선언해서 사용한다.

2. XMLHttpRequest 객체를 읽기, 쓰기에 각각 하나씩 전역으로 선언해서 사용한다.

3. 함수 종료시 소멸될 수 있도록 지역으로 선언하여 필요할때 생성 후 소멸시킨다.
ㅎㅎ, 제가 차례대로 했던 방법이랑 비슷하네요..
처음에는, 1번방법 + 3번방법으로 구현을 했었는데,
DB Connetion 때문에, 조금 느려지더라구요..
그래서, 2번방법 + 3번방법으로 바ㅤㄲㅝㅅ습니다.

로딩할 Content의 량이 적다면 상관없지만,
좀 무겁고, 그리고, 이벤트가 이뤄지는 곳이 분할되어 있다면..
2번 + 3번 방법으로 하시는게 좀 더 좋지 않을까..생각합니다 :)

Posted: 2006 02 13 17:12 53
by 박민권
hiphapis wrote:
1. XMLHttpRequest 객체 하나를 전역으로 선언해서 사용한다.

2. XMLHttpRequest 객체를 읽기, 쓰기에 각각 하나씩 전역으로 선언해서 사용한다.

3. 함수 종료시 소멸될 수 있도록 지역으로 선언하여 필요할때 생성 후 소멸시킨다.
ㅎㅎ, 제가 차례대로 했던 방법이랑 비슷하네요..
처음에는, 1번방법 + 3번방법으로 구현을 했었는데,
DB Connetion 때문에, 조금 느려지더라구요..
그래서, 2번방법 + 3번방법으로 바ㅤㄲㅝㅅ습니다.

로딩할 Content의 량이 적다면 상관없지만,
좀 무겁고, 그리고, 이벤트가 이뤄지는 곳이 분할되어 있다면..
2번 + 3번 방법으로 하시는게 좀 더 좋지 않을까..생각합니다 :)
이 부분에 대해서는 누구나 비슷한 고민을 하게 되나 보네요. :)
전 이벤트가 나눠어져 있지만 B가 동작시 A는 동작하지 않도록 하여 만에하나 문제의 발생요지를 막을까 생각입니다.

1번 방법으로 했을때 open() 메소드의 세번째 인수를 false로 줘서 동기방식으로 구현한다면 B가 동작하고 A가 동작하려 할때 같은 XMLHttpRequest 객체를 사용하므로 A는 동작을 미루게 될까요? ㅎㅎ

좀 귀찮지만 궁금해서 한번 실험해봐야겠네요.

Posted: 2006 02 13 17:49 23
by hiphapis
박민권 wrote:1번 방법으로 했을때 open() 메소드의 세번째 인수를 false로 줘서 동기방식으로 구현한다면 B가 동작하고 A가 동작하려 할때 같은 XMLHttpRequest 객체를 사용하므로 A는 동작을 미루게 될까요? ㅎㅎ
제가 제대로 이해를 한것인지 모르겠네요..ㅎㅎ;
만약 같은 Request를 사용한다면, Error가 날것 같은데요..ㅎㅎ;

저같은 경우, A, B 가 있다고 가정을 하면..
  • 1) A이벤트를 행해지면, 같이 B도 바뀐다.
    2) B이벤트는 B만 바뀐다
였는데,

저는 그냥 true로 하고..onreadystatechanged 에서
작업 끝내고, B를 작동시키는 형식으로 했죠..

Code: Select all

doSomething(A);
if(eventVal == A)
{
	doSomething(B);
}
이런, 형식으로요..
범용적으로 사용하기엔 무리가 있지만, 한 프로그램에 종속적으로 사용한다면, 문제될건 없겠죠..

그 URL 입니다.
http://210.118.153.182/Ajax/Calendar.php
Ajax + 웹표준화 스터디겸 만든거라, 흉보지 말아주세요 :oops:

Posted: 2006 02 13 18:28 31
by 박민권
hiphapis wrote:
박민권 wrote:1번 방법으로 했을때 open() 메소드의 세번째 인수를 false로 줘서 동기방식으로 구현한다면 B가 동작하고 A가 동작하려 할때 같은 XMLHttpRequest 객체를 사용하므로 A는 동작을 미루게 될까요? ㅎㅎ
제가 제대로 이해를 한것인지 모르겠네요..ㅎㅎ;
만약 같은 Request를 사용한다면, Error가 날것 같은데요..ㅎㅎ;
테스트 해보니 하나의 XMLHttpRequest 객체를 동시에 사용할 경우 에러가 납니다.
동기/비동기 둘다 같습니다. 내부적으로 잠금을 처리하지 않을까 싶었지만 아니네요.
동기방식으로 하면 서버의 응답이 있기전까지 전체 스크립트가 진행되지 않습니다.
php의 sleep() 로 딜레이를 주어 테스트 해봤습니다.
hiphapis wrote: http://210.118.153.182/Ajax/Calendar.php
Ajax + 웹표준화 스터디겸 만든거라, 흉보지 말아주세요 :oops:
흉볼게 뭐가있나요. :)
제 생각이지만 달력 숫자가 작아서 클릭이 불편할 수도 있으므로 달력 숫자 링크의 display 속성을 block 으로 하면 편하지 않을까 싶습니다.

Code: Select all

td a.Day{display: block;}
제가 쓰는 해상도가 2048x1536 이라서요. :)

Posted: 2006 02 13 18:39 32
by hiphapis
박민권 wrote:테스트 해보니 하나의 XMLHttpRequest 객체를 동시에 사용할 경우 에러가 납니다.
동기/비동기 둘다 같습니다. 내부적으로 잠금을 처리하지 않을까 싶었지만 아니네요.
동기방식으로 하면 서버의 응답이 있기전까지 전체 스크립트가 진행되지 않습니다.
php의 sleep() 로 딜레이를 주어 테스트 해봤습니다.
ㅎㅎㅎ;
저도 예전에 똑같은 방법으로 Test했었었는데 ;)

박민권 wrote: 제 생각이지만 달력 숫자가 작아서 클릭이 불편할 수도 있으므로 달력 숫자 링크의 display 속성을 block 으로 하면 편하지 않을까 싶습니다.

Code: Select all

td a.Day{display: block;}
제가 쓰는 해상도가 2048x1536 이라서요. :)
원래는 td 에다가, onClick event를 줘서 처리를 했는데
Javascript 가 Disable 되었을때, 작동하게 할려고 수정을 하다보니...

Javascript일때 td, Disalbe일때 a
에 event가 일어나도록 수정할려고 했는데,
귀찮아서, 그냥 a tag로 전부 수정해버렸거든요..ㅎㅎ

어차피, 이거 사용하거나, 서비스할려고 만든게 아니라..
순전히 스터디 + 재미 로 만든거라..ㅎㅎ