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

网站建设与网页设计课程wordpress标签选项卡

网站建设与网页设计课程,wordpress标签选项卡,苏州有什么好玩的推荐,鄂州第一网官网你好同学#xff0c;我是沐爸#xff0c;欢迎点赞、收藏和关注。个人知乎 Vue.js 的 nextTick 函数是一个非常重要的功能#xff0c;它用于延迟执行代码块到下次 DOM 更新循环之后。这在 Vue.js 的异步更新队列机制中非常有用#xff0c;尤其是在你需要基于更新后的 DOM 来…你好同学我是沐爸欢迎点赞、收藏和关注。个人知乎 Vue.js 的 nextTick 函数是一个非常重要的功能它用于延迟执行代码块到下次 DOM 更新循环之后。这在 Vue.js 的异步更新队列机制中非常有用尤其是在你需要基于更新后的 DOM 来执行某些操作时。 实现原理 Vue.js 的 nextTick 的实现原理主要依赖于 JavaScript 的事件循环和微任务microtask或宏任务macrotask队列。Vue 使用了一种叫做“异步更新队列”的技术来优化 DOM 的更新。当你修改 Vue 组件的数据时Vue 不会立即更新 DOM而是将这些更新任务放入一个队列中并在同一个事件循环的“下次迭代”中执行它们。这样做的好处是可以批量处理多次数据变化只进行一次 DOM 更新从而提高性能。 nextTick 函数允许你指定一个回调函数这个回调函数会在 DOM 更新完成后被调用。Vue2和Vue3的实现有所不同。 Vue2的实现 Vue2通过判断浏览器环境选择最适合当前环境的异步任务执行方式以确保回调函数能够尽快执行从而提高应用的响应速度和性能。 Promise如果浏览器支持Vue 会检查是否支持 Promise并尝试使用 Promise.resolve().then() 来安排回调函数在微任务队列中执行。这是因为微任务会在当前执行栈清空后立即执行但在宏任务如 setTimeout之前。MutationObserver如果 Promise 不可用Vue 会尝试使用 MutationObserver。MutationObserver API 用于在 DOM 树发生变化时异步执行回调函数。Vue 会创建一个文本节点作为观察目标并在回调函数中调用你的 nextTick 回调函数。然后它会改变这个文本节点的某些内容来触发 MutationObserver 的回调。setImmediate如果以上两者都不可用Vue 会尝试使用 setImmediate这是一个比 setTimeout 更快的 API但在大多数环境中不可用。setTimeout作为最后的回退选项Vue 会使用 setTimeout 来安排回调函数在宏任务队列中执行。这是所有选项中最慢的因为它会在浏览器重绘和重排之后执行。 源码 var timerFunc; // 定时器函数 if (typeof Promise ! undefined isNative(Promise)) {var p_1 Promise.resolve();timerFunc function () { // 1.使用Promise.then()p_1.then(flushCallbacks);if (isIOS)setTimeout(noop);};isUsingMicroTask true; } else if (!isIE typeof MutationObserver ! undefined (isNative(MutationObserver) ||MutationObserver.toString() [object MutationObserverConstructor])) {var counter_1 1;var observer new MutationObserver(flushCallbacks);var textNode_1 document.createTextNode(String(counter_1));observer.observe(textNode_1, {characterData: true});timerFunc function () { // 2.使用MutationObservercounter_1 (counter_1 1) % 2;textNode_1.data String(counter_1);};isUsingMicroTask true; } else if (typeof setImmediate ! undefined isNative(setImmediate)) {timerFunc function () { // 3.使用setImmediatesetImmediate(flushCallbacks);}; } else {timerFunc function () { // 4.使用setTimeoutsetTimeout(flushCallbacks, 0);}; }function nextTick(cb, ctx) {var _resolve;callbacks.push(function () {if (cb) {try {cb.call(ctx);}catch (e) {handleError(e, ctx, nextTick);}}else if (_resolve) {_resolve(ctx);}});if (!pending) {pending true;timerFunc(); // 执行定时器}// $flow-disable-lineif (!cb typeof Promise ! undefined) {return new Promise(function (resolve) {_resolve resolve;});} }Vue3的实现 不知道是因为Promise的支持度高还是Vue3不在兼容低版本的浏览器Vue3直接使用了Promise.then()这个微任务来处理DOM更新后的回调。 源码 const resolvedPromise /* __PURE__ */ Promise.resolve(); let currentFlushPromise null; function queueFlush() {if (!isFlushing !isFlushPending) {isFlushPending true;currentFlushPromise resolvedPromise.then(flushJobs);} }function nextTick(fn) {const p currentFlushPromise || resolvedPromise;return fn ? p.then(this ? fn.bind(this) : fn) : p; }查看源码可知Vue3没有再向Vue2那样判断浏览器环境来选择异步任务执行方式而是直接采用了Promise.then()方法。 希望对你有所帮助下期再见
http://www.w-s-a.com/news/313556/

相关文章:

  • 华宁网站建设设计公司 网站
  • 简历网站免费怎么查在哪个网站做的备案
  • 响应式网站 价格网站用哪些系统做的比较好用
  • 高端网站案例360做的网站
  • 瑞安地区建设网站公众号开发者工具是干嘛的
  • 请解释网站开发的主要流程.wordpress主体上传
  • 网站方案组成要素饰品公司网站建设方案
  • 网站改版被降权赣州景文网络科技有限公司
  • 吉林省网站建设推广图片模版
  • 如何做网站热力图佛山 网站关键词优化
  • 个人网站建设论文中期报告申报网站建设理由 模板
  • 岫岩做网站软件开发和app开发的区别
  • 邯郸质量一站式服务平台上线如何做国外销售网站
  • 内蒙古工程建设协会网站sem优化策略
  • Linux网站建设总结建设电子商务平台
  • 公司网站背景图片课程网站如何建设
  • 用js做简单的网站页面互联网技术对人力资源管理的影响有哪些
  • 银川做网站贵德县wap网站建设公司
  • 深圳网站建设zvge山西省煤炭基本建设局网站
  • 佛山网页网站设计线上怎么做推广和宣传
  • 多个域名绑定同一个网站案例
  • 建设网站都需要准备什么代理加盟微信网站建设
  • 网站备案没有了wordpress 添加按钮
  • 湖南建设银行宣传部网站福田蒙派克空调滤芯安装位置图
  • wap网站搜索wordpress工作室模板
  • 青岛金融网站建设如何提交网站地图
  • 制作简单门户网站步骤网站建设论文的摘要
  • 可以直接进入网站的正能量照片学做静态网站
  • 织梦做社交网站合适吗网站的市场如何制作
  • 阳曲网站建设价格多少四川佳和建设工程网站