“这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战”
写在前面: 前段时间是在找工作,一直在寻找些线上面试,电话面试,然后碰到了很多有意思的面试题,有些知道解法,有些还不知道答案,记录一下.
事关我对于前端面试题的收集--第二弹
长列表数据解决方案之虚拟列表
长列表问题如何解决
-
懒加载->常见的无线滚动的,每次只渲染一部分(比如10条),等剩余部分滚到可见区域,就再渲染一部分。
- 缺点:当翻了很多页之后,页面中有很多dom节点,用户上滑的体验不好
-
可视区域加载->只渲染可见部分,不可见部分不渲染。
- 有点类似于js实现无缝轮播的效果,在可视区域显示数据,在非可视区域提取渲染好即将展示的内容,但无缝轮播的dom还会在,虚拟列表的dom会被替换更新掉
虚拟列表的实现
- 把列表分为三个区域,上缓冲区,可视区,下缓冲区
- 计算可视区域最多能展示多少项,并记录高度
- 监听用户滚动事件/触摸事件,记录用户滚动的高度,以此来计算可视区域的起始索引和结束索引(如果不是整数则设置偏移量).
- 创建一个函数,每当用户滚动时重新渲染可视区域的dom和偏移量,可以缩减到16ms执行一次
- 函数执行会获取最新的数据生成dom结构去替换之前可视区域的dom列表.
设计模式之观察者模式
观察者模式
Vue插件发布流程
-
封装一个高复用组件(一定要设置name)
-
创建文件夹把组件放进去并创建入口文件index.js
-
创建install方法并把它暴露出去, 方法里面实现环境判断以及组件全局注册.
-
package.json设置打包命令压缩打包,然后设置插件信息(备注,协议,main文件路径,是否私有)
-
npm login 登录 -- npm publish 发布插件
Vue的性能优化
-
函数式组件,正常组件有template模板,有生命周期函数等等,在虚拟dom里会被递归,但函数式组件就是正常的真实dom,没有多余的东西,所以提示js渲染性能,在vue3中不推荐使用.
-
缓存组件,被keep-alive包裹的组件不会因为切换路由而销毁实例和数据.
-
非响应式数据,对于不需要响应式的对象或数组,进行手动标识(Object.freeze)不需要响应式,vue3里面已经实现
-
异步组件(component:() => import('./component/helloworld'))如dialog框表单.
单页面应用首屏优化
-
路由懒加载
-
插件按需加载或cdn引入
-
模块按需加载
-
骨架屏
-
webpack压缩代码gzip
-
首屏添加缓存
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!