认识ajax同步(sync)与异步(async)区别的小例子

1.了解console.time()与console.timeEnd()

console.time()和console.timeEnd()可以开启一个计时器,可以计算中间代码的执行时间,传入一个字符串参数相当于它的名字。

  		console.time('abc');
        for (var i = 0; i < 100000000; i++) {}
        console.timeEnd('abc');

2.异步与同步

简单理解:
在很多人排队买彩票时,你排着队,然后能走开做其他事情就是异步
在很多人排队买彩票时,你只能排队,不能走开去做其他事情就是同步

3.异步与同步小案例

①异步案例:
注意: 01time.php是我本地服务端的一个数据接口

		var xhrAsync = new XMLHttpRequest();
        // open 方法的第三个参数是 async 可以传入一个布尔值,默认为 true异步,false则为同步
        xhrAsync.open('GET', '01time.php', true);
        console.time('async');
        xhrAsync.send();
        console.log(xhrAsync.responseText);
        console.timeEnd('async');

输出结果:
在这里插入图片描述
②同步案例:

  		var xhrSync = new XMLHttpRequest();
        xhrSync.open('GET', '01time.php', false);
        console.time('sync');
        xhrSync.send();
        console.log(xhrSync.responseText);
        console.timeEnd('sync');

输出结果:
在这里插入图片描述

4.小案例总结

  • 同步该种模式已近过时了,控制台发出警告了
  • 同步模式 ajax 操作会有楞等的情况(阻塞的情况)发生,也就是先执行完且接收到响应体才继续执行下面
  • 同步与异步的ajax区别在于 send 方法会不会出现等待情况,异步不会等待,而同步会等待
<think>好的,用户想了解同步和异步编程的概念及主要差异。我需要先回顾一下同步和异步的基本定义,然后找出它们的核心区别。首先,根据引用[1],同步和异步关注的是消息通信机制。同步是调用方等待被调用方返回结果,而异步则是调用方继续执行,被调用方通过回调等方式通知结果。这点很重要,得作为主要区别之一。 然后,引用[3]举了B/S模式和AJAX例子。同步情况下,用户提交请求后必须等待服务器处理完毕,期间不能做其他事情,而异步则允许用户在等待时继续操作,比如AJAX技术。这说明同步会导致阻塞,异步则非阻塞,这也是关键差异。 接下来,引用[2]和[4]提到异步编程的应用,比如多线程提高并发能力,以及异步编程需要注意的方面,比如事件驱动、回调函数等。需要将这些点整合到差异分析中,比如执行流程、资源利用率和复杂度等方面。 用户可能需要了解实际应用场景,比如什么时候用同步,什么时候用异步。同步适合简单、顺序执行的任务,而异步适合需要高并发或避免阻塞的场景,比如GUI应用或网络请求处理。 还要注意编程模型的不同,同步通常是顺序结构,而异步涉及回调、Promise或async/await等模式。同时,错误处理在异步中可能更复杂,因为回调链可能导致错误难以追踪,这也是需要注意的差异。 最后,要确保回答结构清晰,分点说明概念、差异、应用场景和实例,帮助用户逐步理解。可能需要生成相关问题,比如性能影响、实际应用案例或者如何选择两者,但用户这次没有要求生成问题,所以先集中在回答上。 检查是否有遗漏的点,比如同步的简单性vs异步的复杂性,资源占用情况,以及引用是否正确。确保使用正确的中文表达,避免技术术语使用不当。现在可以组织内容,先定义同步和异步,然后分点列出差异,再举例说明,最后总结应用场景。</think>### 同步异步编程概念及差异分析 #### 一、核心定义 1. **同步(Synchronous)** 调用方发出请求后,必须等待被调用方返回结果才能继续执行后续代码,**执行流线性且阻塞**。例如: ```python result = sync_api_request() # 程序在此阻塞,等待响应 print(result) # 必须等待上一步完成后执行 ``` 引用[3]中的例子:同步如传统B/S模式,用户提交请求后浏览器无法进行其他操作,直到服务器返回结果[^3]。 2. **异步Asynchronous)** 调用方发出请求后**不阻塞**,被调用方通过回调、事件或消息队列等方式通知结果。例如: ```javascript asyncApiRequest().then(result => { // 程序继续执行后续代码 console.log(result); // 回调函数在响应到达后触发 }); console.log("请求已发送,继续执行其他任务..."); ``` 引用[4]指出,异步编程需结合事件驱动、惰性求值等技术提升效率[^4]。 --- #### 二、关键差异对比 | **维度** | **同步** | **异步** | |------------------|-----------------------------------------|------------------------------------------| | 执行流程 | 线性阻塞,顺序执行 | 非阻塞,通过回调/事件驱动并行处理 | | 资源利用率 | 线程可能因等待资源空闲导致浪费 | 更高并发,单线程可处理多任务(如Node.js) | | 编程复杂度 | 逻辑简单直观 | 需处理回调地狱、状态管理,复杂度较高 | | 典型应用场景 | 简单计算、事务型操作 | I/O密集型任务(网络请求、文件读写) | | 错误处理 | 可通过try-catch直接捕获 | 依赖Promise链、async/await或事件监听 | --- #### 三、实际场景示例 1. **同步场景** 数学计算需严格顺序执行: $$f(x) = \int_{0}^{x} e^{-t^2} dt$$ 计算积分时必须逐步完成数值逼近,无法并行化。 2. **异步场景** Web服务器处理并发请求: ```python # 使用异步框架FastAPI处理HTTP请求 @app.get("/data") async def fetch_data(): result = await database_query() # 非阻塞等待数据库响应 return result ``` 引用[2]提到,异步编程通过多任务重叠执行提升吞吐量[^2]。 --- #### 四、选择原则 - **优先同步**:任务简单、无阻塞风险(如数值计算) - **优先异步**:高并发需求(如聊天服务器)、外部I/O依赖(如API调用) > 引用[1]总结:同步关注**即时通信**,异步关注**任务解耦效率**[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值