日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

分享能提高開發效率,提高代碼質量的八個前端裝飾器函數

來源: 責編: 時間:2024-05-21 17:32:39 202觀看
導讀裝飾器非常好用前面給大家發了一篇文章xxx,給大家介紹了一遍JavaScript中的裝飾器,今天就給大家介紹一下在我項目中用到過的幾個裝飾器的思路吧!代碼是偽代碼,只是提供個思路,實際上代碼不止這么少。防抖裝飾器當我們在一

裝飾器非常好用

前面給大家發了一篇文章xxx,給大家介紹了一遍JavaScript中的裝飾器,今天就給大家介紹一下在我項目中用到過的幾個裝飾器的思路吧!bab28資訊網——每日最新資訊28at.com

代碼是偽代碼,只是提供個思路,實際上代碼不止這么少。bab28資訊網——每日最新資訊28at.com

防抖裝飾器

當我們在一些特殊場景時,需要使用防抖這個優化手段來進行優化,比如:bab28資訊網——每日最新資訊28at.com

  • 表單提交
  • 數據的搜索
  • 數據的篩選
  • 某些數據的更改
  • 數據改變時觸發的回調

這些函數都可以使用防抖裝飾器來進行性能優化,防抖的意思是,當你頻繁執行某一個操作時,這個操作只執行最后一次,確保不會因為頻繁的執行而損耗性能~下面是裝飾器的封裝:bab28資訊網——每日最新資訊28at.com

// 裝飾器的封裝function debounce(delay) {  return function(target, key, descriptor) {    const originalMethod = descriptor.value;    let timer;    descriptor.value = function(...args) {      clearTimeout(timer);      timer = setTimeout(() => {        originalMethod.apply(this, args);      }, delay);    };    return descriptor;  };}

當我們某個函數需要進行防抖處理時:bab28資訊網——每日最新資訊28at.com

@debounce(500)submit() {}@debounce(500)handleChange() {}@debounce(500)handleFilter() {}

節流裝飾器

節流跟防抖是不同的優化手段,節流是保證在一段時間內只執行一次操作,適用在這些場景中:bab28資訊網——每日最新資訊28at.com

  • 監聽窗口寬度變化的回調
  • 監聽滾動條變化的回調

下面是裝飾器的封裝:bab28資訊網——每日最新資訊28at.com

function throttle(delay) {  return function(target, key, descriptor) {    const originalMethod = descriptor.value;    let timer;    let lastExecTime = 0;    descriptor.value = function(...args) {      const now = Date.now();      if (now - lastExecTime >= delay) {        lastExecTime = now;        originalMethod.apply(this, args);      } else {        clearTimeout(timer);        timer = setTimeout(() => {          originalMethod.apply(this, args);        }, delay);      }    };    return descriptor;  };}

當我們某個函數需要進行節流處理時:bab28資訊網——每日最新資訊28at.com

@throttle(200)handleScroll() {}@throttle(200)handleResize() {}

日志輸出裝飾器

日志的輸出是很重要的,尤其是在 Nodejs 端,日志輸出會通過 pm2 等工具,記錄在一些日志文件里,尤其是一些比較公用的工具函數,更是非常重要,一般需要記錄這些內容。bab28資訊網——每日最新資訊28at.com

  • 執行的函數名稱
  • 執行時傳入的參數
  • 執行后獲取到的結果

下面是裝飾器的封裝:bab28資訊網——每日最新資訊28at.com

function log(target, key, descriptor) {  const originalMethod = descriptor.value;  descriptor.value = function(...args) {    console.log(`Entering ${key} with arguments:`, args);    const result = originalMethod.apply(this, args);    console.log(`Exiting ${key} with result:`, result);    return result;  };  return descriptor;}

使用的時候:bab28資訊網——每日最新資訊28at.com

class Common {    @log()    commonRequest(url, params) {        return request(url, params)    }}const common = new Common()common.commonRequest('http://xxx.com', { name: 'l' })Entering commonRequest with arguments: ['http://xxx.com', { name: 'l' }]Exiting commonRequest with result: { 結果 }

錯誤處理裝飾器

跟日志裝飾器一樣,錯誤其實也是日志的一部分,錯誤日志非常重要,因為 Nodejs 的線上報錯,大部分都需要通過查日志來進行定位,所以我們也可以封裝一個錯誤的處理裝飾器:bab28資訊網——每日最新資訊28at.com

function errorHandler(target, key, descriptor) {  const originalMethod = descriptor.value;  descriptor.value = function (...args) {    try {      originalMethod.apply(this, args);    } catch (error) {      console.error(`Error occurred in ${key}:`, error);    }  };  return descriptor;}

使用的時候:bab28資訊網——每日最新資訊28at.com

class Common {    @log()    commonRequest(url, params) {        return request(url, params)    }}const common = new Common()common.commonRequest('http://xxx.com', { name: 'l' })Error occurred in commonRequest: Request Error

權限校驗裝飾器

權限的校驗在前端一般都不用裝飾器,但是在 Nodejs 管理接口時,涉及到權限校驗時,用裝飾器是非常的方便的。bab28資訊網——每日最新資訊28at.com

function authenticated(target, key, descriptor) {  const originalMethod = descriptor.value;  descriptor.value = function(...args) {    if (isAuthenticated()) {      originalMethod.apply(this, args);    } else {      console.log('Unauthorized access!');    }  };  return descriptor;}

使用的時候,這樣就只有 admin 的身份可以訪問這個接口了。bab28資訊網——每日最新資訊28at.com

class User {      @Get('/xx/xx')    @authenticated('admin')    getUser() {}}

計時裝飾器

如果有一天,你們需要埋點,計算一些比較重要函數的運行性能時,那么你肯定需要計算這些函數的執行時間是多少,這時候封裝一個計時裝飾器會讓你非常方便。bab28資訊網——每日最新資訊28at.com

function timing(target, key, descriptor) {  const originalMethod = descriptor.value;  descriptor.value = function(...args) {    const start = performance.now();    const result = originalMethod.apply(this, args);    const end = performance.now();    console.log(`Execution time of ${key}: ${end - start} milliseconds`);    return result;  };  return descriptor;}

使用時:bab28資訊網——每日最新資訊28at.com

class Common {    @timing()    commonRequest(url, params) {        return request(url, params)    }}const common = new Common()common.commonRequest()Execution time of commonRequest: 20 milliseconds

緩存裝飾器

這個裝飾器適用在某一些場景,如果你有一個函數是用來計算值的,并且計算的過程非常復雜非常耗時間,那我建議你可以把這些計算結果儲存起來,而不是每次都重新計算,這能大大提升你的計算性能。bab28資訊網——每日最新資訊28at.com

function cache(target, key, descriptor) {  const originalMethod = descriptor.value;  const cache = new Map();  descriptor.value = function(...args) {    const cacheKey = JSON.stringify(args);    if (cache.has(cacheKey)) {      return cache.get(cacheKey);    }    const result = originalMethod.apply(this, args);    cache.set(cacheKey, result);    return result;  };  return descriptor;}

使用時:bab28資訊網——每日最新資訊28at.com

class Compute() {    @cache()    run(num1, num2) {        // 這里舉個簡單例子        return num1 + num2    }}const c = new Compute()c.run(1, 2) // 3 首次計算c.run(1, 2) // 3 接下來都從緩存中拿

參數校驗裝飾器

在老項目中,無法用到 typescript 這么好的東西時,對于一些函數執行時,有必要用裝飾器對傳進來的參數的類型進行校驗~沒辦法,沒有 typescript 真難受啊!bab28資訊網——每日最新資訊28at.com

function validateArgs(...types) {  return function (target, key, descriptor) {    const originalMethod = descriptor.value;    descriptor.value = function (...args) {      for (let i = 0; i < types.length; i++) {        const type = types[i];        const arg = args[i];        if (typeof arg !== type) {          throw new Error(`Invalid argument type at index ${i}`);        }      }      originalMethod.apply(this, args);    };    return descriptor;  };}

使用的時候需要傳入某個參數的類型限制。bab28資訊網——每日最新資訊28at.com

class Common {    @validateArgs(['string', 'object'])    commonRequest(url, params) {        return request(url, params)    }}const common = new Common()common.commonRequest(123, 123) // 報錯


bab28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-89713-0.html分享能提高開發效率,提高代碼質量的八個前端裝飾器函數

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C# 線程池的使用方法

下一篇: 如何為 Nest.js 編寫單元測試和 E2E 測試

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲电影观看| 欧美精品一区二区三| 亚洲一区二区在线免费观看| 夜夜精品视频| 亚洲欧美日韩一区在线| 久久久久久午夜| 欧美激情一区二区三区成人| 国产精品videossex久久发布| 国产精品一二三四区| 激情成人av| 亚洲最新合集| 亚洲亚洲精品在线观看 | 欧美一区二区三区成人| 久久久久国内| 欧美国产三级| 国产伦精品一区二区| 亚洲国产成人不卡| 在线亚洲一区观看| 欧美在线网址| 欧美另类亚洲| 国产一区二区三区在线观看精品 | 久久xxxx| 欧美日韩国产探花| 国产区日韩欧美| 在线欧美亚洲| 亚洲一区二区在线免费观看视频| 久久久久久夜| 亚洲第一黄网| 亚洲少妇在线| 久久频这里精品99香蕉| 欧美三级网页| 在线成人av网站| 亚洲专区一区| 欧美激情a∨在线视频播放| 国产欧美日韩另类视频免费观看 | 日韩一二在线观看| 久久九九精品99国产精品| 欧美三区在线观看| 亚洲国产精品久久久久婷婷884 | 欧美麻豆久久久久久中文| 狠狠色丁香婷婷综合| 亚洲一区久久久| 欧美精品乱人伦久久久久久| 好男人免费精品视频| 亚洲已满18点击进入久久| 欧美福利在线| 有坂深雪在线一区| 欧美一区二区黄色| 国产精品久久久久久久久久妞妞| 亚洲欧洲一区二区三区在线观看 | 亚洲——在线| 欧美日韩免费一区二区三区| 在线成人中文字幕| 久久精品女人| 国产精品视频一二| 亚洲视频在线观看网站| 欧美精品九九| 亚洲国产91精品在线观看| 欧美在线亚洲| 国产美女精品一区二区三区| 亚洲视频国产视频| 欧美日韩高清区| 亚洲精品一区在线| 欧美激情乱人伦| 亚洲丰满在线| 老牛影视一区二区三区| 国语对白精品一区二区| 欧美资源在线观看| 国产日韩亚洲| 午夜日韩激情| 国产精品免费一区豆花| 亚洲一区二区精品在线| 国产精品久久久久国产a级| 一区二区三区欧美| 欧美三级乱码| 亚洲图片欧美日产| 欧美亚一区二区| 亚洲视频一二区| 欧美性久久久| 亚洲专区国产精品| 国产麻豆综合| 久久大香伊蕉在人线观看热2| 国产亚洲精品bv在线观看| 欧美一区二区三区四区在线 | 国产真实久久| 久久久久久尹人网香蕉| 在线播放中文字幕一区| 农夫在线精品视频免费观看| 亚洲黄色免费| 欧美激情免费观看| 99视频精品在线| 欧美性做爰毛片| 亚洲欧美bt| 国产亚洲午夜| 玖玖玖国产精品| 亚洲国产视频a| 欧美精品亚洲| 亚洲在线免费观看| 国产午夜精品全部视频在线播放| 久久本道综合色狠狠五月| 经典三级久久| 欧美精品一区二区三区蜜桃 | 欧美黄色免费网站| 亚洲午夜久久久久久尤物| 国产精品腿扒开做爽爽爽挤奶网站| 午夜在线视频一区二区区别| 国产一区二区中文| 欧美大片免费观看在线观看网站推荐| 亚洲日韩欧美视频一区| 欧美日韩精品免费看| 亚洲欧美日韩精品一区二区 | 黑丝一区二区三区| 欧美黑人国产人伦爽爽爽| 亚洲午夜一区二区| 国产精品自拍一区| 久久久久久久久久久久久女国产乱| 亚洲第一黄网| 国产精品扒开腿做爽爽爽视频 | 午夜精品久久久久99热蜜桃导演| 国产综合色产| 欧美精品在线播放| 亚洲一区二区三区四区在线观看| 国产一区二区三区无遮挡| 欧美成人免费视频| 亚洲午夜精品视频| 在线观看国产日韩| 欧美日韩精品二区| 欧美有码在线视频| 亚洲欧洲一区| 国产欧美一区二区三区在线看蜜臀| 玖玖玖国产精品| 亚洲一区二区三区四区视频| 黄色成人在线网址| 欧美视频在线不卡| 久久视频在线视频| 在线一区二区日韩| 激情久久一区| 国产精品久久国产精品99gif| 久久天天躁夜夜躁狠狠躁2022| 99国产精品久久久久久久久久 | 国语自产精品视频在线看| 欧美日韩精品系列| 久久久青草婷婷精品综合日韩| 99视频在线观看一区三区| 好看的日韩视频| 欧美日韩一区国产| 久久资源在线| 亚洲欧美日韩精品久久| 亚洲人成在线播放网站岛国| 国产欧美日韩在线播放| 免费在线亚洲欧美| 欧美亚洲网站| 99在线热播精品免费| 黑人巨大精品欧美黑白配亚洲| 欧美网站在线观看| 欧美大片专区| 久久久久久久久伊人| 亚洲女人av| 一本色道久久综合狠狠躁篇的优点 | 久久综合九色综合欧美就去吻| 中国成人亚色综合网站| 亚洲国产日韩一级| 国产在线观看一区| 国产精品国产a级| 欧美极品在线播放| 开心色5月久久精品| 久久xxxx精品视频| 亚洲女人av| 亚洲午夜av在线| 一区二区高清视频| 亚洲人成在线免费观看| 一区二区亚洲精品| 国产日韩在线看片| 国产精品成人一区二区三区夜夜夜 | 国产精品久久91| 欧美久久久久| 亚洲午夜精品网| 99精品免费视频| 亚洲人妖在线| 亚洲国产老妈| 亚洲第一天堂无码专区| 国产亚洲一区二区三区在线观看 | 一区二区在线观看av| 国产亚洲欧美另类中文| 国产精品亚洲综合色区韩国| 欧美性猛交99久久久久99按摩| 欧美乱人伦中文字幕在线| 亚洲视频第一页| 夜夜嗨av色一区二区不卡| 亚洲精品免费网站| 亚洲日韩第九十九页| 亚洲国产精品久久久久婷婷884 | 一区二区日本视频| 一区二区三区国产精品| 日韩一二三区视频| 日韩特黄影片| 亚洲裸体视频| 亚洲乱亚洲高清| 亚洲精品美女在线观看播放| 亚洲精品久久久久久下一站 | 亚洲欧美日产图| 亚洲欧美在线观看| 欧美一区二区视频97| 欧美在线一二三四区|