Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Возможно ли оптимизировать этот кусок кода, для увеличения производительности сайта? (https://javascript.ru/forum/css-html/78725-vozmozhno-li-optimizirovat-ehtot-kusok-koda-dlya-uvelicheniya-proizvoditelnosti-sajjta.html)

VirtualGuys 26.10.2019 12:56

Возможно ли оптимизировать этот кусок кода, для увеличения производительности сайта?
 
Добрый день! :yes: Я только недавно начал писать на JavaScript, и пытался написать для своего сайта часы, чтобы человек мог в любое время посмотреть время. Но столкнулся с такой проблемой, что часы нужно обновлять каждую 1 - 1.5 секунд, чтобы постоянно ставить нужное время, и в итоге на сайте очень низкая производительность, и даже другие сайты начинают лагать из-за этого. А если я поставлю обновление раз в минуту, то тогда часы будут неправильно обновляться. Например человек зайдёт на сайт в 12 минут 30 секунд, и часы обновятся не в 13 минут 0 секунд, а в 13 минут 30 секунд. Как можно оптимизировать это, и возможно ли это вообще?
Это код на часы:
function watch() {
          var time = new Date();
          var h = time.getHours();
          var m = time.getMinutes();
          var text = document.createTextNode("0:00");
          var b = document.createElement("p");
          b.appendChild(text);
          b.setAttribute("id", "clock");
          var parent = document.getElementById("maind"); //Это div
          var child = document.getElementById("clock"); //Это текст для часов
          parent.replaceChild(b, child);
         if(m>=10) {
           text.nodeValue = h + ":" + m;
        }
        if(m<10) {
           text.nodeValue = h + ":" + "0" + m; //Чтобы показывало не 8:2, а 8:02
         }
        }
        setInterval(watch, 1500);

У меня есть идея, как-то отключать этот код пока человек не на сайте, тогда хотя бы не лагали бы другие сайты. Но как? Заранее спасибо!

рони 26.10.2019 14:38

VirtualGuys,
1. оставить в функции только вывод, остальное вынести за функцию.

рони 26.10.2019 14:38

Цитата:

Сообщение от VirtualGuys
очень низкая производительность,

врятли из-за этого скрипта

рони 26.10.2019 15:08

DateTimeFormat
 
VirtualGuys,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>

  <script>
    const intl = new Intl.DateTimeFormat("ru", {
        hour: "2-digit",
        minute: "2-digit"
    });
    const timeEveryOneMinute = () => {
	const data = new Date(),
	time = intl.format(data);
	maind.innerHTML = `Текущее время: ${time}`;
	setTimeout(timeEveryOneMinute, 1000 * 60);
    }
   addEventListener('DOMContentLoaded', timeEveryOneMinute);
  </script>
</head>

<body>
<div id="maind"></div>

</body>
</html>

Malleys 26.10.2019 19:26

Цитата:

Сообщение от VirtualGuys
А если я поставлю обновление раз в минуту, то тогда часы будут неправильно обновляться. Например человек зайдёт на сайт в 12 минут 30 секунд, и часы обновятся не в 13 минут 0 секунд, а в 13 минут 30 секунд. Как можно оптимизировать это, и возможно ли это вообще?

VirtualGuys, можно так...
<div id="maind"></div>
<script>
	const dateTimeFormatOptions = {
		hour: "2-digit",
		minute: "2-digit"
	};
	(function tick () {
		const time = new Date().toLocaleTimeString("ru", dateTimeFormatOptions)
		maind.textContent = `Текущее время: ${time}`
		setTimeout(tick, 1000)
	})()
</script>

Aetae 26.10.2019 21:23

На всякий случай: Intl на старых яблоках(ios9) не работает. Не то чтобы это было важно, но имелся печальный опыт.=\

Malleys 26.10.2019 21:56

Aetae, для этого есть https://polyfill.io/v3/url-builder/

Aetae 27.10.2019 06:21

Malleys, да ясенхрен, но кто же знал то?


Часовой пояс GMT +3, время: 20:42.