You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需数据库时JavaScript存储处理飞行规划应用数据的最佳方案是什么

推荐方案:静态JSON分片+按需懒加载+键值对索引

你之前的两个实现思路都有明显缺陷:全量数组预加载会占用不必要的内存,查询效率也低;switch硬编码的维护成本极高,新增数据必须修改业务代码,完全不支持后续迭代。下述方案完全符合你轻量化、纯本地、易维护的需求:

核心实现逻辑

  • 把不同类型的数据拆分存为独立的JSON静态文件,比如airports.json(存机场数据)、waypoints.json(存航点数据)、aircraft.json(存机型数据)。如果单类数据量特别大,还可以按区域/编码首字母进一步拆分,比如airports-cn.json、airports-us.json,进一步降低加载成本
  • 所有JSON文件的顶层结构直接用键值对对象,key设置为你要用的唯一编码(比如ICAO机场码、航点ID、机型注册号),value是对应的数据对象,示例结构如下:
// airports.json 示例
{
  "ZBAA": {
    "name": "北京首都国际机场",
    "lat": 40.0799,
    "lon": 116.5891,
    "elevation": 35
  },
  "ZSPD": {
    "name": "上海浦东国际机场",
    "lat": 31.1433,
    "lon": 121.8058,
    "elevation": 4
  }
}
  • 写一个极简的按需加载工具函数,用户选中对应类别的数据时再异步拉取对应JSON文件,拉取一次后缓存到内存中,无需重复请求,示例代码如下:
// 全局缓存已加载的数据集
const dataCache = {};

async function getTargetData(dataType, targetId) {
  // 该类数据未加载过则先拉取静态文件
  if (!dataCache[dataType]) {
    const response = await fetch(`./data/${dataType}.json`);
    dataCache[dataType] = await response.json();
  }
  // 直接按ID查询,O(1)复杂度,效率远高于数组遍历
  return dataCache[dataType][targetId];
}

// 调用示例:获取ZBAA的机场数据
const beijingAirport = await getTargetData('airports', 'ZBAA');

方案优势

  • 完全轻量化,不需要数据库、不需要后端服务,纯静态文件即可运行,符合你纯前端实现的需求
  • 内存占用极低:未被用户触发的数据完全不会加载到内存中,就算加载全量常用目视飞行机场/航点数据,总大小也仅为几百KB,完全不存在内存浪费问题
  • 维护更新简单:修改/新增数据仅需调整对应JSON文件,不需要触碰业务代码,远比重构switch语句灵活
  • 查询效率高:键值对索引的查询复杂度为O(1),远高于数组遍历的效率

可选优化

如果数据量超过一万条,可以进一步拆分JSON分片,比如按ICAO码首字母拆分机场数据,查询Z开头的机场才拉取airports-z.json,进一步降低内存占用;也可以搭配localStorage做数据缓存,存储数据版本号,每次启动先校验版本,一致就直接用本地缓存数据,不一致再拉取新文件,兼顾加载速度和数据更新能力。

内容的提问来源于stack exchange,提问作者Leonardo Paschoal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:33:04