最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js 函數(shù)性能比較方法

 更新時間:2020年08月24日 15:17:02   作者:quanwuhui  
在學習js過程中,經(jīng)常會遇到同樣一個功能點 這樣實現(xiàn)也可以,那樣實現(xiàn)也可以。但是哪個方式最優(yōu)呢

在學習js過程中,經(jīng)常會遇到同樣一個功能點 這樣實現(xiàn)也可以,那樣實現(xiàn)也可以。但是哪個方式最優(yōu)呢?自己寫了一個簡短的proferencesCompare 函數(shù)。代碼如下:

/**
	 * 函數(shù)性能比較
	 * @param fns 要比較的函數(shù)數(shù)組
	 * @args 每個要比較函數(shù)在執(zhí)行的時候傳入的參數(shù),可以是數(shù)組,或者 被調(diào)用后 返回數(shù)組類型
	 * @repeatCount 每個函數(shù)重復執(zhí)行的次數(shù),多次執(zhí)行 拉開差距。默認值10000
	 * 
	 * @return [{runTime:執(zhí)行repeatCount次總時間,repeatCount:重復執(zhí)行次數(shù),name:函數(shù)名稱,chrome是函數(shù)名,IE由于不支持funciton.name,所以默認 fn+函數(shù)在fns中index}]
	 * */
	function proferencesCompare(fns, args, repeatCount) {
		var tmpArgs, tmpFns;
		var result = [];
		var starTime, endTime;
		var i = 0;
		var repeatCount = repeatCount || 10000;
		var isFunction = false;
		if(fns === undefined) {
			throw Error('Must have the compare funciton');
		}
 
		var typeName = typeof args;
 
		//檢測傳入的args是否能夠返回array類型數(shù)據(jù)
		if(typeName === 'function') {
			tmpArgs = args();
			isFunction = true;
		}
 
		if(typeName === 'number') {
			tmpArgs = [];
			repeatCount = args;
		}
 
		//檢測args 是否為 array
		if(Object.prototype.toString.call(tmpArgs) !== '[object Array]') {
			throw Error('The test args is must a array or a function which return the array');
		}
 
		var len = fns.length;
		for(; i < len; i++) {
			var fnName = fns[i].name || "fn" + i;
			starTime = Date.now();
			console.time(fnName);
			for(var j = 0; j < repeatCount; j++) {
				if(isFunction && (i !== 0 || j !== 0)) {
					//如果args是函數(shù),并且循環(huán)是第一次進入,則不需要再執(zhí)行一次。前面做args檢測時已經(jīng)執(zhí)行過一次
					tmpArgs = args();
				}
				fns[i].apply(this, tmpArgs);
			}
			console.timeEnd(fnName);
			endTime = Date.now();
			result.push({ runTime: endTime - starTime, repeatCount: repeatCount, name: fnName });
		}
		return result;
	}

使用例子如下:

var fn1 = function() {
		var a;
		return !a;
	}
 
var fn2 = function() {
		var a;
		return a === undefined;
	}
 
var fn3 = function() {
		var a;
		return a == undefined;
	}
 
var result = proferencesCompare([fn1, fn2, fn3, fn3, fn2, fn1], 1000000000);

這個例子主要比較 對于函數(shù)中 判斷對象是否為undefined 的幾種實現(xiàn)方式的性能比較。

chrome:

結(jié)果顯示 其實性能差不多。

下面是其他同學的補充

快速比較代碼執(zhí)行效率的方法

測試效率可以使用Stopwatch :

Stopwatch sw = new Stopwatch();
sw.Start();//寫在要執(zhí)行的代碼前面

sw.Stop();//寫在要執(zhí)行的代碼結(jié)尾
sw.Elapsed//得到代碼執(zhí)行時間

核心函數(shù)

int[] array = { 15,20,10,3,5};
Stopwatch sw = new Stopwatch();
sw.Start();

for (int i = 0; i < array.Length - 1; i++) {
  for (int j = i + 1; j < array.Length; j++) {
    if (array[i] > array[j]) {

      int temp = array[i];
      array[i] = array[j];
      array[j] = temp;
    }
  }
}
sw.Stop();
Console.WriteLine(sw.Elapsed);

到此這篇關(guān)于js 函數(shù)性能比較方法的文章就介紹到這了,更多相關(guān)js 函數(shù)性能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 熱點新聞滾動特效的js代碼

    熱點新聞滾動特效的js代碼

    我們在很多大型門戶網(wǎng)站都會有看到有些一熱點新聞都會一直向上滾動,下面我就來給大家推薦一款Javascript中熱點新聞滾動特效代碼,有需要了解的朋友可以參考一下
    2013-08-08
  • 微信小程序系列之自定義頂部導航功能

    微信小程序系列之自定義頂部導航功能

    這篇文章主要介紹了微信小程序系列之自定義頂部導航功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • JS 強制設(shè)為首頁的代碼

    JS 強制設(shè)為首頁的代碼

    把網(wǎng)站設(shè)置為瀏覽器的首頁是我們做網(wǎng)站時經(jīng)常加到網(wǎng)站頂部的功能!下面這段代碼是強制設(shè)置為首頁的代碼!最好別用?。『呛?!
    2009-01-01
  • JavaScript實現(xiàn)簡單表單驗證案例

    JavaScript實現(xiàn)簡單表單驗證案例

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)簡單表單驗證案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Javascript 中介者模式實例

    Javascript 中介者模式實例

    在頁面上,用戶會有很多的操作 ,每進行一次操作我們需要去展示操作的結(jié)果,在這里我們有了一個問題,我們應(yīng)如何去展示不同的結(jié)果呢?
    2009-12-12
  • CSS鼠標響應(yīng)事件經(jīng)過、移動、點擊示例介紹

    CSS鼠標響應(yīng)事件經(jīng)過、移動、點擊示例介紹

    本文為大家介紹下CSS 鼠標響應(yīng)事件:鼠標經(jīng)過CSS、鼠標移動CSS、鼠標點擊CSS以及示例,喜歡的朋友可以參考下
    2013-09-09
  • 用Javascript 和 CSS 實現(xiàn)腳注(Footnote)效果

    用Javascript 和 CSS 實現(xiàn)腳注(Footnote)效果

    腳注(Footnote)是向用戶提供更多信息的一個最佳途徑,也是主體信息的一個有效補充,常見于各種印刷書籍中。
    2009-09-09
  • JavaScript 異步時序問題

    JavaScript 異步時序問題

    這篇文章主要介紹了JavaScript 異步時序問題,幫助大家更好的理解和學習JavaScript,感興趣的朋友可以了解下
    2020-11-11
  • js判斷客戶端是iOS還是Android等移動終端的方法

    js判斷客戶端是iOS還是Android等移動終端的方法

    本文為大家介紹下使用js判斷客戶端是iOS還是Android等移動終端,示例代碼如下,感興趣的朋友可以參考下
    2013-12-12
  • JS實現(xiàn)簡單的天數(shù)計算器完整實例

    JS實現(xiàn)簡單的天數(shù)計算器完整實例

    這篇文章主要介紹了JS實現(xiàn)簡單的天數(shù)計算器,結(jié)合完整實例形式分析了javascript針對日期的獲取及天數(shù)運算相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04

最新評論

财经| 固原市| 长白| 铜川市| 武陟县| 顺义区| 馆陶县| 陵川县| 甘肃省| 托克逊县| 靖安县| 北碚区| 达州市| 锡林郭勒盟| 徐闻县| 东海县| 通辽市| 四会市| 鹤山市| 巩义市| 河津市| 冕宁县| 虎林市| 大田县| 新乐市| 台前县| 烟台市| 醴陵市| 突泉县| 进贤县| 阜南县| 资兴市| 腾冲县| 曲沃县| 晋江市| 屯门区| 南澳县| 达州市| 绍兴市| 开远市| 绿春县|