JavaScript中从分页API高效获取至多N个元素的最优方案?
如何高效从固定分页大小的API获取至多N个元素?
我需要从一个分页API端点获取最多N个JSON对象元素,但该端点不支持配置每页返回的元素数量。
常规实现方案
let page = 1 let totalAmount = 0 let elements = [] while (totalAmount < N) { const pageElements = apiService.getElements(page) elements.push(...pageElements) totalAmount += pageElements.length page += 1 // 处理N大于API中所有元素总数的情况 } elements = elements.slice(0, N)
常规方案的问题
当N值较大时,最后一步的elements.slice(0, N)会在内存中复制整个数组,导致效率偏低。
我目前的优化方案
我在循环内提前判断是否是最后一次迭代,如果当前页的元素加上已获取总数超过N,就只截取需要的部分再加入数组:
let page = 1 let totalAmount = 0 let elements = [] while (totalAmount < N) { const pageElements = apiService.getElements(page) // 判断是否需要截取当前页的元素 if (totalAmount + pageElements.length > N) { pageElements = pageElements.slice(0, N - totalAmount) } elements.push(...pageElements) totalAmount += pageElements.length page += 1 // 如果当前页返回空,说明已到最后一页,终止循环 if (pageElements.length === 0) { break } }
请问有没有更高效的实现方式?当前方案已经具备一定效率,但我希望找到最优解。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

