Vue组件点击事件监控导致性能问题怎么办?

UX红会 阅读 19

在Vue项目里给按钮加了点击监控,发现页面卡顿,代码用了防抖还是没用。这是为什么啊?

我给所有按钮加了统一的点击上报逻辑,代码像这样写的:



  



export default {
  methods: {
    trackClick(type) {
      const debounced = _.debounce(() => {
        window.analytics.track('button_click', { type })
      }, 300)
      debounced()
    }
  }
}

测试时发现明明设置了300ms防抖,但每点击一次都会立即触发上报。更奇怪的是,页面有多个按钮时滚动会卡顿,控制台没报错,这是哪里出问题了?

我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
萌新.自帅
问题在于每次点击都创建了新的防抖函数,导致防抖失效。把防抖函数提到组件外部或者使用单例模式。

改好的代码像这样:

import _ from 'lodash'

const debouncedTrack = _.debounce((type) => {
window.analytics.track('button_click', { type })
}, 300)

export default {
methods: {
trackClick(type) {
debouncedTrack(type)
}
}
}


顺便说下,多个按钮共用一个防抖函数性能会好很多,之前那种写法每点一次就new个新函数,内存占用能不爆才怪。
点赞 2
2026-02-16 04:00