精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

開發 前端
日志的輸出是很重要的,尤其是在 Nodejs 端,日志輸出會通過 pm2 等工具,記錄在一些日志文件里,尤其是一些比較公用的工具函數,更是非常重要,一般需要記錄這些內容。

裝飾器非常好用

前面給大家發了一篇文章xxx,給大家介紹了一遍JavaScript中的裝飾器,今天就給大家介紹一下在我項目中用到過的幾個裝飾器的思路吧!

代碼是偽代碼,只是提供個思路,實際上代碼不止這么少。

防抖裝飾器

當我們在一些特殊場景時,需要使用防抖這個優化手段來進行優化,比如:

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

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

// 裝飾器的封裝
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;
  };
}

當我們某個函數需要進行防抖處理時:

@debounce(500)
submit() {}

@debounce(500)
handleChange() {}

@debounce(500)
handleFilter() {}

節流裝飾器

節流跟防抖是不同的優化手段,節流是保證在一段時間內只執行一次操作,適用在這些場景中:

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

下面是裝飾器的封裝:

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;
  };
}

當我們某個函數需要進行節流處理時:

@throttle(200)
handleScroll() {}

@throttle(200)
handleResize() {}

日志輸出裝飾器

日志的輸出是很重要的,尤其是在 Nodejs 端,日志輸出會通過 pm2 等工具,記錄在一些日志文件里,尤其是一些比較公用的工具函數,更是非常重要,一般需要記錄這些內容。

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

下面是裝飾器的封裝:

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;
}

使用的時候:

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 的線上報錯,大部分都需要通過查日志來進行定位,所以我們也可以封裝一個錯誤的處理裝飾器:

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;
}

使用的時候:

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 管理接口時,涉及到權限校驗時,用裝飾器是非常的方便的。

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 的身份可以訪問這個接口了。

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

計時裝飾器

如果有一天,你們需要埋點,計算一些比較重要函數的運行性能時,那么你肯定需要計算這些函數的執行時間是多少,這時候封裝一個計時裝飾器會讓你非常方便。

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;
}

使用時:

class Common {
    @timing()
    commonRequest(url, params) {
        return request(url, params)
    }
}

const common = new Common()
common.commonRequest()
Execution time of commonRequest: 20 milliseconds

緩存裝飾器

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

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;
}

使用時:

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 真難受啊!

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;
  };
}

使用的時候需要傳入某個參數的類型限制。

class Common {
    @validateArgs(['string', 'object'])
    commonRequest(url, params) {
        return request(url, params)
    }
}

const common = new Common()
common.commonRequest(123, 123) // 報錯


責任編輯:武曉燕 來源: 前端之神
相關推薦

2022-08-26 14:41:47

Python數據科學開源

2020-03-18 15:54:41

開發效率代碼

2022-08-16 10:32:08

Python數據科學

2021-01-08 10:38:40

前端開發代碼

2021-08-02 09:29:08

Vscode開發Web

2024-09-23 09:00:00

裝飾器函數代碼

2024-03-08 08:00:00

Python開發裝飾器

2016-02-23 11:03:03

代碼質量編寫函數

2016-02-24 16:03:34

代碼質量編寫函數

2015-08-11 09:39:25

重構提高代碼質量

2018-09-27 09:00:00

DjangoPython

2024-09-12 15:32:35

裝飾器Python

2015-07-15 10:27:48

Android代碼質量工具

2023-09-01 07:31:41

工具工具類網站

2022-09-05 14:17:48

Javascript技巧

2023-11-22 08:26:03

HutoolJava工具集

2015-12-15 09:50:12

Linux開發效率工具

2022-08-04 09:01:45

TypeScriptMicrosoft

2023-01-06 18:31:46

準確命名

2012-10-24 14:17:25

點贊
收藏

51CTO技術棧公眾號

青青草原av在线| 一区二区三区免费在线视频| 五月激激激综合网色播| 色悠久久久久综合欧美99| 亚洲国产欧美日韩| 亚洲最大成人在线视频| 在线日韩中文| 亚洲天堂av在线免费| 日本在线视频播放| 偷拍视频一区二区三区| 夜夜亚洲天天久久| 日韩欧美手机在线| www.日本三级| 免费黄色日本网站| 香蕉av一区二区三区| 久热成人在线视频| 7m第一福利500精品视频| 黑人と日本人の交わりビデオ| 日韩欧美中文字幕一区二区三区| 一本大道久久a久久精品综合| 黑人巨大国产9丨视频| 男女视频在线观看免费| 国产白丝精品91爽爽久久| 国产精品久久久久999| 国产午夜小视频| 久久久久亚洲| 一本色道久久88精品综合| 国产精品伦子伦| 精品视频在线播放一区二区三区| 日本久久一区二区三区| 免费无码毛片一区二三区| 高h视频在线观看| 国产精品美女久久久久久| 欧美激情导航| 天天操天天干天天插| 国产精品亚洲成人| 国产精品精品国产| 九九热最新视频| 国产模特精品视频久久久久| 欧美激情精品久久久久久久变态| 91视频免费看片| 狠狠综合久久av一区二区蜜桃| 亚洲国产精久久久久久 | 91香蕉视频污在线观看| 亚洲综合图色| 日韩精品视频在线观看网址| 岛国精品一区二区三区| 久久综合给合| 日韩一区二区在线免费观看| 日韩成人精品视频在线观看| 欧美91在线|欧美| 欧美影视一区在线| 在线看的黄色网址| 男人亚洲天堂| 69堂亚洲精品首页| 黄色a级三级三级三级| 在线欧美激情| 91麻豆精品国产91久久久资源速度 | 色婷婷在线影院| 先锋影音国产精品| 亚洲欧美国产日韩中文字幕| 一级黄色片大全| 国产精品一区二区99| 国产亚洲欧美日韩美女| 五月天精品在线| 欧美午夜精彩| 日韩视频在线一区| 国产精品成人免费观看| 国产精品红桃| 57pao精品| 欧美日韩a v| 久草中文综合在线| 成人黄动漫网站免费| 日韩中文字幕观看| 久久久国产午夜精品| 天堂社区 天堂综合网 天堂资源最新版 | jizz国产免费| 毛片一区二区| 成人在线小视频| 亚洲高清在线观看视频| 93久久精品日日躁夜夜躁欧美| 美女主播视频一区| 黄在线免费看| 午夜激情一区二区三区| 国产女大学生av| 成人mm视频在线观看| 日韩欧美综合一区| 午夜理伦三级做爰电影| 亚洲va在线| 91av视频导航| 亚洲天堂999| 成人高清免费观看| 性欧美.com| 丁香花视频在线观看| 欧美色涩在线第一页| 亚洲av综合色区无码另类小说| 少妇高潮一区二区三区| 久久精品视频在线| 一区二区三区福利视频| 狠狠久久亚洲欧美| 牛人盗摄一区二区三区视频| 超碰人人在线| 色乱码一区二区三区88| 无码人妻丰满熟妇区毛片蜜桃精品| 日本亚洲不卡| 久久国产精品99国产精| 99久久久久久久久| 国产精品 日产精品 欧美精品| 欧美日韩一区二| 在线观看电影av| 91精品1区2区| 毛茸茸free性熟hd| 亚洲精品成人| 国产精品白丝jk喷水视频一区| 亚洲国产精品久久久久久久| 国产精品国产自产拍在线| a级黄色一级片| 国产一区二区| 自拍偷拍亚洲一区| 日韩黄色一级视频| 99久久99久久综合| 老子影院午夜伦不卡大全| 成人在线中文| 亚洲天堂av图片| 久久久久久久黄色片| 国产成人综合亚洲91猫咪| 在线日韩av永久免费观看| 成人美女视频| 亚洲国产精品美女| 欧美性受xxxx| 国产毛片久久久久久| 成人在线免费观看视频| 日本成人免费在线| 无码国产色欲xxxx视频| 亚洲成人免费视| 在线播放av网址| 欧美午夜不卡| 99c视频在线| 伊人影院蕉久影院在线播放| 51午夜精品国产| 欧美h片在线观看| 美女网站在线免费欧美精品| 日本在线高清视频一区| 成人做爰视频www网站小优视频| 亚洲激情电影中文字幕| 日韩av女优在线观看| 不卡一区在线观看| av免费观看大全| 青青一区二区| 91精品国产电影| 亚洲欧洲综合在线| 欧美日韩国产中字| 88久久精品无码一区二区毛片| 国产日韩欧美| 欧美日韩一区二区视频在线观看 | 亚洲免费观看在线观看| 日韩不卡的av| 欧美成人亚洲| 国产精品久久久久久久久婷婷| √8天堂资源地址中文在线| 亚洲成人精品久久| 天天干天天干天天操| 久久婷婷成人综合色| 激情婷婷综合网| 人人狠狠综合久久亚洲婷| 国产欧美一区二区| 最新国产在线拍揄自揄视频| 精品国精品国产尤物美女| 日韩xxxxxxxxx| 久久久久久久网| 三上悠亚av一区二区三区| 五月精品视频| 国产精品久久精品国产| 亚洲校园激情春色| 色爱精品视频一区| 亚洲成a人片77777精品| 欧美视频一二三| 免费一级特黄3大片视频| 国内不卡的二区三区中文字幕 | 亚洲成色www8888| 粉嫩aⅴ一区二区三区| 国产午夜精品久久久久久免费视| 久久国产精品国产精品| 狠色狠色综合久久| 日本10禁啪啪无遮挡免费一区二区| 亚洲a成人v| 97av在线影院| 日韩子在线观看| 精品黑人一区二区三区久久| 久久精品视频2| 亚洲精品日产精品乱码不卡| 久久国产精品影院| 国产又粗又猛又爽又黄91精品| 妞干网在线观看视频| 欧洲视频一区| 国产精华一区| 影音成人av| 午夜精品一区二区三区在线视| 成人性爱视频在线观看| 欧美精品一区二区三区在线 | 欧美大片一区二区三区| 91午夜精品亚洲一区二区三区| 亚洲另类春色国产| 国产精品成人无码免费| 成人亚洲一区二区一| 91福利国产成人精品播放| 日韩视频一区| 久久久久久久免费视频| 国产精品片aa在线观看| 国产女主播一区二区| 欧美亚洲综合视频| 国产999在线观看| 欧洲性视频在线播放| 色噜噜狠狠狠综合曰曰曰| 四虎国产精品永远| 日韩欧美在线观看一区二区三区| а中文在线天堂| 精品久久久久久久久国产字幕| 国产探花在线播放| 国产精品成人免费在线| 亚洲人成人无码网www国产| 成人不卡免费av| 亚洲AV成人精品| 精品一区二区三区免费| 男女污污的视频| 久久精品一区| 久久久久久久久久久视频| 黄色成人av网站| 免费日韩在线观看| 亚洲成人tv| 青青草原国产免费| 日韩精品2区| 神马影院我不卡| 国产一区国产二区国产三区| 欧美国产综合视频| 中日韩免视频上线全都免费| 国模大尺度一区二区三区| 日韩中文字幕在线视频观看| 亚洲韩日在线| 日韩欧美不卡在线| 亚洲国产二区| 日韩a∨精品日韩在线观看| 亚洲私拍自拍| 日本中文字幕网址| 性色一区二区三区| 超碰网在线观看| 久久久蜜桃一区二区人| 国产精彩免费视频| 日韩国产欧美视频| 国产九九在线视频| 精品在线观看视频| 三年中文在线观看免费大全中国| 久久国产精品色婷婷| 亚洲男人天堂av在线| 激情另类小说区图片区视频区| www.亚洲自拍| 国产成人av在线影院| 人妻av一区二区| 99这里只有精品| 国产jjizz一区二区三区视频| 国产欧美日韩在线看| 中国美女黄色一级片| 亚洲另类中文字| 91久久国产视频| 色婷婷精品久久二区二区蜜臀av | 亚洲成人黄色av| 国产精品视频一区二区三区不卡| 香蕉成人在线视频| 一区二区在线电影| 欧美日韩综合在线观看| 91黄色免费版| 国产美女主播在线观看| 亚洲国产成人精品一区二区 | 精品国产一区二区三区四区在线观看| a级网站在线播放| 97高清免费视频| 九九九伊在线综合永久| 2019国产精品视频| 亚洲人成伊人成综合图片| 亚洲精品在线免费看| 欧美成人日韩| 黄色片一级视频| 精品亚洲国产成人av制服丝袜| 中文字幕99页| 日本一二三四高清不卡| 久久亚洲AV无码| 在线免费观看不卡av| 精品国产av一区二区三区| 日韩精品免费在线视频观看| 97电影在线| 午夜伦理精品一区 | 国产精品视频在线免费观看| jvid福利在线一区二区| 国产乱淫av片杨贵妃| 日韩avvvv在线播放| 日韩色av导航| 神马久久久久久久久久| 伊人久久久久久久久久久| 欧美激情成人动漫| 国产精品一区二区3区| 丁香五月缴情综合网| 亚洲视频电影| 国产精品日韩精品欧美精品| 91精品国产三级| 久久精品一区二区三区不卡牛牛| 青青草手机在线视频| 欧美午夜精品免费| 香蕉久久一区二区三区| 欧美大肥婆大肥bbbbb| 欧美色网在线| 精品久久久久久中文字幕动漫 | 一区二区三区高清在线观看| 亚洲精品欧洲精品| 久久成人一区| 中国一级特黄录像播放| 亚洲视频一二三区| 中国黄色一级视频| 亚洲美女又黄又爽在线观看| 超碰中文在线| 99精品99久久久久久宅男| 久久人人88| 国产精品人人爽人人爽| 久久只精品国产| www.天天色| 精品精品国产高清a毛片牛牛| 国产福利在线播放麻豆| 国产啪精品视频| 成人a'v在线播放| 午夜激情福利在线| 久久亚洲私人国产精品va媚药| 成人免费看片98| 日韩网站在线看片你懂的| 麻豆传媒视频在线| 国产有码一区二区| 日本a级不卡| 羞羞的视频在线| 国产精品婷婷午夜在线观看| 国产乱码在线观看| 中文字幕日韩欧美| 国外成人福利视频| 欧美 日韩 国产 在线观看| 免费成人性网站| 99在线视频免费| 欧美日韩国产a| 久久日韩视频| 亚洲自拍中文字幕| 欧美精品大片| 中文字幕制服丝袜| 亚洲成人免费影院| 免费在线高清av| 国产精品高精视频免费| 日韩在线高清| 久久婷婷中文字幕| 亚洲一区中文日韩| 同心难改在线观看| 国产精品第一页在线| 91精品国产成人观看| 韩国三级hd中文字幕有哪些| 亚洲一卡二卡三卡四卡五卡| 天堂网在线中文| 国产成人av网| 91精品一区二区三区综合在线爱| 国产精品熟女一区二区不卡| 久久99视频| 18成人在线| 亚洲激情偷拍| 一色道久久88加勒比一| 欧美日韩国产三级| 免费在线国产视频| 精品免费一区二区三区蜜桃| 日韩av中文字幕一区二区三区 | 亚洲欧美丝袜中文综合| 国产精品久久久久av免费| 亚洲精品国产首次亮相| 你懂的在线观看网站| 欧美三级中文字幕| 日本乱理伦在线| 久久久婷婷一区二区三区不卡| 全部av―极品视觉盛宴亚洲| 欧美三级黄色大片| 日韩av网址在线观看| 99久久婷婷国产综合精品首页| 老汉色影院首页| 97se狠狠狠综合亚洲狠狠| 国产精品国产三级国产aⅴ| 久久久日本电影| 欧美一区二区三区高清视频| gogo亚洲国模私拍人体| 日韩欧美亚洲成人| 国产黄a三级三级三级av在线看| 精品久久久久久中文字幕动漫| 久久国产免费看| 国产又爽又黄的视频| 久久深夜福利免费观看| 天堂av一区二区三区在线播放 | 美女国产精品久久久| 已婚少妇美妙人妻系列| 亚洲国产欧美在线| 欧美性猛交xxx乱大交3蜜桃| 精品一区二区视频|