Я хочу отобразить веб-страницу, содержащую некоторые визуальные данные на мониторе, используя малину Pi, которая будет работать 24/7. На веб-странице есть div-слой (скажем, его #div), и я хочу, чтобы он просматривал несколько веб-страниц каждые 5 секунд. На каждой странице есть только простая диаграмма с диаграммами Google.
Все выглядит так, как будто работает отлично, но я думаю, что код создает утечку памяти. Через несколько часов веб-браузер (хром) выйдет из строя и скажет недостаточно памяти.
Если кто-нибудь может взглянуть на мой код и помочь мне улучшить его, я буду очень благодарен.
Это код, который я использую:
<script type="text/javascript">
function updateChart1() {
$.get("chart1.php", function(data) {
$("#div").html(data);
window.setTimeout(updateChart2, 5000);
});
}
function updateChart2() {
$.get("chart2.php", function(data) {
$("#div").html(data);
window.setTimeout(updateChart3, 5000);
});
}
function updateChart3() {
$.get("chart3.php", function(data) {
$("#div").html(data);
window.setTimeout(updateChart4, 5000);
});
}
function updateChart4() {
$.get("chart4.php", function(data) {
$("#div").html(data);
window.setTimeout(updateChart1, 5000);
});
}
$(document).ready(updateChart1);
</script>
Надеюсь, вы можете использовать <iframe>
вместо этого div. Если это так, это то, что у вас было бы:
HTML:
<iframe id="iframe" src="" />
ЯШ:
<script type="text/javascript">
var tm = null;
function updateChart1() {
$("#iframe").attr("src", "chart1.php");
if(tm) clearTimeout(tm);
tm = window.setTimeout(updateChart2, 5000);
}
function updateChart2() {
$("#iframe").attr("src", "chart2.php");
if(tm) clearTimeout(tm);
tm = window.setTimeout(updateChart3, 5000);
}
function updateChart3() {
$("#iframe").attr("src", "chart3.php");
if(tm) clearTimeout(tm);
tm = window.setTimeout(updateChart4, 5000);
}
function updateChart4() {
$("#iframe").attr("src", "chart4.php");
if(tm) clearTimeout(tm);
tm = window.setTimeout(updateChart1, 5000);
}
$(document).ready(updateChart1);
</script>
(Код может быть реорганизован для повторного использования, как говорят другие, но это не влияет на производительность, поэтому это не имеет смысла для проблемы).
Таким образом, iframe будет иметь собственную обработку памяти, и вы не будете публиковать свою память на главной странице, iframe будет обновляться каждый раз, но это не повлияет на ваш основной пользовательский интерфейс с полной перезагрузкой.
На всякий случай, я очищаю таймауты, но главное улучшение - iframe.
Cheers, из Ла-Пас, Боливия