我希望Javascript代码可以无限制地操纵html中的某个对象,
但是,我只能使用setTimeout("function()", 0)
而无法使用while(1)
实施例:
while
:https://gist.github.com/Asoul/e5dd3bd38eef4ca239cb
setTimeout
:https://gist.github.com/Asoul/bda34fa2f70e4077ec12
我不知道为什么while(1)
无法在我的Chrome上运行
SetTimeout
有时可以正常工作,但如果我的代码中有很多setTimeout
或某些未知原因,则会滞后。
示例:http://www.csie.ntu.edu.tw/~b00902036/run_neo/run_neo.html
(向上,向左,向右使用。我努力避免滞后,但有时它仍然会发生。)
我想使用纯CSS,而不是画布,并希望游戏可以毫无滞后地玩。
答案 0 :(得分:3)
您无法使用while
的主要原因是因为javascript是 单线程 。如果您使用while(1)
,该函数将永远不会退出,所有其他交互都将被冻结。
SetTimeout有时可以工作,但是如果我的中有很多setTimeout 代码或一些未知的原因,它会滞后。
这也是因为javascript的单线程性质,如果有一个功能需要很长时间才能完成,它将主宰主线程。
希望游戏可以毫无滞后地玩。
您需要避免在 所有功能 中长时间运行。如果您无法避免这种情况,请尝试使用setTimeout
将长时间运行的操作拆分为多个部分。
例如:如果您有一个for循环处理100条记录,您可以将其拆分为10个单独的迭代。