Search code examples
javascriptjqueryajaxxmlhttprequest

How to optimize ajax response in jquery?


I am fetching about 5000 rows of data from the database and also 5 relational tables data. Which is causing the issue. I see in network tab size of request resource is 9.1 mb . after that I am appending data in table like this

$.ajax({
            type: "POST",
            url: url,
            data: form.serialize(), // serializes the form's elements.
            success: function(data) {


                if (data.status == "success") {
                    var consignment = data.consignment;

                    for (var i = 0; i <= consignment.length; i++) {
                        if (typeof consignment[i] !== "undefined") {

                            if (consignment[i].run_sheets != null) {
                                var run_sheet_name = consignment[i].run_sheets.name;
                                var run_sheet_id = consignment[i].run_sheets.id;
                                if (consignment[i].run_sheets.drivers != null) {
                                    var driver = consignment[i].run_sheets.drivers.name;

                                } else {
                                    var driver = '';
                                }
                                if (consignment[i].run_sheets.vehicles != null) {
                                    var vehicle = consignment[i].run_sheets.vehicles.name;
                                } else {
                                    var vehicle = '';
                                }
                            } else {
                                var run_sheet_name = '';
                                var run_sheet_id = '';
                                var driver = '';
                                var vehicle = '';
                            }


                            if (consignment[i].delivery_runs !== null) {
                                var delivery_run_name = consignment[i].delivery_runs.name;
                            } else {
                                var delivery_run_name = '';
                            }
                            if (consignment[i].delivery_addresses != null) {
                                var delivery_name = consignment[i].delivery_addresses.company_name;
                                var delivery_suburb = consignment[i].delivery_addresses.suburb;
                                var delivery_postcode = consignment[i].delivery_addresses.postcode;
                            } else {
                                var delivery_name = '';
                                var delivery_suburb = '';
                                var delivery_postcode = '';
                            }
                            if (consignment[i].customers != null) {
                                var customer_name = consignment[i].customers.name;

                            } else {
                                var customer_name = '';
                            }

                            if (consignment[i].product_types != null || consignment[i].product_types != undefined) {
                                var product_type = consignment[i].product_types.name;

                            } else {

                                var product_type = null;
                            }
                            $('#consignment_table > tbody').append(

                                `<tr class="consignment-row" id="${consignment[i].id}"><td><label class="kt-checkbox kt-checkbox--single kt-checkbox--solid">
                                    <input  type="checkbox"  class="kt-checkable check_con" name="check_consignment" data-id="${consignment.id}"  value="${consignment[i].id}">
                                    <span></span>
                                    </label></td><td>${consignment[i].id}</td><td>${$.trim(customer_name)}</td><td>${consignment[i].customer_reference}</td><td>${$.trim(delivery_name)}</td><td>${$.trim(delivery_suburb)}</td><td>${$.trim(delivery_postcode)}</td><td class="carton">${consignment[i].carton}</td><td>${consignment[i].pallet}</td><td>${consignment[i].space}</td><td>${consignment[i].weight}</td><td>${$.trim(run_sheet_name)}</td><td>${run_sheet_id}</td><td>${getStatusName(consignment[i].status)}</td><td>${$.trim(delivery_run_name)}</td><td>${$.trim(getFormattedDate(consignment[i].delivery_date))}</td><td>${$.trim(getFormattedDate(consignment[i].required_delivery_date))}</td><td>${driver}</td><td>${vehicle}</td><td>${consignment[i].consignment_type}</td><td>${$.trim(product_type)}</td><td><a href="/consignments/show/${consignment[i].id}"><i class="fa fa-eye"></i></a></td></tr>`

                            );
                        }
                    }
                } else {

                    toastr.error(data.message);
                }

                $('#consignment_table').DataTable({
                    "deferRender": true,
                    responsive: true,
                    "order": [],
                    "bSort": true,
                    scrollY: '50vh',
                    scrollX: true,
                    scrollCollapse: true,
                    "paging": false,
                    dom: '<"top"i>f<"top"rt><"clear">',

                    aLengthMenu: [
                        [-1],
                        ["All"]
                    ],
                    iDisplayLength: 5000
                }).draw();

                $('.loader').hide();

            }



        });

It is taking long time to render about 2 to 3 minutes. and some times browser page crashes. Is there any way in which I can solve this issue fast the rendering without crashing browser?

I cant use pagination. or any thing like that I just need to render data at once


Solution

  • Actually, this issue was not only because of big data main issue was data table response property.

    when I commented responsive property now it's working perfectly fine

    Now time is reduced from 2min to 15sec

    $('#consignment_table').DataTable({
    
                        // responsive: true,
    
                        scrollY: '50vh',
                        scrollX: true,
                        scrollCollapse: false,
                        "paging": false,
    
                        dom: '<"top"i>f<"top"rt><"clear">',
    
                        aLengthMenu: [
                            [-1],
                            ["All"]
                        ],
                        iDisplayLength: 5000
                    }).draw();