En mi caso, datos JSON mínimos que estoy usando 90k [...] y actualmente estoy usando el método .filter. Nada está mal funcionando todo perfectamente sin ningún problema, pero solo desde el punto de vista del rendimiento, me pregunto y también necesito sugerencias, de qué manera podemos usar para mejorar la permeabilidad, ¿está de acuerdo o tenemos una mejor manera de mejorar el rendimiento?
Todas las solicitudes provenientes del backend no pueden modificarse ni dividirse.
Para la referencia, agregar datos de 5k que demora alrededor de 1 segundo.
Valoro todos los tiempos del desarrollador, también agregué un fragmento de código.
Agradezco cualquier ayuda y sugerencia.
const load5kData = async () => { let url = 'https://jsonplaceholder.typicode.com/photos'; let obj = await (await fetch(url)).json(); const filteredValue = obj.filter(item => item.albumId == 36); console.log(filteredValue) } load5kData(); <h1>5k data</h1>Parece que la respuesta se devuelve con el albumId ordenado en orden ascendente. Puede hacer uso de eso usando un bucle for tradicional y un cortocircuito una vez que alcance la identificación 37.
En mi opinión, si no tiene problemas de rendimiento con solo usar el método de filtro, le diría que lo deje y no optimice en exceso.
Otra opción es que solo haya 50 elementos con albumId == 36. Podría crear su propia matriz de todos esos objetos en un archivo json. Sin embargo, obviamente pierde la oportunidad de obtener las últimas imágenes si los resultados de la API cambian alguna vez.
filter es realmente su única solución que implicará iterar sobre cada elemento.
Si necesita realizar varias búsquedas con los mismos datos, puede indexar los datos por la clave que usará, por lo que encontrar datos con un ID de albumId específico no requiere filtrado adicional, pero aún requerirá iterar sobre cada elemento cuando se indexe inicialmente.
const indexByAlbumId = data => data.reduce((a, c) => { if (a[c.albumId] === undefined) { a[c.albumId] = [c]; } else { a[c.albumId].push(c); } return a; }, {}); const load5kData = async () => { const url = 'https://jsonplaceholder.typicode.com/photos'; const data = await (await fetch(url)).json(); const indexedData = indexByAlbumId(data); console.log('36', indexedData[36]); console.log('28', indexedData[28]); }; load5kData();Otra optimización es que si los datos están ordenados por el índice que está buscando, puede aprovechar esto haciendo una búsqueda de divide y vencerás donde primero intenta encontrar una entrada donde el valor es lo que necesita, luego desde allí encuentra dónde el fragmento comienza/termina haciendo la misma división y conquista a la izquierda/derecha de ese elemento.
Currently using: obj.filter(item => item.albumId == 36);