当前位置:首页 > JavaScript

js 实现阻塞

2026-01-30 13:00:03JavaScript

同步阻塞(单线程阻塞)

在JavaScript中,由于单线程特性,可以通过同步操作(如循环或同步I/O)阻塞主线程。例如:

// 通过无限循环阻塞
while (true) {
  console.log("Blocking main thread");
}

// 通过同步I/O阻塞(Node.js环境)
const fs = require('fs');
fs.readFileSync('largefile.txt'); // 同步读取大文件

alert/confirm/prompt 阻塞

浏览器提供的对话框API会阻塞UI线程:

js 实现阻塞

alert("This blocks the UI until dismissed");
const result = confirm("Continue?");
const name = prompt("Enter your name");

Atomics.wait(SharedArrayBuffer)

使用Web Worker和SharedArrayBuffer的原子操作实现阻塞:

// 主线程
const sharedBuffer = new SharedArrayBuffer(4);
const sharedArray = new Int32Array(sharedBuffer);

// Worker线程中
Atomics.wait(sharedArray, 0, 0); // 阻塞直到被唤醒

Promise + 循环模拟

通过未解决的Promise和循环模拟阻塞效果:

js 实现阻塞

function fakeBlock(ms) {
  const start = Date.now();
  while (Date.now() - start < ms) {}
}
fakeBlock(5000); // 阻塞5秒

Web Worker同步通信

在Worker中使用postMessage+onmessage实现伪同步:

// Worker.js
self.onmessage = (e) => {
  if (e.data === 'block') {
    const result = heavyTask();
    self.postMessage(result);
  }
};

// 主线程
worker.postMessage('block');
worker.onmessage = (e) => {
  console.log(e.data);
};

Node.js同步模块

Node.js中部分模块提供同步API实现阻塞:

const crypto = require('crypto');
const hash = crypto.createHash('sha256').update('data').digest('hex'); // CPU密集型计算

注意事项

  • 浏览器环境避免长时间阻塞主线程,会导致页面无响应
  • Node.js中同步操作可能影响事件循环性能
  • Web Worker和SharedArrayBuffer需考虑兼容性和安全策略

标签: js
分享给朋友:

相关文章

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…