我们真的需要 VSCode watcher 吗?它有什么作用?如何完全阻止这种情况?

Gau*_*bti 5 reactjs file-watcher visual-studio-code chokidar

所以我一直在使用 VSCode,我喜欢它所构建的功能。使用 sublime 我不得不做太多的手动工作。但是 vscode 是 CPU 密集型的,主要是因为文件观察器,我想了解这个文件观察器的作用是什么?在 React 代码中,我们已经有了热重载,我们真的需要这个吗?以及如何一起阻止这一切。

我试图在 vscode 设置 files.watcherExclude 中添加 * 模式来停止 filewatcher 但我不知道它是否真的有效。

sta*_*all 1

FileWatchers在 VS Code 中...监视文件。

FileSystemWatcher接口的 VS Code API 文档指出:

文件系统观察程序通知磁盘上或其他FileSystemProviders.

这应该回答你关于文件观察者做什么的问题。


工作区功能的VS Code API 文档createFileSystemWatcher非常详细:

创建一个文件系统观察程序,根据提供的参数通知文件事件(创建、更改、删​​除)。

默认情况下,将递归监视所有打开的工作区文件夹的文件更改。

这是可以预料的。VS Code 还如何实现资源管理器视图之类的功能?(当添加、删除、重命名、移动文件和目录等时,它会自行更新)

至于使用此 API 来执行诸如提供 Intellisense 之类的操作的扩展,它们如何知道您何时使用它们支持的编程/标记语言创建、编辑或删除了文件,以便将该信息挂接到其余的部分中。他们用来提供 IntelliSense 功能的软件?


你说:

我尝试*在 files.watcherExclude 中添加“”模式来停止 filewatcher,但我不知道它是否真正起作用。

请参阅文档的这一部分createFileSystemWatcher

通过提供具有要监视的路径的RelativePattern,可以添加其他路径以进行文件监视base。如果pattern复杂(例如包含**或路径段),则将以递归方式监视路径,否则将以非递归方式监视路径(即,仅报告对路径第一级的更改)。


VS Code 和使用 VS Code API 的扩展可以files.watcherExclude在他们认为合适的地方覆盖您的设置。来自createFileSystemWatcher文档:

请注意,鉴于默认情况下会递归监视base所有打开的工作区文件夹的文件更改,因此将忽略对打开的工作区内部路径的递归文件监视程序的请求。然而,即使在打开的工作区中,也始终支持非递归文件观察器,因为它们允许绕过排除 ( files.watcherExclude) 的配置设置。如果您需要在通常排除的位置(例如文件夹)进行监视node_modules.git则可以在工作区中使用非递归监视程序来实现此目的。

createFileSystemWatcher文档确实警告用户尽量减少使用:

如果可能,请尽量减少递归监视程序的使用,因为递归文件监视非常消耗资源。
[...]
请注意,根据用户配置,可能会排除来自递归文件观察程序的文件事件。该设置files.watcherExclude有助于减少已知会同时产生许多文件更改的文件夹(例如node_modules文件夹)的文件事件的开销。因此,强烈建议使用简单的模式进行监视,这些模式不需要递归监视程序,其中排除设置将被忽略,并且您可以完全控制事件。

因此,请使用files.watcherExclude您认为适合您的项目的设置,并相信 VS Code 和您的扩展会做正确的事情。如果您确实注意到它们在某些领域存在浪费,这些领域适用于所有 VS Code 用户而不仅仅是您和您的项目,那么您可以向 VS Code 或提供案例和证据的扩展提交问题单。

现在,如果您不仅是扩展或 VS Code 的用户FileSystemWatcher,而且正在开发 VS Code 或这些扩展,则在不再需要时处理它的方法是使用其dispose方法。


额外花絮:如果您想了解有关如何实现文件监视程序的一些信息,请参阅 VS Code wiki 中的此页面:https ://github.com/microsoft/vscode/wiki/File-Watcher-Issues