Optimize Event Handling in Vue with Throttling and Debouncing Techniques

Learn to implement throttling and debouncing in event handling to improve performance in interactive Vue applications.

0 likes
41 views

Rule Content

{
  "title": "Optimize Event Handling in Vue with Throttling and Debouncing Techniques",
  "description": "Ensure efficient event handling in Vue components by implementing throttling and debouncing techniques to improve performance in interactive applications.",
  "category": "Vue Cursor Rules",
  "severity": "warning",
  "patterns": [
    {
      "pattern": "\\.addEventListener\\(\\s*['\"](scroll|resize|mousemove|input|keydown)['\"]\\s*,\\s*function\\s*\\(",
      "message": "Consider applying throttling or debouncing to this event listener to enhance performance.",
      "fix": "Wrap the event handler function with a throttling or debouncing utility, such as those provided by Lodash or VueUse."
    },
    {
      "pattern": "@(scroll|resize|mousemove|input|keydown)\\s*=\\s*['\"]\\w+['\"]",
      "message": "Consider applying throttling or debouncing to this event binding to enhance performance.",
      "fix": "Wrap the method in the event binding with a throttling or debouncing utility, such as those provided by Lodash or VueUse."
    }
  ],
  "examples": [
    {
      "bad": "window.addEventListener('scroll', function() { /* handler code */ });",
      "good": "import { throttle } from 'lodash';\nconst throttledHandler = throttle(function() { /* handler code */ }, 200);\nwindow.addEventListener('scroll', throttledHandler);"
    },
    {
      "bad": "<input @input=\"handleInput\">",
      "good": "import { debounce } from 'lodash';\nexport default {\n  methods: {\n    handleInput: debounce(function() { /* handler code */ }, 300)\n  }\n};\n<input @input=\"handleInput\">"
    }
  ]
}