js的执行机制同步异步

JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。
这是因为Javascript这门脚本语言诞生的使命所致——JavaScript是为处理页面中用户的交互,以及操作DOM而诞生的。比如我们对某个DOM元素进行添加和删除操作,不能同时进行。应该先进行添加,之后再删除。
单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。
这样所导致的问题是:如果JS执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。
同步和异步
为了解决这个


js是如何单线程 执行
04-08 551
js是如何单线程 执行
JS执行 机制
JS执行 机制一. 什么是同步与异步(1) 同步(2) 异步二. 单线程(1) js是单线程三. process.nextTick与setImmediate方法(1) process.nextTick(2) setImmediate四.事件循环(1) 运行栈(2) 任务队列(3) 事件循环五.宏任务和微任务(1) 宏任务(2) 微任务六. promise和async函数(1) promise函数(2) async函数七. 测试题 一. 什么是同步与异步 (1) 同步

按顺序执行

//例子:
consol


如何通过setTimeout理解 JS运行 机制 详解
12-10
序 setTimeout()函数:用来指定某个函数或某段...解析:无论setTimeout的 执行时间是0还是1000,结果都是先输出3后输出2,这就是面试官常常考查的 js运行 机制的问题,接下来我们要引入一个概念, JavaScript 是单线程的。
详解 javascript new的运行 机制
10-22
主要介绍了 javascript new的运行 机制的相关资料,需要的朋友可以参考下
“import ... =“ 只能在 TypeScript 文件中使用
当你遇到这个问题很苦恼。
Redis 应用与原理(二)
03-17 1060
更好的阅读体验。
Vue字符串里的中文数字转换为阿拉伯数字
最新发布
03-20 262
【代码】Vue字符串里的中文数字转换为阿拉伯数字。
js获取年月日
03-19 598
js获取年月日
搭建vue项目
03-17 434
解决:无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1,因为在此系统中禁止 执行脚本。Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。将vscode右击----属性---兼容性---管理员运行。2、下载node. js(win7建议下载12.0.0)所在位置 行:1 字符: 16。1、下载vscode开发工具。源文本中存在无法识别的标记。这里使用@符号时,要加。
从零开始学习typescript系列5: typescript特殊符号之感叹号、问号、双问号
03-20 215
感叹号:强制链式调用。
java和 js 的websocket代码 机制 详解
05-27
WebSocket是一种基于TCP协议的全双工通信协议,可以在客户端和服务器之间建立实时的双向通信。Java和 JS都提供了对WebSocket的支持,下面分别介绍它们的代码 机制

Java的WebSocket代码机制

  1. 引入WebSocket依赖

在Maven项目中,可以在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>javax.websocket</groupId>
    <artifactId>javax.websocket-api</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>org.glassfish.tyrus</groupId>
    <artifactId>tyrus-server</artifactId>
    <version>1.13.1</version>
</dependency>
  1. 创建服务器端点

使用javax.websocket.server.ServerEndpoint注解创建WebSocket服务器端点,指定路径和处理类:

@ServerEndpoint("/websocket")
public class WebSocketServer {
    // 处理连接建立事件
    @OnOpen
    public void onOpen(Session session) {
        // ...
    }

    // 处理收到消息事件
    @OnMessage
    public void onMessage(String message, Session session) {
        // ...
    }

    // 处理连接关闭事件
    @OnClose
    public void onClose(Session session) {
        // ...
    }

    // 处理错误事件
    @OnError
    public void onError(Throwable error) {
        // ...
    }
}
  1. 启动WebSocket服务器

使用javax.websocket.server.ServerContainer启动WebSocket服务器,指定端口和路径:

Server server = new Server("localhost", 8080, "/path");
ServerContainer container = ContainerProvider.getWebSocketContainer();
container.addEndpoint(server);
server.start();
  1. 创建WebSocket客户端

使用javax.websocket.ClientEndpoint注解创建WebSocket客户端,指定路径和处理类:

@ClientEndpoint("/websocket")
public class WebSocketClient {
    // 处理连接建立事件
    @OnOpen
    public void onOpen(Session session) {
        // ...
    }

    // 处理收到消息事件
    @OnMessage
    public void onMessage(String message, Session session) {
        // ...
    }

    // 处理连接关闭事件
    @OnClose
    public void onClose(Session session) {
        // ...
    }

    // 处理错误事件
    @OnError
    public void onError(Throwable error) {
        // ...
    }
}
  1. 连接WebSocket服务器

使用javax.websocket.ClientManager连接WebSocket服务器,指定路径和URI:

ClientEndpointConfig config = ClientEndpointConfig.Builder.create().build();
ClientManager client = ClientManager.createClient();
client.connectToServer(new WebSocketClient(), config, new URI("ws://localhost:8080/path"));

JS的WebSocket代码机制

  1. 创建WebSocket对象

使用WebSocket构造函数创建WebSocket对象,指定服务器地址和路径:

var socket = new WebSocket("ws://localhost:8080/path");
  1. 注册事件处理程序

使用WebSocket对象的onopen、onmessage、onclose和onerror属性注册事件处理程序:

socket.onopen = function(event) {
    // ...
};

socket.onmessage = function(event) {
    // ...
};

socket.onclose = function(event) {
    // ...
};

socket.onerror = function(event) {
    // ...
};
  1. 发送消息

使用WebSocket对象的send方法发送消息:

socket.send("Hello, server!");
  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值