同步于异步的理解
首先,说一下js(javascript)是单线程的,浏览器执行的任务都是在时序表中按照顺序逐个执行的,为了避免浏览器能更好的展现数据和
js能更快的响应任务,所以每个任务的执行时间最好不要超过200ms(每个任务的理解:就是浏览器可以停下来去做另一个任务了,说明一个完
整的任务别执行完了。例如同步就是浏览器需要把页面所有元素都赋于内容后才算完,对于异步来说,浏览器可以在发送完请求后,就可以去做
下一个任务了,因为异步有回调函数,当请求结果返回后,会去通知浏览器任务执行回调函数,这样回调函数任务将被加到任务列表中)。也可以
理解为同步是一个大块的任务,不可拆分的,虽然也是进行了多次请求,但其他请求的任务是无法在同步的时间内得到执行的,所以当页面同步
更新数据时候,用户是服务进行其他操作的。而异步是把这样一个大块任务拆分为多个小块任务,并且是独立的,放到浏览器执行列表中,在这个
数据展现的时间内,客户不能再各个小块任务时间内不能进行操作,但这个时间是相当小的(控制在200毫秒以内1/5秒),其他时间用户是可以对
页面进行操作的,当浏览器接收到用户的操作请求,会把该任务排列在浏览器执行列表中,不会等所有页面元素都展现完后再去执行该任务,该
任务在异步的情况下,有可能会在页面展现还没有完成时就已经执行了,因为它有可能排列到展现数据的各个小块任务的某些块任务之前执行。
还有就是定时任务在异步情况下的执行,当你的页面有一个定时任务,这个任务有可能是发送请求获取数据再更新页面的数据展现,也有可能是
之对页面进行一个简单的更新,不去发请求获取数据。无论那种任务都是需要排列在浏览器执行列表中,当我们页面展现使用异步数据展现时,
这个定时任务会在指定时间被触发,但不一定执行,只会被放到浏览器执行列表中排队。只有排到这个定时任务时,任务才真正的被执行。因为
异步数据展现时,所有都是小块任务,都不会太占用浏览器执行时间,所以这个定时任务被执行的时间不会比指定的时间晚太多。但如果采取同
步数据展现,那么这个定时任务有可能会比指定时间晚很多才执行,因为同步数据展现是一大块任务,浏览器会花费很长时间执行这个任务。