【问题标题】:How to instrument TypeScript initialization time in a VSCode extension?如何在 VSCode 扩展中检测 TypeScript 初始化时间?
【发布时间】:2021-08-04 21:47:50
【问题描述】:

我希望在 VSCode 中检测 TypeScript 初始化性能,类似于 the TypeTrack extension mentioned in this blog post。

不幸的是,我很难弄清楚如何订阅我需要执行此检测的事件。

我尝试过的一件事是参考 VSCode 的 TypeScript 语言功能扩展:

vscode.extensions.getExtension('vscode.typescript-language-features');

不幸的是,the API it exposes is very minimal 似乎只有onCompletionAccepted,这对我来说并没有太大帮助。

我已经浏览了VSCode's API events,但它们似乎都不是我想要的。我想these are the events that I need (projectLoadingStart and projectLoadingFinish), which tsserver emits internally,但我不知道怎么听他们的。还有here I can see vscode.typescript-language-features using these events to update its loading indicator。

似乎这可以通过TypeScript Language Service plugin 来完成?或者也许我需要制作自己的 TypeScript 服务客户端?我应该从哪里开始挖掘?

【问题讨论】:

    标签: typescript visual-studio-code vscode-extensions


    【解决方案1】:

    假设您要明确查找 TSServer 启动时间,而不是 general compiler perf which can be traced and measured from the CLI。

    我认为 最简单 路线将编写一个小型跟踪语言服务插件,您可以将其嵌入到使用 typescriptServerPlugins 的 VS Code 扩展中,这意味着它将被注入到 TypeScript 的所有副本中服务器。语言服务插件应该接收与 VS Code 中的主要扩展相同的所有事件 - 这样你就可以衡量他们在那篇文章中提到的方式。

    它也应该是一个普遍有用的工具,所以如果你能从中得到一些用处,你可以考虑对其进行润色并将其公之于众。

    【讨论】:

    • 你碰巧知道如何从 typescriptServerPlugin 内部访问事件,或者给我举个例子?也许是通过info.project.projectService 上的东西?
    • 这是我的 typescriptServerPlugin 的开始:gist.github.com/lencioni/e3258e3188560a88b7fffcc92fbeaf74 我在 tsserverlibrary 中浏览了很多东西,但找不到订阅我需要的事件的地方。那里似乎有一个 Session 类,上面有一些我需要的东西,但我看不到在哪里可以访问 Session 实例或订阅它的事件。有什么指点吗?
    • 好的,我有一些我认为可以在这里工作的东西。主要技巧是使用传递函数覆盖info.project.projectService.eventHandler。谢谢你的帮助! gist.github.com/lencioni/7031bc83a0f998b26d8b1732a17e2b98
    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    相关资源
    最近更新 更多