treegrid 如何获取getchanges inserted_如何避开Vue性能优化之路的荆棘?
随着这几年前端技术快速发展,Vue框架在国内普及率极高,人人都会用,那Vue如何写得比别人优雅?如何写得比别人漂亮?
鉴于一线互联网大厂在前沿技术领域的持续研究和大规模投入,直接向他们取经,是最便捷也是最高效的学习方式。但对于中小公司工作的程序员来说,平时忙碌于业务代码,却很少有机会接触到大厂的优秀实践。
本文将介绍一些大厂Vue项目的最佳实践:
1
一劳永逸的组件注册
通常在组件使用前,需要引入后再注册,但如果高频组件多了后,每次都这样做,不仅新增很多代码,效率还低!我们应该如何优化呢?
其实,我们可以借助一下webpack的require.context() 方法来创建自己的(模块)上下文,从而实现自动动态require组件。
我们先在components文件夹(这里面都是些高频组件)添加一个叫global.js的文件,在这个文件里使用require.context 动态将需要的高频组件统统打包进来,然后在main.js文件中引入global.js的文件。
// global.js文件import Vue from 'vue'function changeStr (str) { return str.charAt(0).toUpperCase() + str.slice(1)}const requireComponent = require.context('./', false, /\.vue$/)// 查找同级目录下以vue结尾的组件const install = () => { requireComponent.keys().forEach(fileName => { let config = requireComponent(fileName) console.log(config) // ./child1.vue 然后用正则拿到child1 let componentName = changeStr( fileName.replace(/^\.\//, '').replace(/\.\w+$/, '') ) Vue.component(componentName, config.default || config) })}export default { install // 对外暴露install方法}
最后我们就可以随时随地在页面中使用这些高频组件,无需再手动一个个引入了。
2
高精度权限控制--自定义指令directive
我们通常给一个元素添加 v-if / v-show 来做权限管理,但如果判断条件繁琐且多个地方需要判断,这种方式的代码不仅不优雅而且冗余。
针对这种情况,我们可以通过全局自定义指令来处理:我们先在新建个 array.js 文件,用于存放与权限相关的全局函数;
// array.jsexport function checkArray (key) { let arr = ['1', '2', '3', '4', 'demo'] let index = arr.indexOf(key) if (index > -1) { return true // 有权限 } else { return false // 无权限 }}
然后在将 array 文件挂载到全局中:
// main.jsimport { checkArray } from "./common/array";Vue.directive("permission", { inserted (el, binding) { let permission = binding.value; // 获取到 v-permission的值 if (permission) { let hasPermission = checkArray(permission); if (!hasPermission) { // 没有权限 移除Dom元素 el.parentNode && el.parentNode.removeChild(el); } } }});
最后我们在页面中就可以通过自定义指令 v-permission 来判断:
class="btns">
<button v-permission="'1'">权限按钮1button> // 会显示 "'10'">权限按钮2</button> // 无显示
权限按钮3button> // 会显示
</div>
以上是我分享几个Vue大厂实战经验。大家有没有想过一个问题?随着前端面试要求越来越高,像Vue这样的框架已经是基本功,我们凭什么敢说比别人厉害呢?我们都会写组件,但是你知道怎么让组件能够成为高复用性的组件库型组件吗?
我们都会项目打包上线,但是你知道如何编写配置文件能让打包速度最优化吗?
我们都会写路由,但是你知道如何写才能保证多路由模块解耦,保证更方便增加新的路由模块吗?前端全方面学习需要完整的前端思路实践教学,这边准备了一份前端路径完整图供大家学习:
扫码领取前端工程师学习成长思维导图
当然,有这些还不够,因为目前是否积累优秀实战经验已经成为区分前端水平高低的评判标准,这边推荐网易云课堂的进阶课程,大家可以去这儿学习下大厂的优秀实践。想进阶自己的Vue技能,学习更多的大厂实践技能的前端小伙伴可以去这里学习一下前端课程。
5.6-5.9前端直播课程
一、技术:《带你深度解析日常写的webpack配置》1、代码分割到底是在分割什么2、开发模式怎么手动搭建3、大厂面试题分析二、项目:《如何从api层入手,让你的项目做的更好更快》1、如何管理自己的项目api层 2、axios拦截思路3、如何二次封装请求库扫码领取0元前端进阶系列直播课
更有前端进阶资料包免费赠送
treegrid 如何获取getchanges inserted_如何避开Vue性能优化之路的荆棘?相关推荐
- Vue性能优化:如何实现延迟加载和代码拆分?
移动优先方法已经成为一种标准,但不确定的网络条件导致应用程序快速加载变得越来越困难.在本系列文章中,我将深入探讨我们在Storefront应用程序中所使用的Vue性能优化技术,你们也可以在自己的Vue ...
- Vue性能优化:图片与组件,如何实现按需加载?
Vue性能优化:图片与组件,如何实现按需加载? 前沿:按需加载是性能优化其中的一个环节,可以是图片的按需加载,也就是lazyload来实现按需加载的场景,也可以是组件库的引入,只需部分组件的使用而无需 ...
- vue性能优化-------vendor优化详细用法(瘦身),减小体积,引入cdn
vue性能优化-------vendor优化详细用法(瘦身),减小体积,引入cdn 原创ChrisWang_ 最后发布于2019-05-24 10:25:58 阅读数 1332 收藏 展开 vue性 ...
- 最全的 Vue 性能优化指南,经典收藏
点击上方"开发者技术前线",选择"星标" 13:21 在看 真爱 作者:我是你的超级英雄 https://juejin.im/post/5d548b83f265 ...
- vue渲染大量数据如何优化_大数据量场景下的Vue性能优化
性能优化最常见的落脚点是在网络和dom上,但是在大数据量的场景下,由于Vue本身的特性,可能会造成js运行层面的性能问题,这篇文章讨论的就是针对这一部分的性能优化方案. 模拟一个大数据量的场景 // ...
- vue nextTick深入理解-vue性能优化、DOM更新时机、事件循环机制
一.定义[nextTick.事件循环] nextTick的由来: 由于VUE的数据驱动视图更新,是异步的,即修改数据的当下,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图 ...
- nginx开启Gzip压缩,Vue性能优化之使用gzip压缩打包
一.前言 不管是vue项目还是react项目在使用webpack打包之后都会生成一个动辄一两兆甚至更大的js文件,在某些情况下严重影响项目性能,打开页面的时候白屏时间会很长,本文将介绍如何使用gzip ...
- vue性能优化之build后包体积太大(1)
基于vue-cli3.0构建项目,npm引入多个第三方包.build之后,包体积太大导致首屏过长.----毫无体验感!!! 实践的项目喜欢捣鼓可以clone下来 只总结了亲测效果明显的几种方案,解决方 ...
- Vue 性能优化--打包优化
写在开头: 图片来源于网易云课堂直播课程 1.性能体系: 2.技术方案: 3.打包优化:
最新文章
- 写了六个相同功能的函数之后,我学到了什么
- 调整html css表格位置,调整表格中的列宽(CSS / HTML)
- ios iphonex适配
- Kubernetes系列之Helm介绍篇
- 这是我第一次使用代码创建出一个窗口【python 游戏实战 01】
- 政府公开数据可视化_公开演讲如何帮助您设计更好的数据可视化
- Java关键字break、return、continue
- 赢在微创新_小米用互联网颠覆中国市场的内幕与方法
- JS继承的几种方式及优缺点
- 国密SM算法有哪些?
- 2023 年十大战略技术趋势中哪一项最需要 HTAP ?
- 王道数据结构3.2.5——1、循环队列中设置tag区分头指针front和队尾指针rear相等时队列的状态是空还是满
- 新个税来了!一图看清你能省多少钱,转需! ​​​​
- 解决虚拟机下光标闪烁问题
- 细说华为和荣耀的关系:潮流的荣耀和稳重的华为
- 计算机相关专业的兼职大总结
- VNode――Beijing OpenParty晓风归雁后记
- Ros 全局规划使用carrot_planner/CarrotPlanner和global_planner/GlobalPlanner
- st7920驱动OCMJ2X8C屏使用CGRAM自定义图标
- 用mac的chrome浏览器调试 Android 手机的网页
热门文章
- 集合使用与内部实现原理
- Java 200+ 面试题补充 ThreadLocal 模块
- 【MATLAB】卡尔曼滤波器的原理及仿真(初学者专用)
- ORA-01002 提取违反顺序
- Python获取电脑CPU序列号、主板序列号、BIOS序列号、硬盘序列号列表、网卡MAC地址
- 渗透测试岗位面试题(重点:渗透测试思路)
- log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory). log4j:WARN
- wifi 信道_WiFi网速太慢,四招就可以让无线网络变得顺畅
- 如何获取图像的驱动_Adobe Camera Raw 12 Mac(Raw格式图像ps插件) v12.2.1.417
- apex英雄机器人探路者怎么玩_Apex英雄探路者机器人实战技巧攻略[多图]