我在JS中创建了一个小游戏,其中发生了很多事件并且经常同时发生(比如修改html元素或全局js变量..)
为了解决这个问题,我每隔1ms使用一个“setInterval”循环来查看表中是否有事情要做(“请求”)
每次我需要在页面上更改某些内容时,我会填充表格,但有时我需要同时更改几个不同的内容。
问题在于它不会同时更新,而是在同时存在2,3个或更多请求时会延迟。我希望这是即时的,如果在同一时间有2个请求或更多要做,它应该同时执行并且不延迟每个请求(请求的示例:更新jquery中div的宽度)
感谢您的帮助..
add_filter( 'wp_nav_menu_items', 'add_cart_count', 10, 2 );
function add_cart_count( $items, $args ) {
if ($args->theme_location != 'primary'){
$items .= '<a class="cart-contents" href="'.WC()->cart->get_cart_url().'">Shopping Bag ('.WC()->cart->cart_contents_count.')</a>';
$items .= '<div class="search-button"><i class="fa fa-search"></i></div>';
}
return $items;
}
答案 0 :(得分:2)
轮询队列不是编写Javascript的合适方法。由于浏览器中Javascript的单线程特性,如果您在短时间内连续轮询队列,则几乎不会在任何应用程序中获得良好的响应。
Javascript是从头开始构建的一种事件驱动语言,当它以事件驱动的方式使用时,它可以有效地工作。
您必须拥有将事物放入队列的事件。您应该在队列中添加某些内容时触发队列处理,而不是有一些轮询队列的单独计时器。触发队列的处理当事件被添加到队列时也会立即响应而不是有计时器延迟。
并且,进一步处理队列中的事件后,您的代码应检查队列中是否还有其他内容并进行处理。这样,您可以在单个线程环境中尽可能地将所有排队的项目处理到尽可能接近队列的时间。
此外,主浏览器Javascript是单线程的,因此您一次只能处理一个排队的项目。您无法在同一时刻处理多个请求。浏览器确实有与webWorkers的真实线程,但那些无法访问DOM,因此可能与此无关。
此外,根据HTML5规范,setInterval()
的最短时间是5毫秒,并且只有在当时没有其他代码运行时才会这样。
答案 1 :(得分:0)
刚刚找到导致延迟的原因....我有一个函数是在两个值(最小值最大值)之间创建一个随机重复时间,但是我的数学失败并且函数返回一个随机值偶然你给它两个相同的最小值和最大值..