좋아, 그래서 "로딩 중 ..."메시지를 백분율 표시기로 설정하여 프로젝트를 마무리하려고합니다. 충분히 쉬워. 문제는 내가 Raphael/SVG
행의 6000 개가 조금 넘는 행을 2,000 행 + 새로운 노드를 DOM
에 삽입한다는 것입니다. 따라서 메시지를로드 할 때 % 표시기를 변경하려고 할 때 실제 문제가 발생하지만 Raphael
까지 모든 브라우저 노드가 만들어지기 전에 브라우저가 멈추었습니다.큰 SVG 렌더링 중에 DOM 조작
내가 시도하고 내가 알고 :
1) 나는 count
VAR을 증가 내 모든 6000 코드를 통해이 기능을 분산시켜 적재 %를 계산하는 아주 간단한 기능을 가지고있다. 그렇게하면 실제로드 프로세스를 시뮬레이션합니다. 새로운 것은 없다.
2) 저는이 기능이 마술처럼 작동한다는 것을 알고 있습니다. 실제로 로딩 과정을 통해 저는 0 %에서 100 %로 바뀌 었습니다.
3)이 함수의 내부에서 새 값을 얻을 때마다 - 화면의 %를 업데이트하려고합니다. 그러나 즉시 100 %가 될 때까지 전체 페이지로드까지 아무 일도 일어나지 않습니다.
4) 표시기를 업데이트 할 수있는 유일한 방법은 업데이트 할 때마다 alert()
으로 설정하는 것입니다. 그것이 경보 팝업이 화면에 나타나면 내 표시기를 변경하는 마법의 먼지입니다.
5) 나는 등 더미 루프를 실행, visibility
을 전환 position
을 변경, 자식 노드를 만드는 것처럼, setTimeout
및 많은 다른 사람을 시도했습니다 ... 아무것도 SVG
렌더링 중 ... 도왔 - 모든 것이 바로 서브 제로 냉동된다.
6) 화면에 달라 붙지 않는 유일한 것은 내 작은 CSS 애니메이션 (어두운 부분이있는 회전하는 원)입니다 (물론 FF는 제외 - CSS 애니메이션조차도 제외).
7) 나는 다른 곳에서 alert()
동작을 시뮬레이션 할 수 없다는 것을 알았으므로 여기서는 아무런 행운이 없습니다.
8) 내가 defer
및 async
시도했습니다,하지만 난로드 문제가 없습니다, 내가 렌더링/DOM 주입 문제가 ...
1) 알고 싶습니다 - 모든 svg-node 주입/조작을 어떻게 결정합니까?
2) 그렇다면 전체 렌더링/주사 프로세스를 중단하고 내 자신의 작업을 수행하는 방법은 callback
입니까?
3) 그런 다음, 방법)))?
4를 다시 시작합니다) 아니면 내가 놓친 뭔가 ...
한 번에 2000 개의 노드를 삽입하지 마십시오. 100 회 주사하고, 계량기를 업데이트 한 다음, 다시 100 회 주사하십시오. – dandavis
나는 그것을 시도했다. 문제는 파서가 미터기를 업데이트하기 위해 멈추지 않는다는 것이다. 다음 주입 라인을 읽는 것으로 시작한다. –
실제 작업에 도움이 될 수 있도록 일부 작업이나 바이올린을 붙여 넣으십시오. 작동 – MarmiK