@arturka_v_10

Как сократить js код?

Написал себе для динамичности сий код:

<script>
function calc_sum(a, b, c, d, N){

	var x = parseInt(new Date().getTime()/1000); // убирание лишнего хвоста
    var a = a;
	var b = b;
	var c = c;
	var d = d;
	var now_time = x;
	
	var plus = (60*60*d); // юникод времени 60*60*N, где N - часы
	//var si_time = now_time+plus;
	
	//var si_time = ham;
	//alert(now_time+" -> "+si_time+" -> <?=$set_time?>");
	//alert(x+" > "+now_time+" + ("+plus+") ="+si_time+" -> <?=$set_time?>");
	
	if(c>0){
	if(b > 0 && a > 0){
	
	
    var HV = c < now_time ? 1 : 0;
	
	var timer = c < now_time ? now_time - c : 0;
	var per_sec = (a / plus).toFixed(10); 
	
	var per_sec2 = now_time-c;
	
	var as_sum = per_sec * b * timer;
	
	// рабочая отладка показаний
	//alert(c+" > (if "+c+" < "+now_time+" = "+per_sec2+" result["+HV+"]) AND "+a+"/"+plus+"="+per_sec+" AS sum -> "+as_sum);
	
	$('#countSum'+N).html((per_sec * b * timer).toFixed(2));
	}//else return 0;
	}//else return 0;
}

setInterval(calc_sum,1000,"<?=$cfg["pf1"]?>","<?=$usdat["fa1"]?>","<?=$usdat["sbor"]?>","24","1");
setInterval(calc_sum,1000,"<?=$cfg["pf2"]?>","<?=$usdat["fa2"]?>","<?=$usdat["sbor"]?>","24","2");
setInterval(calc_sum,1000,"<?=$cfg["pf3"]?>","<?=$usdat["fa3"]?>","<?=$usdat["sbor"]?>","24","3");
setInterval(calc_sum,1000,"<?=$cfg["pf4"]?>","<?=$usdat["fa4"]?>","<?=$usdat["sbor"]?>","24","4");
setInterval(calc_sum,1000,"<?=$cfg["pf5"]?>","<?=$usdat["fa5"]?>","<?=$usdat["sbor"]?>","24","5");
</script>


Он содействует с php, я пока только обучаюсь сжатию, то что видите выше - это тот максимум, к которому я пришел, ранее было 5 таких функций (calc_sum1(), calc_sum2() и тд...)

В общем интересует как сократить setInterval'ы ибо они останутся на сервере, а саму функцию унесу на иной домен и она будет подключаемым компонентом.

Функция делает расчет от момента сбора юзером, с учетом кол-ва инвентаря fa( -N ) и доходности pf( -N );
1-5 обозначает id элемента; 24 - сутки.

Я бы и так оставил, да вот кажется мне не красиво столько setInterval'ов
  • Вопрос задан
  • 496 просмотров
Пригласить эксперта
Ответы на вопрос 3
Stalker_RED
@Stalker_RED
var x = parseInt(new Date().getTime()/1000);
// x нигде больше не используется, почему сразу не присвоить now_time?
var a = a; // эти строки вообще не нужны
var b = b;
var c = c;
var d = d;
var now_time = x;

if(c>0){
  if(b > 0 && a > 0){

можно заменить на if(c>0 && b > 0 && a > 0){ или даже if(a && b && c) если они отрицательными не бывают.

plus используется в одном месте, HV, as_sum и per_sec2- вообще не используются.
получается:
function calc_sum(a, b, c, d, N) {
  if (a && b && c) {
    var now_time = parseInt(new Date().getTime()/1000);
    var timer = c < now_time ? now_time - c : 0;
    var per_sec = (a / 3600 / d).toFixed(10); 
    $('#countSum'+N).html((per_sec * b * timer).toFixed(2));
  }
}

стало короче, а читабельности все равно не было.

Можно и еще короче
function calc_sum(a, b, c, d, N) {
  if (a && b && c) {
    var now_time = parseInt(new Date().getTime()/1000);
    $('#countSum'+N).html(((a / 3600 / d).toFixed(10) * b * (c < now_time ? now_time - c : 0)).toFixed(2));
  }
}
но это совсем моск выносит.
Ответ написан
Комментировать
@arturka_v_10 Автор вопроса
Как-то так сократил (созданием вспомогательной func):

function IDbeSum(a,b,c,d,e){
setInterval(calc_sum,1000,a,b,c,d,e);
}

IDbeSum(<?=$cfg["pf1"]?>,<?=$usdat["fa1"]?>,<?=$usdat["sbor"]?>,24,1);
IDbeSum(<?=$cfg["pf2"]?>,<?=$usdat["fa2"]?>,<?=$usdat["sbor"]?>,24,2);
IDbeSum(<?=$cfg["pf3"]?>,<?=$usdat["fa3"]?>,<?=$usdat["sbor"]?>,24,3);
IDbeSum(<?=$cfg["pf4"]?>,<?=$usdat["fa4"]?>,<?=$usdat["sbor"]?>,24,4);
IDbeSum(<?=$cfg["pf5"]?>,<?=$usdat["fa5"]?>,<?=$usdat["sbor"]?>,24,5);
Ответ написан
XXXXPro
@XXXXPro
Fullstack Web developer
Зачем нужны конструкции вида var a=a и зачем текущее время сначала присваивать в x, а потом переносить в now_time? Можно сразу в now_time поместить.
Еще можно объединить условия: c>0 && a>0 && b>0
Также можно применить такую вещь как замыкание (closure), если знаете, как его делать, хотя особого сокращения оно тут не даст.
А setInerval можно вызывать в обычном цикле for:
<?php for ($i=0; $i<5; $i++) echo 'setInterval(calc_sum,1000,"'.$cfg['pf'.$i].'",".$usdat['fa'.$i].'","'.$usdat['sbor'].'",24,"'.$i.'");'; ?>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы