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

做pc端网站方案互网站开发维护成本高

做pc端网站方案,互网站开发维护成本高,wordpress 禁用自动保存,wordpress页尾添加信息问题复现 多文件上传,只有最后一个loading 会关闭,其他 loading 会一直为 true 。 解决方案 分案分析 简单来说,直接调用 onSuccess 和将其包装在 setTimeout(..., 0) 中的核心区别在于执行时机和任务类型(宏任务 vs 微任务/同步…

问题复现

在这里插入图片描述

多文件上传,只有最后一个loading 会关闭,其他 loading 会一直为 true 。

解决方案

在这里插入图片描述

分案分析

简单来说,直接调用 onSuccess 和将其包装在 setTimeout(..., 0) 中的核心区别在于执行时机任务类型(宏任务 vs 微任务/同步任务),这会影响到 Ant Design Vue 的 a-upload 组件如何处理这些连续的状态更新。

直接调用 onSuccess (可能导致问题的情况):

  1. 同步或微任务的快速连续执行
    选择多个文件时,a-upload 组件可能会非常迅速地为每个文件依次调用 customRequest 方法。如果 onSuccess 是直接调用的(或者如果 customRequest 是一个立即 resolveasync 函数,那么 onSuccess 会被放入微任务队列),这意味着对于多个文件,这些 onSuccess 调用会非常密集地发生,几乎在同一个事件循环的“tick”内或者连续的微任务中执行。

  2. 组件内部状态更新的竞争或覆盖
    Ant Design Vue 的 a-upload 组件内部需要维护一个文件列表(fileList),并且每个文件对象都有自己的状态(如 uploading, done, error)。当 onSuccess 被调用时,组件会找到对应的文件对象并更新其状态。
    如果这些更新指令来得太快,可能会发生以下情况:

    • 状态更新竞争:组件内部的更新逻辑可能还没完全处理完前一个文件的状态变更(包括触发 Vue 的响应式更新和 DOM 变更),下一个文件的更新指令就来了。这可能导致内部状态不一致或某些更新被“跳过”或“覆盖”。
    • Vue 的批量更新机制:Vue 会将同一个“tick”内的多次数据变更合并,进行一次性的 DOM 更新。如果 a-upload 组件内部对 fileList 中多个文件状态的修改过于集中,Vue 的批量更新机制可能无法如预期那样分别渲染每个文件的状态变化,尤其是在组件内部逻辑对这种高速并发更新处理不够完美的情况下。
    • 组件的内部逻辑限制:某些组件可能设计上并没有针对这种极端密集的、几乎同时的多个子项状态更新做足优化,导致只有最后几个更新能被正确处理和渲染。

使用 setTimeout(..., 0) (通常能解决问题的情况):

  1. 将任务推迟到宏任务队列
    setTimeout(callback, 0) 并不会立即执行 callback。它会将 callback 放入宏任务队列 (Macrotask Queue)。这意味着 callback (包含 onSuccess 的调用) 会在当前的同步代码执行完毕、所有微任务 (Microtasks, 如 Promise 的 .then()) 执行完毕之后,并且在浏览器下一次事件循环的宏任务阶段才会被取出执行。

  2. 为组件提供“喘息”机会
    通过这种方式,每个文件的 onSuccess 调用都被分散到不同的宏任务中执行。

    • 分离更新逻辑:当第一个文件的 onSuccess 通过 setTimeout 被调度执行时,它会在一个新的宏任务中完成。此时,a-upload 组件有充足的时间处理这一个文件的状态更新,Vue 也有机会完成相关的响应式变更和 DOM 更新。
    • 避免竞争:到下一个文件的 onSuccess(同样在它自己的宏任务中)被执行时,前一个文件的处理通常已经稳定下来。这大大减少了内部状态更新的竞争和覆盖风险。
    • 逐个处理:组件可以更从容地、逐个地处理每个文件的状态变化,确保其内部数据和视图的一致性。

打个比方:

  • 直接调用:同时向一位客服抛出5个不同的请求,客服可能手忙脚乱,只记住了最后一个或漏掉了一些。
  • setTimeout(..., 0):将5个请求写在纸条上,每隔一小段时间(一次事件循环)递给客服一张。客服有时间处理完上一张,再看下一张,从而能准确处理所有请求。

文章转载自:

http://r6Fosn27.ptqpd.cn
http://P2pLFPn9.ptqpd.cn
http://qLyDmCwv.ptqpd.cn
http://aVFyShTc.ptqpd.cn
http://oE1XlHaN.ptqpd.cn
http://NaRy1ItI.ptqpd.cn
http://1u6zDnyS.ptqpd.cn
http://ACQX280g.ptqpd.cn
http://5nhCEQwj.ptqpd.cn
http://qcgGCkT3.ptqpd.cn
http://y3dDWnMt.ptqpd.cn
http://Shi4W7vV.ptqpd.cn
http://D3Lg1WlC.ptqpd.cn
http://VeCkABn0.ptqpd.cn
http://Ov0KpiI5.ptqpd.cn
http://zGSQa0AB.ptqpd.cn
http://yDHCioWw.ptqpd.cn
http://kx2XPrWX.ptqpd.cn
http://85vDReWL.ptqpd.cn
http://loJzBKcH.ptqpd.cn
http://ykgcSqbF.ptqpd.cn
http://LstfOcBx.ptqpd.cn
http://45gl9L34.ptqpd.cn
http://iChBRFtV.ptqpd.cn
http://O4y2gjQA.ptqpd.cn
http://Ur9KEaby.ptqpd.cn
http://KkFm5bH9.ptqpd.cn
http://dPUm3sty.ptqpd.cn
http://P9Aclny2.ptqpd.cn
http://1Lx636Zc.ptqpd.cn
http://www.dtcms.com/wzjs/620342.html

相关文章:

  • 北京网站建设签约服务器部署wordpress
  • 做初中物理题目的网站烟台seo网站推广费用
  • dedecms网站首页网站被攻击会影响收录么
  • 网站栏目结构优化创建网站要申请域名吗
  • 青岛哪家做网站的公司好企业建站用什么主机
  • 扬州市邗江区城乡建设局网站电商网站的建设案例
  • 平面设计网站模板vi设计方案模板
  • 绵阳市建设工程质量监督站网站昆明网站建设
  • 广州网站优化排名推广vr全景网站开发
  • 公司如何登录网站做就业登记软件商店哪个好
  • 做排名出租网站一加手机官网网站
  • 中国建设工程招标官方网站企业网站建设中企动力
  • 做网站美工未来规划太原百度快速排名提升
  • 怎样用ps做网站首页图片网页的六个基本元素
  • 高端制作网站技术wordpress的统计代码
  • 网站推广的常用方法有哪些?wordpress git wiki
  • 公司外包做网站赚钱吗吉林关键词优化的方法
  • 有哪些做红色旅游景点的网站简约大方网站
  • 简单的房源展示网站开发百度搜索名字排名优化
  • 如何给公司做网站网站引导页flash
  • 网站开发工程师特点屋领网站固链
  • 淘宝可以到哪些网站做推广重庆网站建设最大
  • 有哪些ui的设计网站竞价排名适合百度吗
  • 做电子相册的大网站搜索引擎排名国内
  • 网站如何提高流量做网站如何月入10万
  • 空间购买网站邯郸企业建网站
  • 怎么做属于自己的免费网站wordpress主题首页修改
  • 一个人可以建设网站吗哈尔滨网页制作费用
  • 凡科建站怎么删除网站建设wordpress文章页打赏
  • 临沂恒商做网站自己做海报的网站