Vue使用lodash進(jìn)行防抖節(jié)流的實(shí)現(xiàn)
Lodash
在Vue中,可以通過(guò)使用Lodash庫(kù)中提供的防抖和節(jié)流函數(shù)來(lái)有效地控制事件的觸發(fā)次數(shù),以提高頁(yè)面性能。具體實(shí)現(xiàn)如下:
- 安裝 Lodash 庫(kù)
npm install --save lodash
- 導(dǎo)入 debounce 和 throttle 函數(shù)并定義到 Vue 組件中
import debounce from 'lodash/debounce'; import throttle from 'lodash/throttle'; export default { data() { return { // 組件數(shù)據(jù) } }, created() { // 在 mounted 階段綁定事件處理函數(shù) window.addEventListener('scroll', debounce(this.handleScroll, 200)); window.addEventListener('resize', throttle(this.handleResize, 500)); }, methods: { // 防抖處理函數(shù) handleScroll: debounce(function() { // 處理滾動(dòng)事件 }, 200), // 節(jié)流處理函數(shù) handleResize: throttle(function() { // 處理窗口大小改變事件 }, 500) }, destroyed() { // 在組件銷毀前移除事件監(jiān)聽(tīng)函數(shù) window.removeEventListener('scroll', debounce(this.handleScroll, 200)); window.removeEventListener('resize', throttle(this.handleResize, 500)); } }
這里的 debounce
和 throttle
是 Lodash 庫(kù)中提供的函數(shù),分別實(shí)現(xiàn)了防抖和節(jié)流的功能。其中,debounce
函數(shù)會(huì)返回一個(gè)新函數(shù),該函數(shù)會(huì)在最后一次調(diào)用時(shí)延遲指定時(shí)間再執(zhí)行,而在此之前的調(diào)用都會(huì)被忽略;throttle
函數(shù)則會(huì)返回一個(gè)新函數(shù),在指定時(shí)間內(nèi)最多執(zhí)行一次,多余的調(diào)用都會(huì)被忽略。
在這個(gè)例子中,我們將滾動(dòng)事件和視口大小改變事件分別綁定了防抖和節(jié)流函數(shù),并在組件銷毀前移除了事件監(jiān)聽(tīng)函數(shù),以避免內(nèi)存泄漏。
debounce
lodash
中的 debounce
函數(shù)可以用于對(duì)一個(gè)函數(shù)在執(zhí)行時(shí)添加延時(shí),這樣可以確保該函數(shù)不會(huì)被頻繁調(diào)用,從而提升網(wǎng)頁(yè)性能。具體來(lái)說(shuō),debounce
函數(shù)返回一個(gè)新的函數(shù),該函數(shù)會(huì)在最后一次調(diào)用之后指定的時(shí)間內(nèi)執(zhí)行。
下面是一個(gè)簡(jiǎn)單的使用示例:
import debounce from 'lodash/debounce'; function myFunction() { // 這里是處理邏輯 } const debounceMyFunction = debounce(myFunction, 1000); // 在此之后,如果需要執(zhí)行 myFunction,應(yīng)該調(diào)用 debounceMyFunction
在這個(gè)例子中,我們首先通過(guò)導(dǎo)入 lodash/debounce
來(lái)獲取 debounce
函數(shù)。然后,我們定義了一個(gè)名為 myFunction
的普通函數(shù),這個(gè)函數(shù)的主要任務(wù)是處理一些邏輯。最后,我們使用 debounce
函數(shù)創(chuàng)建了一個(gè)名為 debounceMyFunction
的新函數(shù),該函數(shù)會(huì)在最后一次調(diào)用之后等待 1000 毫秒再執(zhí)行,這樣就實(shí)現(xiàn)了防抖的效果。
需要注意的是,在使用 debounce
函數(shù)的時(shí)候,應(yīng)該盡量避免在一個(gè)循環(huán)中多次調(diào)用 debounce
函數(shù)。否則,每次都會(huì)生成一個(gè)新的函數(shù),會(huì)影響性能。如果需要在一個(gè)循環(huán)中使用 debounce
函數(shù),可以將 debounce
函數(shù)定義在循環(huán)外部,然后在循環(huán)中只保存生成的函數(shù),而不是每次都生成一個(gè)新的函數(shù)。
throttle
lodash
中的 throttle
函數(shù)可以用于對(duì)一個(gè)函數(shù)進(jìn)行節(jié)流,即在一定時(shí)間內(nèi)最多只能執(zhí)行一次該函數(shù)。這樣可以避免函數(shù)被頻繁調(diào)用而影響頁(yè)面性能。具體來(lái)說(shuō),throttle
函數(shù)返回一個(gè)新的函數(shù),該函數(shù)會(huì)在每個(gè)指定時(shí)間間隔內(nèi)最多執(zhí)行一次原函數(shù)。
下面是一個(gè)簡(jiǎn)單的使用示例:
import throttle from 'lodash/throttle'; function myFunction() { // 這里是處理邏輯 } const throttleMyFunction = throttle(myFunction, 1000); // 在此之后,如果需要執(zhí)行 myFunction,應(yīng)該調(diào)用 throttleMyFunction
在這個(gè)例子中,我們首先通過(guò)導(dǎo)入 lodash/throttle
來(lái)獲取 throttle
函數(shù)。然后,我們定義了一個(gè)名為 myFunction
的普通函數(shù),這個(gè)函數(shù)的主要任務(wù)是處理一些邏輯。最后,我們使用 throttle
函數(shù)創(chuàng)建了一個(gè)名為 throttleMyFunction
的新函數(shù),該函數(shù)會(huì)在每個(gè)指定時(shí)間間隔內(nèi)最多執(zhí)行一次原函數(shù),這樣就實(shí)現(xiàn)了節(jié)流的效果。
需要注意的是,與 debounce
不同,throttle
會(huì)在指定時(shí)間間隔內(nèi)最多執(zhí)行一次原函數(shù),并且會(huì)在時(shí)間間隔結(jié)束后再執(zhí)行一次,而不是在最后一次調(diào)用之后執(zhí)行。如果需要在最后一次調(diào)用之后添加延時(shí)再執(zhí)行函數(shù),應(yīng)該使用 debounce
。
到此這篇關(guān)于Vue使用lodash進(jìn)行防抖節(jié)流的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Vue lodash防抖節(jié)流內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Element-UI中關(guān)于table表格的那些騷操作(小結(jié))
這篇文章主要介紹了Element-UI中關(guān)于table表格的那些騷操作(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Vue打包優(yōu)化之生產(chǎn)環(huán)境刪除console日志配置
這篇文章主要為大家介紹了Vue打包優(yōu)化之生產(chǎn)環(huán)境刪除console日志配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06vue通過(guò)過(guò)濾器實(shí)現(xiàn)數(shù)據(jù)格式化
這篇文章主要介紹了vue通過(guò)過(guò)濾器實(shí)現(xiàn)數(shù)據(jù)格式化的方法,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07vue監(jiān)聽(tīng)scroll的坑的解決方法
這篇文章主要介紹了vue監(jiān)聽(tīng)scroll的坑的解決方法,現(xiàn)在分享給大家,也給大家做個(gè)參考,希望給有同樣經(jīng)歷的人幫助2017-09-09vue使用$store.commit() undefined報(bào)錯(cuò)的解決
這篇文章主要介紹了vue使用$store.commit() undefined報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06uni-app 使用編輯器創(chuàng)建vue3 項(xiàng)目并且運(yùn)行的操作方法
這篇文章主要介紹了uni-app 使用編輯器創(chuàng)建vue3 項(xiàng)目并且運(yùn)行的操作方法,目前uniapp 創(chuàng)建的vue3支持 vue3.0 -- 3.2版本 也就是說(shuō)setup語(yǔ)法糖也是支持的,需要的朋友可以參考下2023-01-01vue本地打開(kāi)build后生成的dist文件夾index.html問(wèn)題
這篇文章主要介紹了vue本地打開(kāi)build后生成的dist文件夾index.html問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-09-09