Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持基于require加载解析 #29

Open
luxuia opened this issue Jul 5, 2024 · 2 comments
Open

支持基于require加载解析 #29

luxuia opened this issue Jul 5, 2024 · 2 comments
Labels

Comments

@luxuia
Copy link

luxuia commented Jul 5, 2024

是否考虑加入基于require加载的选择?
现在会把整个项目的lua全解析一遍,对普通项目是ok的. 我们项目lua文件超过4000, 启动插件会有1.5GB左右的内存消耗, 有点太大了.

实际开发过程中, 其实只会关注到当前编辑以及require到的文件作为hint, 其他的文件相对没有用. 我们可以只解析open的及当前文件的require. 这样也不会有递归require的问题.

而且有这个选项后,可以做到任意把其他文件夹包含进工程而不会导致内存爆炸. 比如偶尔需要看下配置表,如果没有预先过滤文件夹名字, 一旦把配置表的文件夹放进工程就会出问题.

如果要做的话,怎么实现比较合适?

@CppCXY
Copy link
Owner

CppCXY commented Jul 5, 2024

是否考虑加入基于require加载的选择? 现在会把整个项目的lua全解析一遍,对普通项目是ok的. 我们项目lua文件超过4000, 启动插件会有1.5GB左右的内存消耗, 有点太大了.

1.5g内存消耗一点也不大, 作为对比, 你可以拿luals加载的内存消耗比较, 如果你项目中存在大量配置表或者非常巨大的文件, 你可以通过,emmyrc.json配置workspace/ignoreDir 排除这些文件.

在我的测试项目中有3.3k文件常驻内存占用只有500mb

实际开发过程中, 其实只会关注到当前编辑以及require到的文件作为hint, 其他的文件相对没有用. 我们可以只解析open的及当前文件的require. 这样也不会有递归require的问题.

这个结论是错误的, 实际项目的开发中人们可以不用require而写其他函数加载文件,另外完全可以用宿主做遍历式加载,方式很多不只限于require.

另外如果存在宿主, 那么宿主导入的函数/变量通常可以通过写annotation文件而获得提示, 而这些文件也是不用require的

而且有这个选项后,可以做到任意把其他文件夹包含进工程而不会导致内存爆炸. 比如偶尔需要看下配置表,如果没有预先过滤文件夹名字, 一旦把配置表的文件夹放进工程就会出问题.

所以实际需要做的是如何放弃不需要分析的文件

@luxuia
Copy link
Author

luxuia commented Jul 5, 2024

内存上消耗更小一点总是好的.

配置workspace/ignoreDir 这个事情, 因为我们项目用lua的地方太多, 目录结构也很零散, 各个开发者自己vscode的workspace的组织方式也不太一样. 逐一去加ignore不是特别能作对, 如果没处理好就会风扇狂转. 最好的情况是用默认的配置打开任意lua项目都不会导致太差的情况.

不用require而写其他函数加载文件

这个不是已经支持了自定义require函数的功能么.

感谢回复

@CppCXY CppCXY added the no plan label Jul 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants