diff --git a/package-lock.json b/package-lock.json
index 86cb094..0bf4b4f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,8 @@
"better-sqlite3": "^7.5.0",
"next": "12.1.2",
"react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react-dom": "^17.0.2",
+ "react-window": "^1.8.7"
},
"devDependencies": {
"eslint": "8.12.0",
@@ -2996,6 +2997,11 @@
"node": ">=10"
}
},
+ "node_modules/memoize-one": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-5.2.1.tgz",
+ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
+ },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
@@ -3561,6 +3567,22 @@
"react-dom": ">=16.6.0"
}
},
+ "node_modules/react-window": {
+ "version": "1.8.7",
+ "resolved": "https://registry.npmmirror.com/react-window/-/react-window-1.8.7.tgz",
+ "integrity": "sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA==",
+ "dependencies": {
+ "@babel/runtime": "^7.0.0",
+ "memoize-one": ">=3.1.1 <6"
+ },
+ "engines": {
+ "node": ">8.0.0"
+ },
+ "peerDependencies": {
+ "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz",
@@ -6445,6 +6467,11 @@
"yallist": "^4.0.0"
}
},
+ "memoize-one": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-5.2.1.tgz",
+ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
+ },
"merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
@@ -6878,6 +6905,15 @@
"prop-types": "^15.6.2"
}
},
+ "react-window": {
+ "version": "1.8.7",
+ "resolved": "https://registry.npmmirror.com/react-window/-/react-window-1.8.7.tgz",
+ "integrity": "sha512-JHEZbPXBpKMmoNO1bNhoXOOLg/ujhL/BU4IqVU9r8eQPcy5KQnGHIHDRkJ0ns9IM5+Aq5LNwt3j8t3tIrePQzA==",
+ "requires": {
+ "@babel/runtime": "^7.0.0",
+ "memoize-one": ">=3.1.1 <6"
+ }
+ },
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz",
diff --git a/package.json b/package.json
index 992ad31..abebb12 100644
--- a/package.json
+++ b/package.json
@@ -16,7 +16,8 @@
"better-sqlite3": "^7.5.0",
"next": "12.1.2",
"react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "react-dom": "^17.0.2",
+ "react-window": "^1.8.7"
},
"devDependencies": {
"eslint": "8.12.0",
diff --git a/pages/time.js b/pages/time.js
index edad8c3..39a2d97 100644
--- a/pages/time.js
+++ b/pages/time.js
@@ -9,15 +9,13 @@ import {
DialogTitle,
DialogContent,
DialogActions,
+ List,
+ ListItem,
+ ListItemText,
Typography,
TextField,
- TableContainer,
- Table,
- TableHead,
- TableRow,
- TableCell,
- TableBody,
} from "@mui/material";
+import { FixedSizeList } from "react-window";
import { useEffect, useState } from "react";
import { useRouter } from "next/router";
import config from "../next.config";
@@ -330,56 +328,46 @@ export default function Time(props) {
服务器负载 (QPS): {stats.apiqps}
-
-
-
-
- 名称
- 时间段
- 操作
-
-
-
- {ranges.map((range) => (
-
- {range.name}
- {range.range}
-
-
- {isAdmin() && (
- <>
-
-
- >
- )}
-
-
- ))}
-
-
-
+
+
+
+ {({ index, style, data }) => {
+ const range = data[index];
+ return (
+
+
+
+ {range.name} {range.range}
+
+
+ );
+ }}
+
+
+