我写了一个基于JavaScript的网站,可以输入,编辑和解决Nonograms。您可能知道,解决非图形问题是NP完全问题。
我的第一次尝试是纯粹的(单线程)JavaScript。但是在较大的非图形上,Chrome显示其BSOD并在几分钟后杀死了JS脚本。下一次尝试是使用Web Workers。我拆分求解算法,以便每个工作人员获得一行/列来解决并返回结果。这是一项改进,它能够解决中等大小的非图形。但是,有时浏览器会在一段时间后杀死显示BSOD的JS VM,加上网站没有像我预期的那样真正响应,因为这就是Web Workers的用途,不是吗?
为了“有趣”,我将解决算法移植到Python并使用调用python脚本而不是Web Workers的ajax请求。有趣的是,它甚至比JavaScript慢,但经过一段时间的计算后,请求返回了500内部服务器错误。我相信这是由于CGI脚本在PHP afaik上的最长执行时间是30秒。
CGI的想法不是最好的,因为当多个用户想要解决非图形时,服务器在100%CPU上运行,所以我可能坚持使用客户端计算。
所以问题是,进行这种计算的最佳方法是什么(对于较大的非图形可能需要10分钟)?我认为只要网站保持响应并且只要浏览器不会终止执行任务,执行时间就不是问题。
与此同时,我也在尝试优化递归算法......
谢谢!
答案 0 :(得分:0)
在将信息发布到WebWorkers
之前,您可能会添加一些延迟。如果将流程拆分为足够小的功能,则可以保持页面响应,但需要更长时间才能解决。