如何处理总是没有响应的应用程序?

时间:2011-08-17 06:16:29

标签: javascript performance

我的应用程序是使用django框架和jQuery开发的。运行应用程序一段时间后它始终没有响应或“Aw,Snap!”在意外时间内使用Chrome。

我首先想到的问题是每2秒运行一次javascript并加载一些值。我有几个页面运行这种脚本。脚本是这样的:

$(document).ready(function(){
    $(window).load(function loadMap(){
        var mappos = $("#mappos").val();
        var pcode = $("#pcode").val();
        var width = $("#width").val();
        var loss = $("#loss").val();
        var lossarr = $("#lossarr").val();
        var spcode = $("#spcode").val();
        var swidth = $("#swidth").val();
        var cpcode = $('#minclamp', top.document).contents().find('#cpcode').val();
        var cwidth = $('#minclamp', top.document).contents().find('#cwidth').val();
        var lane = $('#minclamp', top.document).contents().find('#lane').val();
        var position = $('#minclamp', top.document).contents().find('#position').val();
        var atlane = $('#minclamp', top.document).contents().find('#atlane').val();
        var atposition = $('#minclamp', top.document).contents().find('#atposition').val();
        var clamping = $("#clamping").val();
        var changed = $("#changed").val();
        var realtag = $('#minclamp', top.document).contents().find('#realtag').val()
        $("#inventory").load(inventory_url+"?pcode="+pcode+"&width="+width+"&loss="+loss+"&lossarr="+lossarr+"&spcode="+spcode+"&swidth="+swidth+"&cpcode="+cpcode+"&cwidth="+cwidth+"&lane="+lane+"&position="+position+"&atlane="+atlane+"&atposition="+atposition+"&clamping="+clamping+"&changed="+changed+"&realtag="+realtag+"&mappos="+mappos);
        }

        setTimeout(loadMap, 2000);
    });
});

如果我是对的,是否有其他代码执行相同但不会导致不响应这样的事件。或者有什么技术可以改善这个吗?

如果还有其他问题需要考虑,请建议我。谢谢。

2 个答案:

答案 0 :(得分:0)

尝试将settimeout置于loadMap函数中......完成所有工作后...并使用$(document).ready函数

$(document).ready(function ()
{
    var loadMap = function()
    {
        var mappos = $("#mappos").val();
        var pcode = $("#pcode").val();
        var width = $("#width").val();
        var loss = $("#loss").val();
        var lossarr = $("#lossarr").val();
        var spcode = $("#spcode").val();
        var swidth = $("#swidth").val();
        var cpcode = $('#minclamp', top.document).contents().find('#cpcode').val();
        var cwidth = $('#minclamp', top.document).contents().find('#cwidth').val();
        var lane = $('#minclamp', top.document).contents().find('#lane').val();
        var position = $('#minclamp', top.document).contents().find('#position').val();
        var atlane = $('#minclamp', top.document).contents().find('#atlane').val();
        var atposition = $('#minclamp',  top.document).contents().find('#atposition').val();
        var clamping = $("#clamping").val();
        var changed = $("#changed").val();
        var realtag = $('#minclamp', top.document).contents().find('#realtag').val()
        $("#inventory").load(inventory_url+"?pcode="+pcode+"&width="+width+"&loss="+loss+"&lossarr="+lossarr+"&spcode="+spcode+"&swidth="+swidth+"&cpcode="+cpcode+"&cwidth="+cwidth+"&lane="+lane+"&position="+position+"&atlane="+atlane+"&atposition="+atposition+"&clamping="+clamping+"&changed="+changed+"&realtag="+realtag+"&mappos="+mappos, function()
        {
           // set the timer here in the completeCallback of your 'load' function.
             setTimeout(function()                  
             {
                loadMap();
             }, 2000);
        }));           
    }; 
    loadMap();// call the first load map;
});

答案 1 :(得分:-1)

您是否尝试过使用单独的线程?

编辑: 如果你知道你在找什么:http://www.websiteoptimization.com/speed/10/ 非常好