2012-01-23 2 views
1

This question's answers을 제안합니다. 텍스트 상자의 내용이 변경된 경우 즉각적인 (흐림을 기다리지 않고) 감지 할 수있는 유일한 방법은 window.setInterval입니다. 이벤트를 통해 일부 텍스트 상자 변경이 발생할 수 있습니다. 키 누름 이외.텍스트 상자의 내용이 변경된 경우 배터리 친화적 인 방법으로

내 데스크톱 PC에서도 몇 가지 텍스트 상자를 확인하는 비교적 간단한 처리기로 실행되는 500msec setInterval을 사용하여 IE 또는 Firefox가 CPU의 중요한 부분을 씹는 것을 보았습니다. 데스크톱 PC에서는 정상이지만 랩탑이나 모바일에서는 배터리 수명에 해를 끼칩니다.

jquery를 사용하여 CPU 사용을 최소화하는 좋은 방법은 무엇입니까? 텍스트 입력란에 대한 변경 사항 (클립 보드 붙여 넣기, 아약스 업데이트, 키 누르기 등)에 대한 응답으로 빠른 업데이트를 제공합니까?

답변

4

onBlur은 반드시 객체를 변경하지 않고 객체에서 벗어 났을 때입니다.

onChange은 값을 변경 한 객체에서 벗어난 후에 만 ​​호출됩니다.

이 중 하나가 사용자의 요구에 맞아야합니다. 그렇지 않은 경우, 다양한 키 누르기 이벤트가 각 문자 변경에 대해 트리거됩니다.

이러한 변수가 없으면 정기적으로 단일 자바 스크립트 변수를 업데이트해도 선택기가 일부 비정상적인 DOM 동작을 일으키지 않는 한 많은 처리 능력을 사용할 수 없습니다.

사용해보기 : id로 요소를 참조하고 해당 참조를 js 변수에 저장하십시오. 이 참조를 통해 다른 변수를 업데이트하고 변경하는 것은 간단한 작업입니다.

+0

제안 사항을 구현하고 주요 CPU 문제를 발견했습니다. 요소의 text() 설정을 반복적으로 설정하는 비교 버그입니다. 텍스트가 이전 텍스트와 같았더라도 하나의 CPU 코어를 업데이트하는 데 50 %의 CPU 코어가 필요했습니다. IE9는 현재 1 % 미만입니다. 하지만 파이어 폭스는 여전히 가장 간단한 선택기를 사용하여 DOM에서 읽는 데 2 ​​% -3 %를 사용하고 있습니다 (js 변수에서도 캐싱). 더 이상 나는 andi의 제안이 필요함을 의미하는 것을 내릴 필요가있다. 나는 너의 대답 모두를 upvoting. 두 사람 모두 받아 들일 수 있기를 바랍니다. –

2

해당 텍스트 상자의 포커스가있는 상태에서 window.setInterval (또는 setTimeout) 검사기를 실행하고 흐리게 처리하면이를 제거하십시오. 그렇게하면 커서가 텍스트 상자에 없을 때 CPU 전원을 사용하지 않게됩니다.

+0

그게 효과가있는 동안, 왜 나쁜 선택기가 없다면이 조작이 측정 가능한 시간이 걸리는 이유를 생각할 수 없으므로 권장하지 않습니다. – mvrak

+0

나는 동의한다,이 가동은 처음부터 그렇게 나쁘지 않다. 나는이 남자의 질문에 대답하고있다 ... 아주 작은 문제에 대한 미묘한 개선. =) – andi