js中特殊的宏任务

更新日期: 2019-10-11阅读: 2k标签: 任务

一.setImmediate

目前只有IE10+和NodeJS支持该api

立即触发回调函数,使其进入宏任务队列(macro task queue)

语法

// 只有一个参数
setImmediate(callback)

比setTimout(fn, 0)的执行顺序要快,性能也更高。因为setTimeout(fn,0)实质上会有4ms的延迟。


二. MessageChannelAPI

1. 作用

MessageChannelAPI允许我们新建一个消息通道,并通过它的两个属性port1和port2进行通信。

实质是通过一个端口发送数据,另一个端口通过onmessage监听另一个端口发送的数据。

触发方式:

同步触发,即port发送数据时立即触发。所以会比setTimeout(fn,0)触发要早。


2. 使用

MessageChannel是个构造函数。使用前需要创建实例,生成一条消息通道。

const channel = new MessageChannel();

实例自带两个端口,即消息通道的两端

const port1 = channel.port1;
const port2 = channel.port2;

示例:(模拟setimmediate)

const channel = new MessageChannel();
const port1 = channel.port1;
const port2 = channel.port2;
port1.onmessage = function(e) {
  console.log(e.data);
}
setTimeout(function() {
  console.log(‘settimeout‘); //4ms
})
port2.postMessage(‘hello world‘);  //立即
Promise.resolve().then(() => {
  console.log(‘then‘); // 微任务
})
// 运行结果
then 
hello world
settimeout


链接: https://fly63.com/article/detial/6381

PHP实现执行定时任务的几种思路详解

PHP定时任务是一个非常有意思的东西,虽然说实话,用系统的php.exe去直接执行php文件的效率更高,但是对于很多普通站长而言,虚拟主机是无法做到直接php执行原生程序的。本文仅提供一些解决的思路

使用 queueMicrotask 来执行微任务

写这篇文章的原因是因为,这几天在看 core-js 的源码,然后发现了 queueMicrotask 的实现。由于之前做的项目,对于微任务的执行需求,一般是使用 asap 这个库来完成的,如果没有使用这个库的话

Node.js实现定时任务

在本文中,我们将研究如何在 Node 程序中创建和使用 Cron 作业。为此我们将创建一个简单的程序,该应用程序会自动从服务器中删除自动生成的 error.log 文件。 Cron 作业的另一个优点是

JS微任务 宏任务,Promise、setTimeout、setImmediate运行顺序实测

虽然理论上应当先运行Promise,再运行setTimeout。但是由于历史版本或使用polyfill,使得Promise未必优先运行。setImmediate未必比setTimeout早运行

关于宏任务、微任务和事件循环

为什么会是这样的输出顺序呢?这就要提到事件循环、宏任务和微任务的概念了。众所周知,JavaScript是一个单线程的语言,单线程意味着代码会自上而下依次执行,如果有一个耗时的操作,那么页面就会卡死,基于此,便有了异步的概念

搞懂JS的事件循环(Event Loop)和宏任务/微任务

首先大家都知道JS是一门单线程的语言,所有的任务都是在一个线程上完成的。而我们知道,有一些像I/O,网络请求等等的操作可能会特别耗时,如果程序使用同步模式等到任务返回再继续执行,就会使得整个任务的执行特别缓慢

如何在 JavaScript 中使用宏

在语言当中,宏常见用途有实现 DSL 。通过宏,开发者可以自定义一些语言的格式,比如实现 JSX 语法。在 WASM 已经实现的今天,用其他语言来写网页其实并不是没有可能

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!