2017-05-02 1 views
1

간단한 정렬 알고리즘 데모 응용 프로그램을 만들고 있습니다. 자바 스크립트로 작성된 정렬 알고리즘과 HTML 페이지를 사용해보십시오. 나는 별도로 알고리즘을 테스트하고 잘 작동합니다.Webworker에도 불구하고 UI 요소가 작동하지 않음

자신의 배열을 입력하거나 임의의 배열을 생성 할 수 있습니다. 배열의 크기가 너무 크거나, 생성 또는 정렬 중인지 여부에 관계없이 UI가 중단되므로 이러한 작업을 별도의 스레드에서 수행하는 웹 작업자를 추가했습니다.

앱이 현재 수행중인 작업을 기록합니다. 웹 작업자가 정말로 큰 배열로 작업하기 전에 로그는 프로세스가 완료된 후에 갑자기 나타납니다. 그러나 웹 작업자 덕분에 개별 단계가 완료되는 즉시 로그가 나타납니다. 또한 작업자가 없어도 작업이 완료 될 때까지 모든 것이 고정됩니다.

계산 상 무거운 요소를 웹 근로자에게 위임 한 결과 페이지의 요소가 완전히 상호 작용할 것으로 기대했지만 이것이 사실 인 것처럼 보입니다. 페이지의 모든 버튼 등이 어쨌든 반응하지 않게됩니다. 정확하게 말하면, 그들은 잠깐 동안 대화 형으로 머물면서 멈춰 버립니다. 예를 들어, 마우스 오버 버튼을 사용하면 커서가 모양이 바뀌지 만, 어디로 움직여도 그 모양은 그대로 유지됩니다. 클릭하면 웹 작업자가 작업을 마칠 때까지 클릭이 등록되지 않습니다. 이것은 배열을 생성하거나 정렬하는 데 너무 오래 걸리면 사용자가 웹 워커를 멈추기 위해 클릭 할 수있는 '중지'버튼이 있기 때문에 문제입니다. 상황이 계속되면 멈춤 버튼이 멈추고 클릭하면 작업자가 어쨌든 끝내고 효과가 없어지면 효과가 사라집니다.

페이지의 컨트롤을 사용할 수 있도록하려면 어떻게해야합니까? 감사!

답변

0

그래서 나는 같은 문제라고 생각하는 것을 만났으며 며칠 동안 그것과 함께 시간을 보냈습니다. 고맙게도 나는 이것을 가로 질렀습니다 : https://nolanlawson.com/2016/02/29/high-performance-web-worker-messages/

웹과 메시지를 게시 할 때 어떤 이유로 Chrome과 Firefox에서 보이는 것처럼 데이터를 포장하는 과정에서 주 스레드를 정지시킵니다.

메시지를 게시 할 때 JSON을 사용하여 모든 객체를 완벽하게 직렬화하면 모든 것이 훨씬 원활하게 실행됩니다.

관련 문제