gpt4 book ai didi

php - 在数据表 jQuery 中传播大量数据的更快方法

转载 作者:行者123 更新时间:2023-11-29 12:19:49 24 4
gpt4 key购买 nike

我有一个客户模块和这个客户列表。我正在使用 Laravel 5 和这个包 http://datatables.net/ .我正在使用它是因为它具有内置的搜索和排序功能。因此,当我加载页面时,我正在发出 ajax 请求以查询我的 customers 表中的所有记录,然后使用 datatables 包/插件将所有记录传播到表中.问题是当我有太多记录时,比如 20,000。页面不会响应。我认为这需要太多的处理。所以这是我的 jquery 代码:

$.ajax({
url: "api/customer/all",
type: 'GET',
success: function(result){
var myObj = $.parseJSON(result);
//console.log(myObj);
$.each(myObj, function(key,value) {
var t = $('#CustomerList').DataTable();
t.row.add( [
value.id,
value.firstname,
value.lastname,
value.gender,
value.phone_num,
value.postcode,
value.country,
"<a class='btn btn-small btn-info' href='<?php echo URL::to('customer').'/';?>"+value.id+"/edit'><span class='glyphicon glyphicon glyphicon-edit' aria-hidden='true'></span></a>",
"<form method='POST' action='<?php echo URL::to('customer').'/';?>"+value.id+"' accept-charset='UTF-8' class='pull-left' >"+
"<input name='_method' type='hidden' value='DELETE'>"+
"<button type='submit' class='btn btn-warning'><span class='glyphicon glyphicon-trash' aria-hidden='true'></span></button>"+"</form>",
] ).draw();

});
}});

然后是路线

Route::get('api/customer/all', 'CustomerController@apiGetCustomers');

Controller 函数

//$customers = Customer::orderBy('id', 'desc')->get();
$query = "SELECT * FROM customers ORDER BY id ASC;";
$data = DB::connection('pgsql')->select($query);

return json_encode($data);

你看,我之前也使用 Eloquent 来获取数据,但它处理大量数据很糟糕,所以我改用 Query Builder。我认为它变慢的原因是 jquery,因为我可以快速又好地获取所有数据。我如何更快地传播它?我正在使用 Postgre 9.3 SQL。

最佳答案

Dom 操作可能非常慢。您可能希望按间隔添加行,这可能对用户体验更好。因此,也许可以使用 setTimeout() 并尝试处理记录数和等待毫秒数。可能值得一试。

(function loadDataTable() {

var data,
curIndex = 0,
t = $('#CustomerList').DataTable(),
AMOUNT_ROWS = 100;

function addMoreRows() {

var i, value, limit = curIndex + AMOUNT_ROWS;

if (limit > data.length) limit = data.length;

for (i = curIndex; i < limit; i++) {

value = data[i];

t.row.add([
value.id,
value.firstname,
value.lastname,
value.gender,
value.phone_num,
value.postcode,
value.country,
"<a class='btn btn-small btn-info' href='<?php echo URL::to('customer').'/';?>" + value.id + "/edit'><span class='glyphicon glyphicon glyphicon-edit' aria-hidden='true'></span></a>",
"<form method='POST' action='<?php echo URL::to('customer').'/';?>" + value.id + "' accept-charset='UTF-8' class='pull-left' >" +
"<input name='_method' type='hidden' value='DELETE'>" +
"<button type='submit' class='btn btn-warning'><span class='glyphicon glyphicon-trash' aria-hidden='true'></span></button>" + "</form>"
]).draw();

curIndex = i + 1;

if (curIndex != data.length) setTimeout(addMoreRows, 200); // give browser time to process other things

}
}

$.ajax({
url: "api/customer/all",
type: 'GET',
success: function(result) {
data = $.parseJSON(result);
addMoreRows();
}
});
}

})();

关于php - 在数据表 jQuery 中传播大量数据的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32474262/

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