2012-04-19 2 views
3

저는 지난 몇 개월 동안 많은 SVG를 사용하고 많은 요소를 가지고있는 프로토 타입 페이지를 제작 해 왔습니다. JavaScript와 서버 측 (많은 AJAX)에서 처리되는 많은 양의 데이터도 있습니다. 페이지에 수천 개의 이벤트 리스너가 있습니다. 꽤 무거워 요.JavaScript 성능을 향상시키는 데 필요한 제한은 무엇입니까?

JS에서 이와 같은 작업을 수행하는 데있어 가장 큰 장애물 중 하나는 싱글 스레드 (single-threadedness)입니다.이 스레드는 예를 들어 계산을 10 초 수행해야 할 때 페이지를 잠급니다. 이를 해결할 수있는 몇 가지 전략이 있지만, IE에서 웹 작업자를 지원할 때까지는 우아한 해결책이별로 없습니다. 또한이 페이지는 500MB 이상의 메모리를 사용할 수 있습니다. 크롬은이 문제로 인해 어려움을 겪고 있습니다.

궁금한 점은 자바 스크립트에서 이와 같은 것을 구축 할 수있는 가능성입니다. 코드가 최적화 된 것은 아니지만이 페이지에서 처리하는로드가 필요하다고 가정 해 봅시다. 또는 더 많이 필요하다고 가정합시다.

사용자가 응용 프로그램을 사용하려면 적어도 중간 범위 데스크톱이 있어야한다고 가정 해 봅시다.

JavaScript를 많이 쓰는 사람들이 있습니까? 메모리 및 CPU 성능면에서 처리 할 수있는 한계는 무엇입니까? 클라이언트 측과 서버 측 중 어느 정도를 수행해야합니까?

편집 : 모든 사람이 질문을 잘못 해석하는 것은 필연적이었습니다. 에 대한 조언을 요청하는 것이 아닙니다. JS 코드을 최적화하는 방법입니다. 난 처리 및 데이터가 클라이언트에서 처리하는 것이 얼마나 합리적인 지 묻습니다.. 예, 이것은 하드웨어에 달려 있습니다. 최신 브라우저 인 중간 범위 데스크톱 인이라고 말하면서 답을 찾으려고했지만 실제로는 그렇지 않습니다. 나는 개념적으로 알고 싶다. 무거운 처리를 수행하는 JavaScript는 얼마나 강력한가? 자바 스크립트에서 무거운 처리를 수행 할 수 있습니까?

나는 모두가 지금 그것을 얻길 바랍니다. 이는 서버 측과 클라이언트 측의 비율입니다. 반복 횟수가 1000000 인 루프를 실행해야하고 JS의 X 반복과 서버의 Y 반복 사이의 선택에 비용이 들지 않는다면 JavaScript가 처리 할 수있는 양은 어느 정도입니까?

+6

페이지에서 500MB의 메모리를 사용하는 경우 – Ibu

+3

부터 시작해야합니다. 사람들은 거의 항상 비효율적 인 코드를 통해 항상 자바 스크립트를 '한계'에 맞 춥니 다. 자신의 설명을 통해 가장 먼저해야 할 일은 무엇이 진행되고 있는지 최적화하는 것입니다. 단일 변경으로 수천 개의 DOM 호출 잠금 또는 다른 것을 확보 할 수 있지만 심층 분석없이 실제로 어떤 일이 일어나고 있는지 말할 수는 없습니다. –

+0

메모리 주석에 대한 응답으로 변수가 있습니다. 하나의 SVG 모듈은 형상 뷰어입니다. 더 많은 지오메트리 = 더 많은 메모리와 내가 궁금해하는 점은 계산 형 기하학 유형 최적화 작업을 시작해야한다는 것입니다. 500MB가 너무 높으면 가장 합리적인 금액은 얼마입니까? –

답변

0

당신이 직면 할 수있는 장애물은 실제로 사용자가 사용하는 시스템입니다. 여전히 512MB RAM의 펜티엄을 사용하는 사용자가 부상을 당하기 위해 IE6을 모욕하는 경우 웹 응용 프로그램이 손상됩니다. 또 다른 문제는 브라우저 자체입니다. DOM이 느립니다. 가능한 한 DOM을 만지는 것을 피해야합니다.

코드를 개선하고 메모리를 많이 차지하거나 너무 많은 처리를 수행하여 문제를 해결할 수 있습니다. 예를 들어, 현재 단일 스레드는 시간 초과 및 콜백을 사용하여 해결할 수 있습니다. 여기는 매우 긴 루프를 처리하는 one of my demos입니다. 하나는 동기화 작업을 수행하고 다른 하나는 비동기 작업을 시뮬레이트하기 위해 타임 아웃을 사용합니다.

또한 클라이언트 측 응용 프로그램을 "씬 클라이언트"로 만들어 데이터를 처리하고 서버로 처리 할 수 ​​있습니다. HTTP 요청으로 인해 사용자가 죽을 수도 있지만 앱에서 다른 작업을하는 동안 서버를 "두 번째 스레드"로 취급합니다. 예를 들어, 게임처럼. 점수, 랭킹, 매치업 및 모든 것을 서버에서 계산합니다. 클라이언트 쪽에서 그렇게하지 마십시오. 서버에서 진행되고있는 모든 작업에 대해 클라이언트를 "디스플레이"하십시오.

+0

최적화 및 서버 측 대 클라이언트 측 처리의 개념을 이해합니다. 나는 "한계는 무엇입니까?"라고 묻습니다. 아무도 나에게 대략적인 숫자를 아직주지 않았다. X 데이터 및 처리량을 감안할 때 X에서 JavaScript의 몇 퍼센트를 처리 할 수 ​​있습니까? 중급 컴퓨터에서 처리 할 수있는 최대 메모리 용량은 얼마입니까 (최신 브라우저 만 해당)? –

+1

실제로 숫자를 얻을 수 없습니다. 모든 사람은 다른 기계를 사용합니다. Intel Ultrabook에서 Chrome을 실행하는 사용자가 허용하는 것은 Asus Eee의 IE8에서 실행되는 사용자에게는 허용되지 않을 수 있습니다. 확인해야 할 변수는 타겟 잠재 고객입니다. ux.stackexchange의 사람들처럼 항상 다음과 같이 말합니다. "대상 고객을 찾기 위해 일부 인구 통계를 작성하십시오." – Joseph

+6

"한계가 무엇인지"묻는 것은 "얼마나 큰 물이 얼마나 큽니까"와 같은 질문입니다. – RobG

0

돌로 작성된 제한이 없습니다.

내 컴퓨터 대 내 컴퓨터에서 수행 할 수있는 작업 내 레시피를 조회하는 것과 네 살짜리 넷북 비교는 다릅니다. 메모리, 속도 등은 브라우저, CPU, RAM 및 기타 컴퓨터에서 실행중인 내용에 따라 다릅니다. 다른 플랫폼에서 코드를 실행하면 코드가 멈추고 프로세스를 중지하기 위해 3 손가락 경례를 수행해야합니다.

  • 스마트 이벤트 처리를 수행하고 모든 요소가 아닌 하위 수준에서 클릭을 탐지합니다.
  • 집중 처리를 위해 서버에서 최대한 밀어냅니다.
  • 코드를 최적화하고 루프를 반복 할 때마다 화면을 업데이트하지 않도록하십시오.
  • 가능한 경우 http 요청을 결합/최소화합니다.
4

1) 수천 개의 이벤트 수신기가 이벤트 버블 링 을 통해 통합 될 수 있습니다. 서로 다른 이벤트 타겟에 대해 서로 다른 서브 루틴을 가진 하나의 마스터 이벤트 핸들러를 사용하면 수많은 특정 핸들러보다 성능이 향상됩니다.

2) "웹 근로자가 IE에 의해 지원 될 때까지는 우아한 해결책이별로 없습니다."

금 반대가, 몬 프레 르 : 브라우저를 동결하는 것은 (나는 가능한 모든 경우 각 콜백이 100ms 아래를 유지하려고 것) 작은 덩어리의 처리를하고 다음 단계 이후를 실행하여 완화 할 수있다 브라우저가 상태를 업데이트하고 사용자 입력을 처리 할 수있는 기회를 제공하는 시간 초과입니다.

3) 많은 요소가있는 경우 HTML5 Canvas 요소가 SVG보다 적절한 솔루션이라고 생각됩니다.

4)

알고리즘 최적화는이 같은 한계를 밀고있는 모든 차이를 만들 "내 코드는 지금까지 최적화에서입니다."

5) DOM 액세스가 매우 비쌉니다. 따라서 DOM 조작의 수를 최소화하는 을 사용하면 엄청난 이득을 얻을 수 있습니다. 한 번에 하나씩 각 요소를 건드리지 않아야합니다. 전체 엉망을 재구성하고 하나의 DOM 조작으로 모든 것을 대체하는 것이 더 좋습니다.

관련 문제