【发布时间】:2019-01-04 13:26:07
【问题描述】:
我为 VS 代码编写了一个语言服务器扩展。为了提高启动时间,我想缓存一些全局状态。我正在努力寻找一个安全、用户透明的位置。
- 缓存在所有工作区之间共享
- 它包含 200-300MB 的序列化数据
- 它应该在扩展更新之间持续存在
- 扩展是跨平台的
我发现了以下四个选项,但似乎都不合适:
-
ExtensionContext.extensionPath:这几乎是完美的。对用户来说,安全的沙盒空间是显而易见的。但是,它会在扩展程序更新时被清除。 -
ExtensionContext.storagePath:这不是全局的,用户很难清除,因此很快就会使用 GB 的存储空间。 -
ExtensionContext.globalState:将 300MB 的二进制数据放入 JSON 字典存储似乎很糟糕。 -
%UserData%/linux/OSX 等效项:在不受控制的一般用户空间中添加和删除文件是我宁愿避免的风险。
存储这些数据的合适位置在哪里?
【问题讨论】:
-
你最后选择了什么?
-
我问的原因是我喜欢globalStoragePath,它非常有用,但是对于扩展贡献点内部的路径很难使用。 (即 package.json 中的 html.experiment.customData = './mystuff'。我无法将 $globalStoragePath/mystuff 放入我的扩展的 package.json 中,然后在使用时扩展。)跨度>
-
@bkelley 我仍在使用 storagePath,但 globalStoragePath 符合我的要求。事实上,当我创建这个问题时,他们已经创建了它,但它仍然处于“建议”状态。你需要它来做什么贡献?我强烈建议您在 github 上创建一个问题来询问该功能,也许参考 #66030。
标签: visual-studio-code vscode-extensions