TypeScript TS服务器性能:10-50MB文件

gmxoilav  于 6个月前  发布在  TypeScript
关注(0)|答案(9)|浏览(84)

microsoft/vscode#63473

TypeScript 版本: 3.3.0-dev.20181128
搜索词:

  • TS 服务器
    仓库

打开用户项目中的一个文件。这些文件非常大,有些有 150 万行

错误

TS 服务器无响应。这里有一个示例日志文件:
tsserver.log
两个观察结果:

  • 我们生成了一个庞大的大纲跨度响应
  • 然后发生了这个错误:
Err 306   [18:52:6.115] Exception on executing command {"seq":12,"type":"request","command":"navtree","arguments":{"file":"/Users/matb/Downloads/www/code/80000.chunk.js"}}:

    No Project.

    Error: No Project.
        at Object.ThrowNoProject (/Users/matb/Downloads/www/node_modules/typescript/lib/tsserver.js:120007:23)
        at IOSession.Session.getFileAndLanguageServiceForSyntacticOperation (/Users/matb/Downloads/www/node_modules/typescript/lib/tsserver.js:125190:42)
        at IOSession.Session.getNavigationTree (/Users/matb/Downloads/www/node_modules/typescript/lib/tsserver.js:125539:31)
        at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/Users/matb/Downloads/www/node_modules/typescript/lib/tsserver.js:124455:61)
        at /Users/matb/Downloads/www/node_modules/typescript/lib/tsserver.js:125847:88
        at IOSession.Session.executeWithRequestId (/Users/matb/Downloads/www/node_modules/typescript/lib/tsserver.js:125838:28)
        at IOSession.Session.executeCommand (/Users/matb/Downloads/www/node_modules/typescript/lib/tsserver.js:125847:33)
        at IOSession.Session.onMessage (/Users/matb/Downloads/www/node_modules/typescript/lib/tsserver.js:125869:35)
        at Interface.<anonymous> (/Users/matb/Downloads/www/node_modules/typescript/lib/tsserver.js:127129:27)
        at emitOne (events.js:116:13)
        at Interface.emit (events.js:211:7)
        at Interface._onLine (readline.js:282:10)
        at Interface._normalWrite (readline.js:424:12)
        at Socket.ondata (readline.js:141:10)
        at emitOne (events.js:116:13)
        at Socket.emit (events.js:211:7)
        at addChunk (_stream_readable.js:263:12)
        at readableAddChunk (_stream_readable.js:250:11)
        at Socket.Readable.push (_stream_readable.js:208:10)
        at Pipe.onread (net.js:594:20)
cwtwac6a

cwtwac6a1#

150万!
我对那些百万行的内容非常好奇

2w3rbyxf

2w3rbyxf2#

我正在调查为什么我们开始在 80000.chunk.js 文件上进行请求,尽管它从未在TS服务器上打开(请注意,似乎在此之前和在另一个文件上发生了停顿)

vhmi4jdf

vhmi4jdf3#

原始文件大小为50.2 MB。这似乎是VS Code的一个错误,导致我们在没有先打开它的情况下就开始请求这个文件。我们与扩展同步的文件大小限制是50MB。尽管如此,我还没有再次触发它
仓库中较小的10-15MB文件可能更有趣。这是日志:
tsserver.log.zip
使用3.3似乎更快,我没有看到任何停滞。长时间运行的请求:

  • 初始打开:8486.1065ms
  • navtree:6603.4369ms
  • completionInfo:1463ms
6rvt4ljy

6rvt4ljy4#

在我们的这边,大文件被分类为超过4mb的任何内容。https://github.com/Microsoft/TypeScript/blob/master/src/server/editorServices.ts#L4

tzxcd3kk

tzxcd3kk5#

这是否意味着我们不应该使用TS服务器同步大于该大小的文件?

jgzswidk

jgzswidk6#

这是否意味着我们不应该将大于TS服务器同步的文件进行同步?
是的。

dldeef67

dldeef677#

我们可以这样做。在服务器端,针对大文件的请求是否应该被视为无操作?现在看起来ts服务器仍然尝试处理它们。

olhwl3o2

olhwl3o28#

@mjbvz 还有什么要做的?
ssm49v7z

ssm49v7z9#

我将在最新的VS Code中再次测试这个。

相关问题