当前位置: 首页 > news >正文

做外贸要建什么网站/搜狗搜索引擎网页

做外贸要建什么网站,搜狗搜索引擎网页,黄冈建设工程信息网,wordpress挂黑页目录作用原理分析源码作用 在下次 DOM 更新循环结束之后执行回调函数。vue中对DOM的更新策略是异步的。只要监听到数据变化,vue将会开启一个事件队列,并缓冲同一事件循环中的所有数据变化。如果同一个watcher被触发多次,只会被推入到事件队列…

目录

  • 作用
  • 原理分析
  • 源码

作用

在下次 DOM 更新循环结束之后执行回调函数。vue中对DOM的更新策略是异步的。只要监听到数据变化,vue将会开启一个事件队列,并缓冲同一事件循环中的所有数据变化。如果同一个watcher被触发多次,只会被推入到事件队列中一次,防止不必要的计算和DOM操作。

原理分析

微任务和宏任务相结合,优先使用微任务。对于一些不支持原生promiseMutationObserverAPI的浏览器,会降级使用宏任务(setTimeout

1、依次判断浏览器是否支持Promise->MutationObserver->setImmediate->setTimeout。使用对应支持的API创建一个异步执行的函数,函数名称为timerFunc

2、调用nextTick的时候,首先会把回调函数放到一个队列数组中,然后添加一个异步锁,上锁,执行timerFunc函数。等再次调用nextTick的时候。因为有个异步锁,所以不会再次执行timerFunc函数,这样子就可以防止回调函数被多次执行了

3、由于timerFunc函数是异步函数,等所有同步代码都执行完毕之后,timerFunc函数就会把队列数组中的函数进行遍历,依次执行,然后清空队列数组,同时还要对异步锁进行解锁

源码

源码位于src/core/util/next-tick.js

import { noop } from 'shared/util'
import { handleError } from './error'
import { isIE, isIOS, isNative } from './env'export let isUsingMicroTask = false// 回调队列
const callbacks = []
// 异步锁
let pending = falsefunction flushCallbacks () {// 解锁pending = false// 备份回调函数,防止nexttick里面又使用了nexttick,导致里面的nexttick会进入回调队列const copies = callbacks.slice(0)// 清空回调队列callbacks.length = 0for (let i = 0; i < copies.length; i++) {copies[i]()}
}// 异步函数
let timerFuncif (typeof Promise !== 'undefined' && isNative(Promise)) {// 先检查是否支持原生promiseconst p = Promise.resolve()timerFunc = () => {p.then(flushCallbacks)if (isIOS) setTimeout(noop)}isUsingMicroTask = true
} else if (!isIE && typeof MutationObserver !== 'undefined' && (isNative(MutationObserver) ||// PhantomJS and iOS 7.xMutationObserver.toString() === '[object MutationObserverConstructor]'
)) {// 然后再检查是否支持MutationObserverlet counter = 1const observer = new MutationObserver(flushCallbacks)const textNode = document.createTextNode(String(counter))observer.observe(textNode, {characterData: true})timerFunc = () => {counter = (counter + 1) % 2textNode.data = String(counter)}isUsingMicroTask = true
} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
// ie或者nodejs支持setImmediatetimerFunc = () => {setImmediate(flushCallbacks)}
} else {// Fallback to setTimeout.// 都不支持的情况下,降级使用setTimeouttimerFunc = () => {setTimeout(flushCallbacks, 0)}
}export function nextTick (cb?: Function, ctx?: Object) {let _resolve// 将回调函数推入到回调队列中callbacks.push(() => {if (cb) {try {cb.call(ctx)} catch (e) {handleError(e, ctx, 'nextTick')}} else if (_resolve) {_resolve(ctx)}})if (!pending) {// 接收到第一个回调函数的时候就上锁// 上锁,执行异步方法pending = truetimerFunc()}// $flow-disable-lineif (!cb && typeof Promise !== 'undefined') {// 没有传入回调函数的,并且支持promise的情况下,返回promise实例return new Promise(resolve => {_resolve = resolve})}
}
http://www.lbrq.cn/news/969103.html

相关文章:

  • 网站开发毕设论文/深圳seo推广
  • 启迪网站建设/海外营销公司
  • 做视频挣钱的网站/网络运营培训课程
  • 用服务器ip做网站/单页网站seo优化
  • 时尚网站欣赏/淘宝直通车推广怎么做
  • 做网站用的hu软件/苏州seo服务
  • 做织梦网站时图片路径显示错误/湖北seo诊断
  • wordpress.短视频主题/百度网络优化
  • 中国菲律宾南海事件/优化排名案例
  • 做网站需要的电脑配置/seo长尾关键词排名
  • 网站内图片变换怎么做/武汉seo外包平台
  • 零基础网络工程师培训/正规seo排名多少钱
  • 杨永生的设计风格/万词霸屏百度推广seo
  • 企业信息系统架构/如何做好搜索引擎优化工作
  • 广东政府网站集约化平台/希爱力
  • 网站建设 电话营销/小说风云榜
  • 广东 建设银行社会招聘网站/快速建站教程
  • 张家港普通网站建设/软文推广去哪个平台好
  • phpcmsv9 网站搬家/优化服务公司
  • 进出石家庄最新通知/seo排名规则
  • app免费下载网站地址进入/怎么优化标题和关键词排名
  • 湛江网站建设皆选小罗24专业/百度搜索一下就知道
  • 深圳龙岗做网站公司/打开百度app
  • 做网站找哪个公司好/百度seo排名点击器app
  • 说一说网站建设的含义/百度网盘免费下载
  • 购物网站开发背景及目的/拓客渠道有哪些
  • 做网站公司 营销/深圳正规seo
  • 青岛专业网站建设公司/超级搜索引擎
  • 甘肃疫情最新消息2021/怎么关闭seo综合查询
  • 通江县建设局网站/开网站需要什么流程
  • UGUI 性能优化系列:第一篇——基础优化与资源管理
  • 基于MATLAB和ZEMAX的光学传递函数与调制传递函数联合仿真
  • 强化第三讲—一元函数微分学的概念
  • 从零开发足球比分APP:REST API与WebSocket的完美搭配
  • Vue在线预览Excel和Docx格式文件
  • 推客系统开发:从零构建高并发社交平台的技术实践