百科问答小站 logo
百科问答小站 font logo



setTimeout 真的有用吗? 第1页

  

user avatar   Ivony 网友的相关建议: 
      

实时刷新并获取数据显示。

不用setTimeout或者同类方法你告诉我这怎么实现?


下面的答案都扯太远了吧,这不就是setTimeout最基本的用途么?


user avatar   nan-47-77-64-47 网友的相关建议: 
      

在浏览器中需要运行的不只有你的js代码,还有比如页面渲染器,比如css动画,多媒体播放。

js代码会阻止页面更新,这里不仅是你的事件监听函数不会被调用,而是整个页面都不会产生变化。这是因为js可能对dom做出修改,所以浏览器在js运行期间是没办法知道dom被改成了什么样的。

(这也就是很多ui库会使用单线程模型的原因)

其实这并不必然要求js直接运行在渲染器线程中,而只需要在js运行期间给dom加写锁。。。但是这约等于js会阻止渲染器运行,所以和单线程模型也没什么区别了。

还有比如事件,比如xhr的onreadystatechange,比如需要继续执行的async函数。

然而一旦你的代码连续执行时间超过6ms,因为js会阻止更新,所以在144Hz的设备上你就一定会错过至少一次在显示刷新期间更新页面渲染的机会,从而导致页面帧率下降。这个数值在60Hz的设备上是16ms,在240Hz的设备上是4ms。虽然说在高刷屏(144+)上错过一两次刷新几乎不会被发现,但是低于60Hz的帧率就会是大问题了。

而且更麻烦的是,这段时间并不全都是可以给js用的:浏览器也要用。

而settimeout0可以向那些需要被运行的东西让出时间。

不过如果你现在问的话,raf以及ric可以代替settimeout0的很多场景(尤其是向ui让出执行权以保证用户体验流畅),await也可以让出时间,所以你现在说settimeout0没有那么有用了,倒也不能说错。

(然后raf表示高刷太难受了,软帧率限制还是需要settimeout)

不过如果你真的遇到了必须要连续执行的耗时操作,那么worker可能的确是你唯一的选择。




  

相关话题

  假如女朋友(前端女)专门做了一个网页送给你作生日礼物,你会很感动吗很喜欢这份礼物吗? 
  前后端分离开发为啥要做成单页面的? 
  有多大比例的前端工程师,能在合理的时间内独立开发出一个足以供商业网站使用的文本编辑器? 
  请问一下各位大佬,js的静态方法有啥作用呀,写工具类吗,小菜鸡想不出来静态方法有啥作用? 
  22岁,师范大学妹子,学的物理专业,现在转行学习前端,大家有什么好的或者不好的建议吗? 
  用 Git 一定要用命令行吗?用命令行一定高贵吗? 
  《阮一峰版快速排序完全是错的》一文是否存在事实错误? 
  为什么Vue在国际上越来越没影响力? 
  为什么能够提供BFC的inline-block元素却不能嵌套block元素? 
  如果说 Rust/WASM 会逐渐蚕食 JavaScript 生态,那将以怎样的路径进行? 

前一个讨论
RabbitMQ,ZeroMQ,Kafka 是一个层级的东西吗?相互之间有哪些优缺点?
下一个讨论
我就想来问一下,你们的老公在家做家务都是需要人盯/反复说/反复劝/反复提示/软硬兼施后才做的吗?





© 2025-01-31 - tinynew.org. All Rights Reserved.
© 2025-01-31 - tinynew.org. 保留所有权利