当前位置:首页 > 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实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…