gpt4 book ai didi

javascript - jQuery Find and Replace 正在挂起浏览器!数据量太大?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:02:44 24 4
gpt4 key购买 nike

在@kalley 的大量帮助下,我们发现如果我注释掉以下两行,则 LAG 消失了!

 var $tableContents = $table.find('tbody')
var $html = $('<tbody/>').html(data);

但我如何保留上述但取消 LAG ?


更多信息:下面的代码有效,但问题是 $.GET 导致浏览器挂起,直到 ajax 请求完成。我需要(流量控制?)或在 ajax 完成 GET 请求之前无需锁定/挂断浏览器即可解决此问题的方法。

最大的 LAG/Lockup/Hang 位于 $.get("updatetable.php",因为其他只返回 7 个或更少的(数字)值,而这个('updatetable.php' ) 返回更多(200-300kb)。我想在这里实现某种流量控制,或者让脚本在触发 tablesort 的更新命令之前和显示 toast 消息之前等待 5 秒,以便 ajax 有时间获取$.get("updatetable.php"data 我只是不明白为什么它在获取数据时锁定浏览器?它是否试图触发其他命令,这就是导致 LAG 的原因?

这是步骤

1.$.get("getlastupdate.php" 将每 10 秒左右触发一次以检查日期和时间是否相同返回数据如下所示:20130812092636 格式是:YYYmmddHHmmss。

2.如果日期和时间与上次 GET 不同,则 $.get("getlastupdate2.php" 将触发,此数据将发回并放入 toast 消息中并显示给用户$().toastmessage('showNoticeToast', Vinfo);

3.在上述 ($.get("getlastupdate2.php") 之前或之后,将触发另一个 GET:$.get('updatetable.php' 这将获取更新的表信息。并用新信息替换旧信息。然后更新/重新排序表

4.在这一切的最后我想要它将破坏 session 并注销用户。

    <script type="text/javascript" src="tablesorter/jquery-1.10.2.min.js"></script> 
<script type="text/javascript" src="tablesorter/final/jquery.tablesorter.js"></script>
<script type="text/javascript" src="tablesorter/final/jquery.tablesorter.widgets.js"></script>
<script type="text/javascript" src="tablesorter/final/toastmessage/jquery.toastmessage-min.js"></script>
<script type="text/javascript" src="tablesorter/qtip/jquery.qtip.min.js"></script>

<script type="text/javascript">
var comper;
function checkSession() {
return $.get("ajaxcontrol.php", function (DblIn) {
console.log('checking for session');
if (DblIn == 1) {
window.location = 'loggedout.php';
}
}).then(updateTable);
}

function checkComper() {
var SvInfo;
var onResponse = function (comperNow) {
if (comper === undefined) {
comper = comperNow;
} else if (comper !== comperNow) {
var Vinfoo;
comper = comperNow;
// returning this $.get will make delay done until this is done.
return $.get("getlastupdate2.php", function (primaryAddType) {
Vinfoo = primaryAddType;
$().toastmessage('showNoticeToast', Vinfoo);
}).then(checkSession);
}
};
$.get('getlastupdate.php').then(onResponse).done(function () {
tid = setTimeout(checkComper, 2000);
});
}


function updateTable() {
return $.get('updatetable.php', function (data) {
console.log('update table');
var $table = $("table.tablesorter");
var $tableContents = $table.find('tbody')
var $html = $('<tbody/>').html(data);
$tableContents.replaceWith('<tbody>' + data + '</tbody>')
//$tableContents.replaceWith($html)
$table.trigger("update", [true]);
var currentUrl = document.getElementById("frmcontent").contentWindow.location.href;
var urls = ['indexTOM.php', 'index1.php'],
frame = document.getElementById('frmcontent').contentDocument;

for (var i = 0; i < urls.length; i++) {
var url = urls[i];
if (frame.location.href.indexOf(url) !== -1) {
frame.location.reload()
}
}

$('[title!=""]').qtip({});
});

};


$(function () {
var tid = setTimeout(checkComper, 2000);


$("#append").click(function (e) {
// We will assume this is a user action
e.preventDefault();
updateTable();
});

// call the tablesorter plugin
$("table.tablesorter").tablesorter({
theme: 'blue',
// hidden filter input/selects will resize the columns, so try to minimize the change
widthFixed: true,
// initialize zebra striping and filter widgets
widgets: ["saveSort", "zebra", "filter"],
headers: {
8: {
sorter: false,
filter: false
}
},
widgetOptions: {
filter_childRows: false,
filter_columnFilters: true,
filter_cssFilter: 'tablesorter-filter',
filter_filteredRow: 'filtered',
filter_formatter: null,
filter_functions: null,
filter_hideFilters: false, // true, (see note in the options section above)
filter_ignoreCase: true,
filter_liveSearch: true,
filter_reset: 'button.reset',
filter_searchDelay: 300,
filter_serversideFiltering: false,
filter_startsWith: false,
filter_useParsedData: false
}
});

// External search
$('button.search').click(function () {
var filters = [],
col = $(this).data('filter-column'), // zero-based index
txt = $(this).data('filter-text'); // text to add to filter
filters[col] = txt;
$.tablesorter.setFilters($('table.hasFilters'), filters, true); // new v2.9
return false;
});
});
</script>

最佳答案

也许您应该考虑切换到 setTimeout 而不是使用 setInterval。它会让您更好地控制时间何时重复:

function checkComper() {
var SvInfo;
var onResponse = function (comperNow) {
if (comper === undefined) {
comper = comperNow;
} else if (comper !== comperNow) {
var Vinfoo;
comper = comperNow;
// returning this $.get will make delay done until this is done.
return $.get("getlastupdate2.php", function (primaryAddType) {
Vinfoo = primaryAddType;
$().toastmessage('showNoticeToast', Vinfoo);
}).then(checkSession);
}
};
$.get('getlastupdate.php').then(onResponse).done(function () {
tid = setTimeout(checkComper, 10000);
});
}

var tid = setTimeout(checkComper, 10000);

然后你可以保持它async: true

这是一个 fiddle使用 echo.jsontest.com 和一些伪造的数字展示它的工作情况。

由于 click 事件回调似乎是问题所在,尝试这样做并查看它是否消除了滞后(我删除了其他评论以使其更简短):

function checkSession() {
return $.get("ajaxcontrol.php", function (DblIn) {
console.log('checking for session');
if (DblIn == 1) {
window.location = 'loggedout.php';
}
}).then(updateTable);
}
function updateTable() {
return $.get('updatetable.php', function (data) {
console.log('update table');
var $tableContents = $table.find('tbody')
//var $html = $('<tbody/>').html(data);
//$tableContents.replaceWith($html);

// replaceWith text seems to be much faster:
// http://jsperf.com/jquery-html-vs-replacewith/4
$tableContents.replaceWith('<tbody'> + data + '</tbody>');

//$table.trigger("update", [true]);
var currentUrl = document.getElementById("frmcontent").contentWindow.location.href;
var urls = ['indexTOM.php', 'index1.php'],
frame = document.getElementById('frmcontent').contentDocument;

for (var i = 0; i < urls.length; i++) {
var url = urls[i];
if (frame.location.href.indexOf(url) !== -1) {
frame.location.reload()
}
}

$('[title!=""]').qtip({});
});

};

$("#append").click(function (e) {
// We will assume this is a user action
e.preventDefault();
updateTable();
});

我注释掉了 $table.trigger("update", [true]) 因为如果你在返回之前在服务器上对表进行排序,你不需要运行它,这我几乎可以肯定瓶颈在哪里。

关于javascript - jQuery Find and Replace 正在挂起浏览器!数据量太大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18149941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com