2014-01-06 2 views
0

Я хочу показать веб-страницу, содержащую некоторые визуальные данные на мониторе, используя малину 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> 
+2

Кстати, вы должны заботиться о * повторном использовании кода * действительно. – DontVoteMeDown

+0

Если вы используете что-то вроде мета-тайм-аута, вы не столкнетесь с проблемами памяти. http://www.w3.org/TR/WCAG20-TECHS/H76.html – asawyer

+0

@asawyer Первое, что приходит мне на ум, это то, что, но как перезагрузить только содержимое div? – DontVoteMeDown

ответ

1

Я надеюсь, что вы можете использовать вместо этого дел. Если это так, то это то, что вы хотите иметь:

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, из Ла-Пас, Боливия

+0

Спасибо, Эдгар, это приятное решение. Я по-прежнему не предпочитаю никаких iframes, но если это единственный способ остановить утечку памяти, я буду использовать iframes. – Wesley

Смежные вопросы