我正在创建一个REST API,该API可从互联网获取原始数据,然后对其应用REGEX并以JSON格式返回。
这是我用于将数据作为JSON获取的功能。
首先,我使用了get()来获取原始数据,然后我将ANIME_LIST_REGEX.exec()应用于使用正则表达式进行过滤以使其成为JSON格式。
async function getAnimeList(url) {
const {body} = await got(url);
let ANIME_LIST_DATA = ANIME_LIST_REGEX.exec(body)
if (!ANIME_LIST_DATA) {
return null;
}
return {
animeList: ANIME_LIST_DATA[1]
};
}
在这个端点中,我要从第一个函数中检索数据并解析JSON,并将其作为响应返回。
app.get('/anime-list', async (req, res, next) => {
const appData = await getAnimeList(URL_BASE_ANIME_LIST);
var listJson = JSON5.parse(appData.animeList)
res.json(listJson)
})
问题是返回的数组很大(js对象有5000个条目),请求需要很长时间才能返回并显示该数组
我想做的是每次调用函数或到达端点时都返回该数组的块。
尝试了几种方法,但没有一种方法有意义。
有人知道吗?
答案 0 :(得分:0)
您可以使用Array.prototype.splice()将大数组拆分为小块。要确定块的范围,可以将查询传递给端点。
app.get("/anime-list", async (req, res, next) => {
const appData = await getAnimeList(URL_BASE_ANIME_LIST)
var listJson = JSON5.parse(appData.animeList)
const from = req.query.from || 0
const count = req.query.count || 100
res.json(listJson.splice(from, count))
})
但是,正如其他人提到的那样,每个请求调用getAnimeList()
会导致另一个性能问题。我强烈建议您重构该函数以缓存结果。