나는 Nonograms을 입력하고 편집하고 해결할 수있는 JavaScript 기반 웹 사이트를 작성했습니다. 아시다시피, 노 그램을 푸는 것은 NP 완전 문제입니다.웹 사이트에서 방대한 계산을 처리하는 방법은 무엇입니까? 웹 작업자 또는 CGI?
첫 번째 시도는 순수한 (단일 스레드) JavaScript입니다. 그러나 더 큰 노 그램에서 Chrome은 몇 분 후에 BSOD를 표시하고 JS 스크립트를 삭제했습니다. 다음 시도는 Web Workers입니다. 각 작업자가 하나의 행/열을 가져 와서 결과를 반환하도록 해결 알고리즘을 분할했습니다. 이것은 개선되었고 중간 크기의 노 그램을 해결할 수있었습니다. 하지만 여전히 웹 브라우저가 만들어 졌기 때문에 웹 브라우저가 예상보다 빨리 응답하지 않는 경우가 있습니다.
그냥 "재미"때문에 파이썬에 해결 알고리즘을 포팅하고 웹 작업자 대신 파이썬 스크립트를 호출하는 아약스 요청을 사용했습니다. 흥미롭게도 JavaScript보다 느렸지 만 계산 시간이 지나면 500 개의 내부 서버 오류가 반환되었습니다. 이것이 PHP afaik에서 30 초인 CGI 스크립트의 최대 실행 시간 때문이라고 생각합니다.
여러 사용자가 노 그램을 해결하기를 원할 때 서버가 100 % CPU에서 실행되므로 CGI 아이디어가 가장 좋지 않으므로 아마 클라이언트 측 계산을 고수 할 것입니다.
그래서이 계산을 수행하는 가장 좋은 방법은 무엇입니까 (더 큰 노 그램은 10 분이 소요될 수 있습니다)? 웹 사이트가 응답을 유지하고 브라우저가 실행 작업을 죽이지 않는 한 실행 시간은 문제가되지 않는다고 생각합니다. 한편
, 나는 또한 재귀 알고리즘 ....감사를 최적화하기 위해 노력하고있어!
이미했습니다. 나는 브라우저가 현재 해결 중임을 보여주는 gif를 사용하고 있습니다. jQuery show/hide를 사용하고있었습니다. 그러나 나는 즉시 노동자들을 시작할 때 나타나지 않았다. 그래서 나는 2 초의 지연을 도입했다. 그러나 근로자가 계산을 시작하고 크롬 프로세스가 100 % CPU에서 실행되는 즉시 웹 사이트가 응답하지 않습니다. – jaw
@ebeb 그리고 당신은 그 옆에 끊임없이 움직이는 것이 아무것도 없다고 확신합니까? 좀 더 명확한 대답을하기 전에 코드를보아야 할 것입니다. –
그래, 파이썬 버전을 사용하기 위해 ajax 호출로 Worker postMessage 호출을 대체하자마자 페이지가 반응하기 때문이다. 나는 그 문제를 보여주는 간단한 예를 모으려고 노력한다. – jaw