这不仅仅是WebGL,所有GPU代码都可以冻结计算机。问题是,与CPU不同,当前的GPU不可抢占。这意味着如果你给他们30分钟的工作时间,他们将会执行这项工作30分钟,并且没有办法阻止他们像使用CPU那样做其他事情。 (没有多任务处理)
良好操作系统的解决方案是CPU运行超时,如果GPU花费太长时间操作系统重置GPU(有效地重新启动它)。自Windows Vista以来,Windows已经做到了这一点。 macOS最近只是增加了它,问题在于他们没有设计操作系统来恢复像MS这样的情况,所以需要更长的时间才能完成所有工作。
好的是没有太多的动机来实现它的目的。如果您访问某个锁定您的计算机的网站,则可能会停止访问该网站,因此问题通常会自行更正,因为人们希望您访问其网站。
另一方面,对于像shadertoy这样的网站来说,这是一个问题,人们会写出非常长且复杂的着色器,这些着色器只能在顶级GPU上运行,而不能在普通笔记本GPU上运行。
至于你能做些什么。
否则,即使浏览器可以做的事情也不多。 The browser has no idea if the shader is going to be fast or slow before it runs it。