这是#52602的衍生品,我们将其关闭为仅优化。在未来,我们应该进一步前进,并在加载时填充工作区符号索引。有一种简单的方法可以做到这一点:在过滤之前,我们在类型检查时总是可以访问每个包的完整AST。如果我们当时急切地计算符号表,它应该是免费的。然而,我现在还不想这样做,因为在每一代上继承所有这些符号句柄的成本仍然太高,而且我们保留哪些符号句柄的启发式是“全部”,而不仅仅是那些可以从工作区包可达的。一旦我们对快照数据有更多的控制权,我们就可以重新考虑这种急切的计算。
axr492tv1#
我认为将预先计算的符号信息存储在磁盘上,并从磁盘加载而不是从头开始解析和重建符号信息就足够了。如果这能让Kubernetes的初始符号时间降到1秒以下,就不需要预先构建符号数据。@adonovan:这可能是一个很好的磁盘索引概念验证。
pes8fvy92#
除非有证据表明工作区符号加载时间是个问题,否则我们不要这样做。我还没有听到任何关于工作区符号性能问题的报告。
9q78igpj3#
我一直在关注,希望在这个领域有更多的活动,但没有发布以提高它。就我个人而言,我不使用工作区符号和go,甚至经常不使用当前文件符号,因为加载时间太长,我最终不得不回到标准的查找和导航。我想补充一下这个背景,但如果你不想在这方面投资,我完全理解。
fruv7luv4#
在相对较大的仓库,如Kubernetes中,初始工作区符号加载需要约1秒。您的工作区有多大,以包和/或文件为单位?
kmynzznz5#
不是那么大!可能与我系统上的其他内容有冲突。我可以启用诊断输出吗?这样我可以给出一些更好的数字来验证行为?我会尝试在代码空间+本地进行,以消除我的机器影响并确认。我怀疑(现在没有证据)过去供应商对此也有一定影响,但对这进行一些A/B测试将让我审查这一点。感谢快速跟进@findleyr!
jogvjijk6#
我们刚刚发布了gopls的预发布版本,其中包含了一个用于导出工作区统计信息的命令。如果可能的话,您能否安装这个预发布版本并从打开的工作区目录中运行gopls stats命令?
gopls stats
6条答案
按热度按时间axr492tv1#
我认为将预先计算的符号信息存储在磁盘上,并从磁盘加载而不是从头开始解析和重建符号信息就足够了。如果这能让Kubernetes的初始符号时间降到1秒以下,就不需要预先构建符号数据。
@adonovan:这可能是一个很好的磁盘索引概念验证。
pes8fvy92#
除非有证据表明工作区符号加载时间是个问题,否则我们不要这样做。我还没有听到任何关于工作区符号性能问题的报告。
9q78igpj3#
我一直在关注,希望在这个领域有更多的活动,但没有发布以提高它。就我个人而言,我不使用工作区符号和go,甚至经常不使用当前文件符号,因为加载时间太长,我最终不得不回到标准的查找和导航。
我想补充一下这个背景,但如果你不想在这方面投资,我完全理解。
fruv7luv4#
在相对较大的仓库,如Kubernetes中,初始工作区符号加载需要约1秒。您的工作区有多大,以包和/或文件为单位?
kmynzznz5#
不是那么大!可能与我系统上的其他内容有冲突。我可以启用诊断输出吗?这样我可以给出一些更好的数字来验证行为?我会尝试在代码空间+本地进行,以消除我的机器影响并确认。我怀疑(现在没有证据)过去供应商对此也有一定影响,但对这进行一些A/B测试将让我审查这一点。感谢快速跟进@findleyr!
jogvjijk6#
我们刚刚发布了gopls的预发布版本,其中包含了一个用于导出工作区统计信息的命令。如果可能的话,您能否安装这个预发布版本并从打开的工作区目录中运行
gopls stats
命令?