首页 > 解决方案 > 有没有办法阻止 Firebase 实时数据库下载 JSON 项目名称?

问题描述

基本上我有一个显示前 50 名玩家得分的排行榜。按照 Firebase 的最佳实践指南,我整理了数据并将排行榜得分与玩家数据分开存储。但是数据下载量比我预期的要高(50 分 3.62kb)。以下是这些分数条目之一的示例。

    "wgstgJIaVcbdOFvTLIk0VyhO77" : {
      "display_name" : "FakeName7",
      "high_score" : 4
    },

我认为数据使用来自用户 id (wgstgJIaVcbdOFvTLIk0VyhO77) 这实际上不需要下载,但我需要保留它,因为我在我的安全规则中使用它来允许你只更新你的分数。也显示名称不是唯一的,所以我不能用它作为键。

我知道使用较短的键名(display_name -> n)也会有所帮助。

  Path         │ Total   │ Count │ Average │
├──────────────┼─────────┼───────┼─────────┤
│ /leaderboard │ 3.62 kB │ 1     │ 3.62 kB

如果有人有更好的方法来构建这种类型的数据,我会全力以赴。

标签: jsondatabasefirebase-realtime-database

解决方案


Firebase 的 API 响应采用 JSON 格式(正如您最初的问题明确指出的那样),提供键和值是 JSON 规范的一部分。理论上,有一种 BJSON 格式(二进制 JSON),它可以在传输和存储中节省大量空间,但您无法控制 Firebase 的 API 使用什么格式。

  • 您唯一的选择是缩短键名,但我强烈 建议您在尝试缩短某些属性值时要小心,例如,用户 ID 值(例如尝试实现整数 ID 等),因为这可能有安全影响。
  • 要考虑的另一件事 - 如果您的数据值中碰巧有 UTF-8 代码点(非拉丁字符),它们将被编码为 JSON,并且它们的编码表示将占用更多空间。
  • 如果您需要更“紧凑”的 API 响应,您应该考虑使用 RESTful API 实现不同的后端。请记住,Firebase 有很多限制。容易上手,很难实现更复杂的数据检索逻辑。

最后但并非最不重要的一点 - 50 分的 3.62kb 即使在连接速度较慢的情况下也相当不错。问问自己是否值得花太多时间进行微优化。


推荐阅读