Skip to content

Repository files navigation

基金净值实时估算(Node.js 高性能版)

这是基金实时估算项目的 Node.js 高性能版本。服务端采用 Fastify + TypeScript,前端采用 React + Vite;已有的 data/users.json、关注基金和持仓金额数据可以直接继续使用。

性能设计

  • 浏览器通过聚合 API 获取首屏数据,页面状态和服务端计算彼此独立。
  • 服务端对基金持仓缓存 30 分钟、净值缓存 5 分钟、实时行情缓存 3 秒。
  • 相同缓存键的并发请求自动合并,避免缓存击穿。
  • 外部行情最多 4 路并发,股票代码按每批 80 个拆分。
  • 腾讯行情失败后只对缺失代码请求新浪,不把接口失败伪装成 0% 涨跌。
  • 生产前端使用 gzip 压缩和静态资源哈希,可由 Nginx/CDN 长期缓存。
  • Node 服务端编译为原生 JavaScript,生产环境无需 tsx 或 TypeScript 运行时。

本地开发

需要 Node.js 22 或更新版本。

npm install
npm run dev

访问 http://localhost:3000

测试与构建

npm test
npm run build

生产启动必须配置强随机会话密钥:

export SESSION_SECRET="$(openssl rand -hex 32)"
export PORT=3000
npm start

不要把 SESSION_SECRET 写进仓库或提交到 Git。

不支持配置进程环境变量的面板可以在项目根目录创建权限为 600.env 文件;npm start 会自动读取它:

SESSION_SECRET=使用 openssl rand -hex 32 生成的随机值
HOST=127.0.0.1
PORT=3000

账号、收藏和持仓文件包含私有数据,已由 .gitignore 排除。首次部署请挂载持久化目录;服务会在用户注册或修改数据时自动创建所需文件。

数据兼容

服务直接读取以下持久化数据(全部位于 data/ 目录):

  • data/users.json:使用 PBKDF2-SHA256、120000 次迭代的密码哈希。
  • data/users/<账号>/favorite_funds.json
  • data/users/<账号>/invest_cache.json
  • data/fund_codes_cache.json

基金代码缓存来自天天基金的全量基金注册表,可能随时间过期,可随时手动刷新:

npm run refresh:codes

Docker 部署

为避免镜像构建时覆盖服务器上的用户数据,正式部署建议把数据目录和用户文件挂载到持久卷:

docker build -t fund-node .
docker run -d \
  --name fund-node \
  --restart unless-stopped \
  -p 127.0.0.1:3000:3000 \
  -e SESSION_SECRET="你的随机密钥" \
  -v "$PWD/data:/app/data" \
  fund-node

首次部署前请先创建挂载目标,避免 Docker 把不存在的文件路径创建成目录:

mkdir -p data/users
test -f data/users.json || printf '{}\n' > data/users.json

Nginx 反向代理

服务使用普通 HTTP 反向代理:

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_connect_timeout 3s;
    proxy_read_timeout 15s;
}

HTTPS、限流和访问日志建议继续由 Nginx 或 CDN 负责。

项目结构

src/
  client/             React 页面、组件和样式
  server/             Fastify、认证、缓存、行情和数据存储
  shared/             前后端共享类型
dist/                 生产构建输出
docs/design/          设计稿与最终视觉验收截图

页面展示的实时估算仅供参考,不构成投资建议。第三方行情接口可能延迟、限流或变更。

About

基于 Fastify、TypeScript、React 和 Vite 的高性能基金净值实时估算工具,支持持仓穿透、实时行情、缓存合并与 Docker 部署。

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages