 
			
				06.07.2017, 20:15
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Среднее время выполнения функции, запущенной n-раз с интервалом k
			 
			
		
		
		
		Используя наработки в предыдущей моей теме: 
"Самый быстрый и короткий способ получить текст до первого пробела",
 
решил сделать функцию  вычисления среднего времени запуска тестовой функции n-раз с паузой между запусками k, но не получилось:
 
var
arr = [], // массив времен выполнения
i = 0, n = 10, // запустить тестовую функцию 10 раз
k = 2000, // интервал запуска
p = performance, // штуковина для точного измерения времени?
result, // сюда сохраним среднее значений массива 'arr'
timerId,
t0, t1; // соответственно, моменты запуска и завершения тест. функции
function test(){
 'lorem'.repeat(10000) // повторяем и соединяем строку 'lorem'
}
timerId = setTimeout(function run(){
  t0 = p.now(); // время запуска
  test();  // тестовая функция
  t1 = p.now(); // время завершения
  arr.push(t1 - t0); // время выполнения
  if (i < n){ // проверяем сколько раз запустили тестовую функцию
    i++
  }
  else {
    clearTimeout(timerId); // сброс
    result = (arr.reduce((a,b)=>a+b,0))/arr.length // вычисляем среднее времен выполнения
  };
  setTimeout(run, k);
}, k);
alert(result);  // undefined -> расстроен ((
Запускать функцию хочу как тут:
 https://learn.javascript.ru/settimeout-setinterval
Цитата: 
" Рекурсивный setTimeout гарантирует паузу между вызовами, setInterval – нет"
 
Цель:    ->    
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Teamur, 06.07.2017 в 20:23.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.07.2017, 21:35
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.12.2016 
					
					
					
						Сообщений: 3,650
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 ждать долго не надо 
10 раз для точного определения мало.  
Посмотрите как работают существующие сервисы, они крутят функцию по цепочке определенное количество времени и считают итерации. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.07.2017, 22:01
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Что-то мне подсказывает, что код функции, считающий время, в таких сервисах будет огромным. 
 
Так часто бывает, хочешь узнать как что-либо работает, надеешься, что все решается в пару строк, а там такое, что хочется все бросить )) 
 
В связи с этим, я подумал, что быстрее самому изобрести, заодно и "полоска" опыта прибавится! 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.07.2017, 22:15
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Teamur, 
 почему 29 строка не в начале 25? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.07.2017, 22:17
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 15.01.2015 
					
					
					
						Сообщений: 622
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Прежде чем писать свой бенчмарк js рекомендую почитать на эту темы статьи (благо копий сломано достаточно на это тему). Есть даже видеодоклады с конференций на русском на тему бенчмаркинга js. 
Например если вы не используете результаты выполнения функции то компилятор js может вообще ее не вызвать и вы будете мерить вызов Date.now() и Date.now() - start. К тому же любую вашу функцию js движок пытается оптимизировать в процессе работы, и поэтому она может работать быстрее через n вызовов (а может и медленнее) 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.07.2017, 22:21
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от рони
			 
		
	 | 
 
	
		Teamur, 
 почему 29 строка не в начале 25?
	 | 
 
	
 
 хотел посмотреть результат вне процедуры. 
Для этого сохранил его в переменной result.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				06.07.2017, 22:25
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 EmperioAf, 
 было такое, когда я обновлял страничку с открытой консолью, время выполнения бывало сильно отличалось раз от раза. 
 
Насчет Бенчмарков я, конечно почитаю, но я думал что это задача реально решается в пару строчек кода, десяток строк. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2017, 16:46
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Rise, 
спасибо, пригодится, но я не очень люблю подключать громоздкие библиотеки ради простых операций, нап. подключать jQuery ради удобного назначения обработчиков событий: $(elem).on('click',fn).
 
	
 
	| 
		
			Сообщение от Rise
			
		
	 | 
 
	| 
		Bulletproof JavaScript benchmarks - что способствовало созданию библиотеки
	 | 
 
	
 
 Возьму  Pattern A и мне достаточно. Я прошу вас помочь мне изменить мой код так, чтобы его логика работала также как и в БЕНЧМАРКЕ, 
наверное как в паттерне:
 
var totalTime;
var start = new Date;
var iterations = 6;
while (iterations--) {
	// Code snippet goes here.
}
// `totalTime` is the number of milliseconds it took to execute the code snippet 6 times.
totalTime = new Date - start;
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось Teamur, 07.07.2017 в 16:52.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.07.2017, 20:38
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 15.01.2015 
					
					
					
						Сообщений: 622
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Rise,
  
function sample1() {
	var str = '1 2 3 4 5 6 7 8 9 10';
	str.substring(0, str.indexOf(' '));
}
function sample2() {
	'1 2 3 4 5 6 7 8 9 10'.split(' ')[0];
}
console.log(bench(1000, sample1) + '\n' + bench(1000, sample2));
поправлю себя, действительно бенчит этот код  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось EmperioAf, 07.07.2017 в 20:56.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.07.2017, 09:28
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.06.2015 
					
					
					
						Сообщений: 206
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Всем спасибо за ответы и советы! Всего доброго! 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |