Возможно ли оптимизировать этот кусок кода, для увеличения производительности сайта?
Добрый день! :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);
У меня есть идея, как-то отключать этот код пока человек не на сайте, тогда хотя бы не лагали бы другие сайты. Но как? Заранее спасибо! |
VirtualGuys,
1. оставить в функции только вывод, остальное вынести за функцию. |
Цитата:
|
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>
|
Цитата:
<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>
|
На всякий случай: Intl на старых яблоках(ios9) не работает. Не то чтобы это было важно, но имелся печальный опыт.=\
|
Aetae, для этого есть https://polyfill.io/v3/url-builder/
|
Malleys, да ясенхрен, но кто же знал то?
|
| Часовой пояс GMT +3, время: 17:30. |