diff --git a/routes/api/base.mjs b/routes/api/base.mjs index 03e69c5..2130a62 100644 --- a/routes/api/base.mjs +++ b/routes/api/base.mjs @@ -1,3 +1,5 @@ +import { filesize } from "filesize"; + export default class BaseSource { // 构造函数,初始化通用配置 constructor() { @@ -26,6 +28,16 @@ export default class BaseSource { } return s; } + + memory() { + const memoryUsage = process.memoryUsage(); + console.log("memory", JSON.stringify({ + rss: filesize(memoryUsage.rss),//RAM 中保存的进程占用的内存部分,包括代码本身、栈、堆。 + heapTotal: filesize(memoryUsage.heapTotal),//堆中总共申请到的内存量。 + heapUsed: filesize(memoryUsage.heapUsed),//堆中目前用到的内存量,判断内存泄漏我们主要以这个字段为准。 + external: filesize(memoryUsage.external),// V8 引擎内部的 C++ 对象占用的内存。 + })); + } // 解析传入的视频网址,获取弹幕请求地址(Promise数组) async resolve(url) { @@ -33,7 +45,7 @@ export default class BaseSource { } // 请求弹幕资源,返回标准化弹幕内容 - async parse(promises) { + async parse(datas) { throw new Error("Method 'parse()' must be implemented."); } @@ -42,7 +54,13 @@ export default class BaseSource { const promises = await this.resolve(url); if (!this.error_msg) { console.log(this.name, "API lens:", promises.length); - this.content = await this.parse(promises); + this.memory(); //显示内存使用量 + // 并发请求弹幕数据,等待所有请求完成。 + let datas = (await Promise.allSettled(promises)) + .filter(x => x.status === "fulfilled") + .map(x => x.value.data); + this.memory(); //显示内存使用量 + this.content = await this.parse(datas); } return { title: this.title, diff --git a/routes/api/gamer.mjs b/routes/api/gamer.mjs index 30bb396..45d4e18 100644 --- a/routes/api/gamer.mjs +++ b/routes/api/gamer.mjs @@ -46,11 +46,7 @@ export default class GamerSource extends BaseSource { }; - async parse(promises) { - //筛选出成功的请求 - let datas = (await Promise.allSettled(promises)) - .filter(x => x.status === "fulfilled") - .map(x => x.value.data); + async parse(datas) { let contents = []; for (let i = 0; i < datas.length; i++) { const data = datas[i].data; diff --git a/routes/api/iqiyi.mjs b/routes/api/iqiyi.mjs index 7754a01..6b6b205 100644 --- a/routes/api/iqiyi.mjs +++ b/routes/api/iqiyi.mjs @@ -1,7 +1,6 @@ import axios from "axios"; import BaseSource from "./base.mjs"; import pako from "pako"; -import memory from "../../utils/memory.js"; export default class IqiyiSource extends BaseSource { constructor() { @@ -91,12 +90,7 @@ export default class IqiyiSource extends BaseSource { } }; - async parse(promises) { - memory(); - let datas = (await Promise.allSettled(promises)) - .filter(x => x.status === "fulfilled") - .map(x => x.value.data); - memory(); + async parse(datas) { let contents = []; for (let i = 0; i < datas.length; i++) { const data = datas[i]; @@ -118,6 +112,5 @@ export default class IqiyiSource extends BaseSource { // m.work(m.example_urls[0]) // .then(() => { // console.log(m.title); -// memory(); // }); // } \ No newline at end of file diff --git a/routes/api/mgtv.mjs b/routes/api/mgtv.mjs index f5ef420..8e78f93 100644 --- a/routes/api/mgtv.mjs +++ b/routes/api/mgtv.mjs @@ -38,11 +38,8 @@ export default class MgtvSource extends BaseSource { return promises; } - async parse(promises) { + async parse(datas) { let contents = []; - const results = await Promise.allSettled(promises); - let datas = results.filter(result => result.status === 'fulfilled') - .map(result => result.value.data); for (const data of datas) { if (data.data.items === null) continue; diff --git a/routes/api/tencentvideo.mjs b/routes/api/tencentvideo.mjs index ba357e6..ccc325c 100644 --- a/routes/api/tencentvideo.mjs +++ b/routes/api/tencentvideo.mjs @@ -48,12 +48,8 @@ export default class TencentvideoSource extends BaseSource { return promises; } - async parse(promises) { + async parse(datas) { let contents = []; - const results = await Promise.allSettled(promises); - let datas = results.filter(result => result.status === 'fulfilled') - .map(result => result.value.data); - for (const data of datas) { for (const item of data.barrage_list) { const content = JSON.parse(JSON.stringify(this.content_template)); diff --git a/routes/api/youku.mjs b/routes/api/youku.mjs index 3c26dde..d77d2c6 100644 --- a/routes/api/youku.mjs +++ b/routes/api/youku.mjs @@ -130,12 +130,8 @@ export default class YoukuSource extends BaseSource { return promises; } - async parse(promises) { + async parse(datas) { let contents = []; - const results = await Promise.allSettled(promises); - let datas = results.filter(result => result.status === 'fulfilled') - .map(result => result.value.data); - for (const res of datas) { const result = JSON.parse(res.data.result); if (result.code === '-1') { diff --git a/routes/danmaku.mjs b/routes/danmaku.mjs index 82cb993..f406737 100644 --- a/routes/danmaku.mjs +++ b/routes/danmaku.mjs @@ -1,10 +1,7 @@ import express from "express"; import axios from "axios"; import { createSourceList } from "./sources.mjs"; -import memory from "../utils/memory.js"; import db from "../utils/db.js"; -import { inflateRawSync } from "zlib"; - const router = express.Router(); const list = createSourceList(); @@ -48,7 +45,7 @@ async function build_response(url, req) { try { ret = await fc.work(url); } catch (e) { - console.log("全局错误捕获,详情查阅数据库" + e.message); + console.log("全局错误捕获,详情查阅数据库", e); let err = JSON.stringify(e, Object.getOwnPropertyNames(e)); db.errorInsert({ ip: req.ip, @@ -64,7 +61,6 @@ async function resolve(req, res) { const url = req.query.url; const download = (req.query.download === "on"); const ret = await build_response(url, req); - memory(); //显示内存使用量 if (ret.msg !== "ok") { res.status(403).send(ret.msg); return; diff --git a/test/App.test.js b/test/App.test.mjs similarity index 100% rename from test/App.test.js rename to test/App.test.mjs diff --git a/utils/memory.js b/utils/memory.js deleted file mode 100644 index 2230991..0000000 --- a/utils/memory.js +++ /dev/null @@ -1,14 +0,0 @@ -const {filesize} = require("filesize"); - -const print = function () { - const memoryUsage = process.memoryUsage(); - - console.log("memory", JSON.stringify({ - rss: filesize(memoryUsage.rss),//RAM 中保存的进程占用的内存部分,包括代码本身、栈、堆。 - heapTotal: filesize(memoryUsage.heapTotal),//堆中总共申请到的内存量。 - heapUsed: filesize(memoryUsage.heapUsed),//堆中目前用到的内存量,判断内存泄漏我们主要以这个字段为准。 - external: filesize(memoryUsage.external),// V8 引擎内部的 C++ 对象占用的内存。 - })); -}; - -module.exports = print;