jQuery $ .get () разные страницы каждые 5 секунд

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
    Кстати, вы должны позаботиться о возможности повторного использования кода .
  • 0
    Если вы используете что-то вроде мета-таймаута, у вас не возникнет проблем с памятью. w3.org/TR/WCAG20-TECHS/H76.html
Показать ещё 9 комментариев
Теги:

1 ответ

1
Лучший ответ

Надеюсь, вы можете использовать <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, из Ла-Пас, Боливия

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню