2010-08-02 5 views
3

씬 클라이언트 (bosanova 터미널)를 사용자의 프런트 엔드로 사용하는 웹 앱이 있습니다. 씬 클라이언트와 PC 사이에서 JavaScript의 성능 차이가 나타났습니다. 터미널은 IE6에 내장 된 윈도우 XP를 실행하고 있으며, 폼 엘리먼트에 대한 간단한 검증을하기 위해 프로토 타입 JS 프레임 워크를 사용하고있다.씬 클라이언트와 PC 간의 자바 스크립트 성능

예를 들어 다음은 필자가 필수 입력란이 채워지는 것을 확인하는 것입니다.
.numeric 및 .alphanumeric에 대해이 두 가지가 더 있습니다. 즉, 테스트하여 해당 양식 양식을 제출하지 못하도록 오류를 푸시합니다.

$$('.requiredfield').each(function (elem){ 
    if (($(elem).value.length == 0) || ($(elem).value == null)) { 
     $(elem).addClassName("nonvalid"); 
     $(elem).siblings().first().addClassName("error"); 
     requiredErrors.push($(elem)); 
    } 

}); 

제가 보는 문제는 파이어 폭스 나 IE에서 PC 페이지 5-20 필드가있는 형태의 검증 밖으로보다 더 처리하는 반 두 번째는 어쩌면 걸립니다. 그러나 터미널에서 유효성 검사를 실행하는 데는 15 ~ 25 초가 소요되며 동일한 페이지보다 빠릅니다. 필자가 언급 한 것처럼 필자는 IE6에서 이것을 PC에서 테스트했으며 성능이 저하되는 것을 보지 못했습니다. Bosanova에 대한 전화로이 게시물을 올리기 직전에 수행 한 단말기의 메모리를 업그레이드 할 수 있었으며 그 결과는 변경되지 않았습니다.

스크립트를 변경하여 양식 필드를 한 번만 돌리고 .required .numeric .alphanumeric을 처리하면 확실합니다. 지금은 PC와 터미널 (씬 클라이언트)간에 성능 차이가 있습니다. 왜 그런지 궁금합니다.

누구든지 문제 해결 경험이 있거나 프로토 타입/자바 스크립트가 터미널에서 이러한 성능 손실을 겪는 이유를 알고 있다면 몇 가지 팁을 크게 고맙게 생각합니다.

업데이트 : >>>>>>>>>>>>>>>>>

은 아직도 테스트하고이 문제를 조사하고 내가이 공유하고자하고있다. 우리는 어제 새로운 터미널을 받아서로드하고 테스트했습니다. IE6를 실행하는 새로운 터미널은 다른 브라우저와 마찬가지로 완벽하게 작동했습니다. 물론 그것은 PC보다 느린 편이었습니다. 1. 실행중인 IE6과 2. 씬 클라이언트 였지만 속도 차이는 수백 초 였고 동일한 스크립트를 실행하는 10-50 초 차이 였기 때문입니다. 2 개의 다른 씬 클라이언트의 물리적 사양은 다르지 않습니다. 1.2 ghz (이전)와 1.6 ghz (신규) 메모리는 동일했으며 HD/DOM은 512MB (이전)와 1gig (신규)였습니다. 아직도 오래된 터미널에서 무슨 일이 일어나고 있는지 지적 할 수는 없지만 터미널의 특정 모델/개정판과 관련이있는 것으로 보입니다.

업데이트 : >>>>>>>>>>>>>>>>>

답변

0

내가 프로토 타입에 대해 너무 많이 알고하지 않지만, 대신 지역 변수에 해당 요소를 캐시한다 그 주위에 $ 함수를 감싸는 것.

$$('.requiredfield').each(function (elem){ 
    var el = $(elem) 
    if ((elem.value.length == 0) || elem.value == null)) { // is elem.value ever null? 
     el.addClassName("nonvalid"); 
     el.siblings().first().addClassName("error"); 
     requiredErrors.push(el); 
    } 
}); 

나는 모든 성능 문제를 해결할 것이라고 생각하지 않지만 아마도 몇 초 면도 면도 할 것입니다. 앞서 언급 한 변경 사항을 수행하여 각 클래스 유형에 대한 모든 요소를 ​​반복하지 않고 모든 루프/클래스를 한 루프에서 검사하도록 제안합니다.

아마 같은이 (일도가 꺼져있을뿐만 그래서 다시, 나는 프로토 타입을 모르는) :

var errors = {}; 

var rules = { 
    ".required": function (elem) { return elem.value.length == 0; }, 
    ".alphanumeric": function (elem) { return /[a-zA-Z0-9]+/.test(elem.value); } 
}; 

$$("input", "#your_form_id").each(function (elem) { 
    var el = $(elem) 
    var classes = (function() { 
     var cls = elem.className.split(' '), classMap = {}; 
     for (var k in cls) classMap[cls[k]] = true; 
     return classMap; 
    })(); // get the classes for this element 

    for (var rule in rules) { 
     error[rule] = []; 
     if (rule in classes && !rules[rule](elem)) { 
      el.addClassName("nonvalid"); 
      el.siblings().first().addClassName("error"); 
      errors[rule].push(el); 
     } 
    } 

}); 

귀하의 오류가 필요한 규칙을 실패한 요소에 액세스 할 수 ... errors에있을 것입니다, 당신은 errors["required"]은 배열을 반환합니다.

+0

감사합니다. 나는 아직도 자바 스크립트를 배우고 있다는 것을 기꺼이 인정할 것이다. 저는 프론트 엔드 자바 스크립트에서 프로젝트가 필요함에 따라 지난 한 해 동안 교묘히 다루어 온 서버 측 프로그래머입니다. 나는 아침에 그것을 약간 재 작업하고 내가 견딜 수 있는지 알아 보겠습니다. – Nathan

+0

업데이트하기 만하면됩니다. 몇 가지 제안 사항을 추가하고 스크립트의 속도를 높였습니다. 이렇게하면 사용자가 실수를 할 때까지 많은 논리를 우회 할 수있었습니다. 그래서 이것은 도움이되었습니다 (15-20보다는 8-15 초). PC와 Thinclient 간에는 여전히 큰 차이점이 있습니다. – Nathan

+0

@Nathan : 많은 유효성 검사 라이브러리 중 하나를 사용해 보셨습니까? 많은 사람들이 당신의 삶을 훨씬 쉽게 만들어 줄 것입니다. 아주 특별한 습관이 필요한 경우가 아니라면 필요한 모든 기능을 모두 캡처 할 것입니다. 사실 저에게는 잠시 동안 일해 온 저 자신의 도서관이 있습니다. –

2

글쎄, IE6의 자바 스크립트 엔진은 느린 — 마이크로 소프트가 웹에 대한 실제 응용 프로그램 개발은 물론의 가 액티브로 수행해야한다고 주장했다 때 시간에서 날짜 기억이다. 씬 클라이언트에서 저렴한 CPU를 사용하면 이 실제로으로 느려질 것입니다.

당신은 조금 선택기를 변경하여 해당 코드를 속도를 높일 수 : 팁에 대한

$$('input.requiredfield').each(function (elem){ 
+1

처음에 CPU를 생각했지만 내 고객 중 한 명이 CPU가 두 배인 테스트 상자 크기의 터미널이 있습니다. 거의 동일한 페이지를 실행하는 데 실제로 시간이 오래 걸렸습니다. 실제로는 약 25 필드에 걸쳐 유효성 검사를 실행하는 데 거의 40 초가 걸립니다. – Nathan

+0

내게 일어난 일이라면, 아마 작은 타이머 루틴을 작성하고 시간이 소비되는 곳을 좁히기 시작할 것입니다. 재 레이아웃을 유발하는 클래스 이름을 추가하는 것과 같은 것들도 IE6에서는 정말 느릴 수 있습니다. 그러나 그 외에도, 나는 그 클라이언트에서 실행되는 IE6가 XP가 설치된 PC의 IE6과 다르다는 것을 알게되면 놀랄 것입니다. – Pointy

+0

예, 박쥐 바로 앞에 타이머를 넣으십시오. 많은 다른 양식은이 코드를 다양한 숫자의 필수/숫자/영숫자 필드와 함께 사용하며 아무도 자원 돼지처럼 뛰어 넘지 않습니다. 각각의 시간은 예상대로 양식의 필드 유형 수에 비례합니다. 터미널에서 터미널보다 훨씬 높습니다. 나는 터미널이 연결을하는 방식에 차이점을 보았습니다 (연결 방식이 더 많은 포트를 열었습니다). 연결이되면 표준 PC보다 많았지 만, 브라우저가 갈수록 놀랐을 것입니다. 이제는 궁금해지기 시작했습니다.) – Nathan

관련 문제