执笔看墨花开💜千千 执笔看墨花开💜千千
首页
  • JavaScript
  • Vue
  • React
  • HTML
  • CSS
  • 算法
  • 工具教程
  • 面试题清单
  • 大前端
  • HTML
  • CSS
  • JS
  • Vue
  • React
  • 零碎
  • 杂言碎语
  • 前端
  • 工具
  • 设计 & CSS
  • 社区 & 平台 & 博客
  • 网站
  • 推荐库
  • 值得一读
  • 分类
  • 标签
  • 归档
  • 心情杂货
  • 友情链接
  • 关于
GitHub (opens new window)

执笔看墨花开

顺其自然
首页
  • JavaScript
  • Vue
  • React
  • HTML
  • CSS
  • 算法
  • 工具教程
  • 面试题清单
  • 大前端
  • HTML
  • CSS
  • JS
  • Vue
  • React
  • 零碎
  • 杂言碎语
  • 前端
  • 工具
  • 设计 & CSS
  • 社区 & 平台 & 博客
  • 网站
  • 推荐库
  • 值得一读
  • 分类
  • 标签
  • 归档
  • 心情杂货
  • 友情链接
  • 关于
GitHub (opens new window)
  • JS文章

  • Vue文章

  • 跨端开发

  • React文章

  • 杂文

    • Webstorm排查插件问题
    • 为什么前端监控要用GIF打点
    • Bilibili短链生成器
    • Typora Bilibili图床插件
    • 防盗链那些事之referer
    • 获取B站SESSDATA
    • serverless+webpack解决node_modules空间大的问题
    • SPA单页应用直接使用百度统计
    • 先concat再去重引发的性能问题
    • 利用引用与时间戳解决一次性能问题
    • 批量新建工作项界面卡顿
    • 大用户数量加载慢分析
  • CSS

  • 前端
  • 杂文
执笔看墨花开
2021-08-12

批量新建工作项界面卡顿

背景 1 #239669 批量新建工作项界面,上下、左右滚动,发现界面卡住了,影响用户正常使用(详情见附件录屏) 2 需要紧急修复

结论 批量新建造成性能的原因

1【大头】不合理的使用 FetchProductsHOC,从而引发高频调用性能不好的GraphQLSelector.getQueryDataByUid,从而造成性能问题。 2 每个单元格使用的 PublishVersionSelect 没有做防止重复请求 3 产品字段&产品模块字段频繁发起请求。

修复代码见 ones-ai-web-common hotfix_20210810,只修复大头问题1。

可沉淀的思考

分析性能的两大杀器(1 了解业务代码;2 Performance 分析性能卡点;) 缓存也可从 store 的 reduce 和 selector 下手。 过程 存在性能问题,那么就可以通过录制 Performance。从 performance 中看出大量的消耗在 getQueryDataByUid

const mapStateToProps = () => { // something

return (state, ownProps) => { const { useExternalProducts, products: externalProducts } = ownProps; if (useExternalProducts) return { products: externalProducts };

const productsFromQuery = GraphQLSelector.getQueryDataByUid(state, ProductDataKey);
const productsWithoutPermission = productsFromQuery ? productsFromQuery.products : [];

return {
  permissionRules: getPermissionRules(productsWithoutPermission),
  productFields: sortByProductFields(ItemSelector.getGlobalProductFields(state)),
  products: getProducts(state, productsWithoutPermission),
};

}; }

那么问题来了:怎么减少 getQueryDataByUid 的调用?

1 createSelector ? 没用。 2 减少 FetchProductsHOC 的不合理使用? 成本太多,需要了解业务才能修复。但是更合理的方案。 3 减少 getQueryDataByUid 计算时间。

最后交付紧急原因采用了修复成本很低的 3 方案。

具体方案是 方案

  • 解决核心性能,增加 graphql store 缓存,规避耗时运算。

改动

  • 缓存加到通用层 graphql 数据存储。 影响范围
  • 批量新建
  • 和全局 graphql 数据相关的。
    • 建议缩小测试范围到 产品模块and项目列表 的 CRUD 风险
  • 无
编辑 (opens new window)
#性能优化
上次更新: 2021/08/12, 14:18:30
利用引用与时间戳解决一次性能问题
大用户数量加载慢分析

← 利用引用与时间戳解决一次性能问题 大用户数量加载慢分析→

最近更新
01
Vue2
08-26
02
JS编程题
08-26
03
前言
08-26
更多文章>
Theme by Vdoing

© 2021-2021 执笔看墨花开

粤ICP备2021110554号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×