当前位置:首页 > 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线程:

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和循环模拟阻塞效果:

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实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 //…

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback)…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选…