当前位置:网站首页 > 前端开发 > 正文

前端埋点方案xm(前端埋点方案对比)



目录

一、JavaScript

1.1 数组遍历方法

1.2 数组元素添加、删除

1.3 匹配、过滤、排序、合并

1.4 拷贝

1.5 去重

二、CSS

2.1 CSS3动画属性

简单案例

2.2 弹性布局

简单案例

2.3 定位

三、Vue

3.1 组件通信方式

父子通信

兄弟通信

跨级通信

3.2 路由跳转

this.$router.push() 

this.$router.resolve() 

this.$router.replace() 

this.router.go(n)  | this.router.back()

3.3双向绑定原理

四、前端性能优化

4.1 加载优化(减少http请求数)

4.2 图片优化

4.3 样式表和JS文件的优化

4.4 防抖和节流

防抖的应用场景

节流的应用场景


以下是我在工作中以及面试中的总结,后续还会不断更新,希望可以帮助到大家。

  • 1.1 数组遍历方法

方法名称描述注意 map()

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值;map() 方法按照原始数组元素顺序依次处理元素。

当数组元素是基本数据类型时, 方法不会改变原数组;当数组元素是引用类型时, 方法会改变原数组 forEach() forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数没有返回值;不改变原数组 for for用于循环代码块一定的次数 for in for/in主要用于循环遍历对象的属性
  • 1.2 数组元素添加、删除

添加:

  1. push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度
  2. unshift() 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度
  3. splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容

删除:

  1. shift() 方法用于把数组的第一个元素从其中删除,方法会改变原数组的长度
  2. pop() 方法用于删除数组的最后一个元素并返回删除的元素,方法会改变原数组的长度
  3. slice() 方法可从已有的数组中返回选定的元素,方法不会改变原数组的长度
  4. splice() 方法用于添加或删除数组中的元素,方法会改变原数组的长度
  • 1.3 匹配、过滤、排序、合并

匹配:

  1. find() 方法返回通过测试(函数内判断)的数组的第一个元素的值
  2. findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置
  3. some() 方法用于检测数组中的元素是否满足指定条件(通过函数提供)
  4. every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)
  5. includes()用来判断一个数组(使用时不会改变原数组)是或者字符串中否包含一个指定的值,如果存在返回 true,否则false
  6. indexOf()检索某个指定的元素在数组(使用时不会改变原数组)或者字符串中首次出现的位置,返回元素的索引,未找到返回-1

过滤:

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,不会改变原数组

排序

  1. sort() 方法用于对数组的元素进行排序,排序顺序可以是字母或数字,并按升序或降序,默认排序顺序为按字母升序,会改变原数组
  2. reserve()用于反转数组的元素顺序,会改变原数组

合并:

concat()将数组和数组(或数组和元素)合并,并返回一个新的数组;不会改变原数组

  • 1.4 拷贝

浅拷贝:Object.assign()

深拷贝:JSON.parse(JSON.stringify())

区别:浅拷贝只复制某个对象的引用,而不复制对象本身,新旧对象还是共享同一块内存;深拷贝会创造一个一摸一样的对象,新对象和原对象不共享内存,修改新对象不会改变原对对象。

  • 1.5 去重

利用Array.from()以及new Set()  (最简单直接的数组去重方法)

function unique (arr) {
  return Array.from(new Set(arr))
}


  • 2.1 CSS3动画属性

考虑浏览器支持加以下前缀,-webkit-、-ms- 或 -moz-前的数字为支持该前缀属性的第一个浏览器版本号。

浏览器ChromeEdge/IEFireFoxSafariOpera浏览器支持前缀43.0
4.0 -webkit-10.016.0
5.0 -moz-9.0
4.0 -webkit-30.0
15.0 -webkit-
12.0 -o-
值说明 animation-name指定要绑定到 选择器的关键帧的名称 animation-duration动画指定需要多少秒或毫秒完成 animation-timing-function设置动画将如何完成一个周期 animation-delay设置动画在启动前的延迟间隔。 animation-iteration-count定义动画的播放次数。 animation-direction指定是否应该轮流反向播放动画。animation-fill-mode规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式。 animation-play-state指定动画是否正在运行或已暂停。initial设置属性为其默认值。 inherit从父元素继承属性。 
简单案例
 
  • 2.2 弹性布局

下表列出了在弹性盒子中常用到的属性(注意:flex属性写在父盒子里面):

属性描述display指定 HTML 元素盒子类型。flex-direction指定了弹性容器中子元素的排列方式justify-content设置弹性盒子元素在主轴(横轴)方向上的对齐方式。align-items设置弹性盒子元素在侧轴(纵轴)方向上的对齐方式。flex-wrap设置弹性盒子的子元素超出父容器时是否换行。align-content修改 flex-wrap 属性的行为,类似 align-items, 但不是设置子元素对齐,而是设置行对齐flex-flowflex-direction 和 flex-wrap 的简写order设置弹性盒子的子元素排列顺序。align-self在弹性子元素上使用。覆盖容器的 align-items 属性。flex设置弹性盒子的子元素如何分配空间。
简单案例
 
  • 2.3 定位

值描述absolute

生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。

元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

fixed

生成固定定位的元素,相对于浏览器窗口进行定位。

元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

relative

生成相对定位的元素,相对于其正常位置进行定位。

因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。

static默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。

3.1 组件通信方式

  • 父子通信
 
  • 兄弟通信
 
  • 跨级通信
 

3.2 路由跳转

声明式路由,在页面中调用

 
  • this.$router.push() 

在函数里面调用

 
  • this.$router.resolve() 

打开新窗口跳转

  • this.$router.replace() 

用法同this.$router.push()

  • this.router.go(n)  | this.router.back()

3.3双向绑定原理

vue的双向绑定是通过实现的。vue将响应式地将数据转换成属性,当数据变化时,视图也会自动更新。

4.1 加载优化(减少http请求数)

  • 合并图片:当图片较多时,像精灵图,雪碧图可以合并为一张大图,从而减少http请求数。经常变化的图片可能不太合适,变化相对稳定的就可以考虑。合并大图除了能减少http 请求数外,还可以充分利用缓存来提升性能。
  • 合并压缩css样式表和js脚本,他们的共同目的都是为了减少http连接数。
  • 去掉不必要的请求,开发写代码或者系统升级之后残留的无效请求连接。
  • 首屏加载:首屏快速显示可大大的提升用户对页面速度的感知,应尽量针对首屏的快速显示做出相应的优化。
  • 充分利用缓存:来减少向服务器发送的请求数,节省网络资源,所有静态资源都要放在服务器端并设置缓存,并且要尽量使用长缓存。
  • 预加载:大型资源页面可使用Loading,资源加载完成后再显示页面,但是加载时间过长,会造成负体验。
  • 异步加载第三方资源:第三方资源不可控,会影响页面加载,所以要异步加载第三方资源。

4.2 图片优化

  • 尽可能的使用PNG格式的图片,它相对来说体积较小,可以使用工具压缩,在上线之前最好进行一定的优化。
  • 同时在代码中进行图片的延迟加载,也叫做赖加载。
  • 避免img、iframe等标签的src属性为空:空src会重新加载当前页面,影响速度和效率。

4.3 样式表和JS文件的优化

  • 头部内联的样式和脚本会阻塞页面的渲染,一般我们会把css样式表文件放到文件的头部使用link引入,这样可以让CSS样式表尽早地完成下载。
  • 对应js脚本文件,一般我们把脚本放在尾部并使用异步方式加载,这样可以尽最大限度的减少样式和脚本对页面的阻塞。

4.4 防抖和节流

防抖与节流通常作为项目优化的手段,一般都是为了防止用户在短时间内快而频地多次操作,触发动作执行。比如防止用户点击多次提交按钮,触发表单多次提交;防止用户拉动滚动条,多次触发加载更多等情况。

防抖:定义一个周期,操作只会在时间周期函数执行完成后才开始执行。

举例:周期2秒,不管你怎么点击,只在2秒后触发事件,2秒内点击多次也只触发一次也要等到2s后再触发事件。

节流:定义一个周期,操作第一次点击会立刻执行,后续操作时间间隔大于定义的时间周期后才开始执行。

举例:周期2秒,用户点击按钮,第一次请求马上触发,往后不管你怎么点击(2秒内点击多次也只不会触发),用户点击间隔时间大于周期后才会触发。

防抖的应用场景
  • 登录、发短信等按钮避免用户点击太快,以致于发送了多次请求,需要防抖
  • 调整浏览器窗口大小时,resize 次数过于频繁,造成计算过多,此时需要一次到位,就用到了防抖
  • 文本编辑器实时保存,当无任何更改操作一秒后进行保存
节流的应用场景
  • 鼠标连续不断地触发某事件(如点击),单位时间内只触发一次;
  • 监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断。例如:懒加载;
  • 浏览器播放事件,每个一秒计算一次进度信息等
代码
 

持续更新中。。。

到此这篇前端埋点方案xm(前端埋点方案对比)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 如何理解前端模块化(前端模块化解决方案)2025-04-26 09:36:10
  • 前端跨域设置(前端跨域设置什么意思)2025-04-26 09:36:10
  • 前端埋点怎么实现快捷键(前端埋点怎么实现快捷键)2025-04-26 09:36:10
  • 跨域是什么,如何解决跨域前端(跨域一般是前端解决还是后端解决)2025-04-26 09:36:10
  • 前端工程化的理解简书(前端工程化的理解简书怎么写)2025-04-26 09:36:10
  • 前端工程师面试技巧(前端工程师面试技巧有哪些)2025-04-26 09:36:10
  • 前端工程化包括哪些方面的(前端工程化包括哪些方面的工作)2025-04-26 09:36:10
  • 浏览器兼容性面试题(web前端浏览器兼容性面试)2025-04-26 09:36:10
  • 前端跨域请求(前端跨域请求携带cookie)2025-04-26 09:36:10
  • 前端埋点(前端埋点怎么写)2025-04-26 09:36:10
  • 全屏图片