Utilicé la siguiente llamada ajax para recuperar datos de la base de datos y mostrarlos en mi página.
$.ajax({ type: "POST", url: "MyPage.aspx/LoadGrid", data: "{idyear:'2020'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { $(".gridBody").html(response.d); }, failure: function (response) { alert(response.d); } });Actualmente esta operación devuelve 1026 registros y toma alrededor de 12 segundos.
Dado que este proceso lleva mucho tiempo y los registros serán mayores en el futuro, tengo que encontrar una forma alternativa de cargar datos más rápido.
Entonces, probé otro enfoque. Decidí obtener el número total de registros al principio. por ejemplo, ahora tengo 1026 registros y si quiero cargar mis datos en límites de 100 registros, necesito hacer 11 llamadas ajax simultáneamente y combinar los resultados al final de todas las llamadas ajax. Pensé que al aplicar este método puedo iniciar todas las llamadas juntas y no tengo que esperar a que finalice una llamada para iniciar una nueva.
var pagesize = 100; getQty(function () { var pagesqty = Math.floor(qty / pagesize); if (qty % pagesize > 0) { pagesqty += 1; } var control = 0; for (var i = 0; i < pagesqty; i++) { $.ajax({ type: "POST", url: "MyPage.aspx/LoadGridMtoN", data: "{idyear:'2020' , page:'" + i + "' , pagesize:'" + pagesize + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { //alert(control+" succeed"); eval("var str" + i + "='" + response.d + "'"); control += 1; if (control == pagesqty) { var str = ""; for (var i = 0; i < pagesqty; i++) { eval("str += str" + i); } $(".gridBody").html(str); } }, failure: function (response) { alert(response.d); } }); } });pero ahora recibo un error de tiempo de espera al ejecutar llamadas ajax. ¿alguien sabe alguna manera mejor?
PD: Quería probar webworker, pero parece que no puedo usar JQuery en web Workwer.
PD: No quiero usar paginación. Debería cargar todos los datos juntos.
La respuesta que no quiere escuchar es que necesita arreglar su lado del servidor. Los registros 1026 realmente no deberían tomar 12 segundos, especialmente para los datos que se recuperan para el cliente. Considere reducir la cantidad de JOIN en su instrucción SQL y agregue los datos en la lógica del lado del servidor en su lugar, e intente ejecutar EXPLAIN en sus consultas y considere que los índices fueron apropiados.
Para responder a su pregunta sobre la división de llamadas AJAX...
Parece que ha implementado la paginación, así que tal vez cree una función recursiva asíncrona que obtenga de 5 a 10 registros a la vez, incrementando el número de página y recurriendo después de cada respuesta de promesa. Puede completar la página y el usuario verá los datos sin esperar tanto. Sin embargo, debe comprender que esto aumentaría el volumen de su servidor y probablemente tarde más en obtener todos los datos. Siento que la forma en que está tratando de lograr este objetivo es una mala práctica.
Tenga en cuenta que llamar simultáneamente a puntos finales desde el lado del cliente (en lugar de una sola llamada) tiene más gastos generales y no es una buena solución. Por ejemplo, su servidor debe manejar más conexiones desde el cliente, su base de datos debe manejar más conexiones desde su ORM en el back-end, su tabla y, en consecuencia, su disco e IO son un desafío, etc.
Por cierto, teniendo en cuenta que todas las partes de su sistema están perfectamente diseñadas, desde el punto de vista de UX y desde el punto de vista técnico, la carga incremental de datos es una buena solución. Quiero decir, cargando los primeros 100 registros, mientras el usuario los usa cargando los segundos 100 registros y agregándolos al final de la lista (o cuando el usuario se desplaza hacia abajo).
Sin embargo, ¡finalmente tienes que considerar la paginación! ¡No puede cargar 1 millón de registros en su página web! Y nadie verifica y usa todos los registros en la página web. Por lo tanto, tenía que limitar la cantidad de registros obtenidos y usar la paginación del lado del servidor o proporcionar otro enfoque a los usuarios para enviar su solicitud, y luego procesar la solicitud y crear el informe y escribirlo en un archivo de texto sin procesar o en un Excel. archivo y envíele por correo electrónico el enlace de descarga.
Suponiendo que puede realizar cambios en el lado del servidor,