V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
uni
V2EX  ›  Visual Studio Code

为什么 vscode 对 Python 的语法解析这么慢

  •  
  •   uni · 278 天前 · 4425 次点击
    这是一个创建于 278 天前的主题,其中的信息可能已经有所发展或是发生改变。

    语法解析慢指的是从打开一个 python 项目到 vscode 能够识别出里面的 py 文件里的语法,然后给这个文件着色(比如类着上绿色,关键字着上粉紫色,函数着上黄色,变量着上淡蓝色)的时间很长,我打开一个大型的 py 项目,这个着色时间要花一分钟以上,换用 ruff 也没有太大改善

    对比于我打开一个大型 typescript 项目,这个着色时间一般都不超过十秒,py 和 ts 差异这么大让我很费解

    第 1 条附言  ·  278 天前
    跟 python 相关的插件只有 python ,python-debugger ,pylance ,jupyter ,ruff

    谢谢回复的各位,我仔细思考了一下原因,我觉得主要原因可能是我这个项目是十几个 flask 微服务组成的 vscode 的 workspace ,相当于是十几个项目了。我拿秒表计时了一下,从打开到语法解析完成的时间是 40 秒,之前说一分钟可能是体感慢的原因,有点夸张了。40 秒也是一个挺长的时间,是因为语法解析要把这十几个项目全部过一遍才给语法解析?

    我随便找了个项目,比如说这个: https://github.com/ethereum/web3.py ,我从打开到语法解析完成大概花十秒,这个速度正常吗?
    31 条回复    2024-02-23 10:22:25 +08:00
    Elliota
        1
    Elliota  
       278 天前
    为什么要用 vscode 写 Python ?
    Trim21
        2
    Trim21  
       278 天前 via Android   ❤️ 1
    ruff 不负责分析语法,你换 ruff 肯定没用…
    kneo
        3
    kneo  
       278 天前 via Android
    不明白为什么要一分钟。正常来说不应该是一秒吗?
    NoOneNoBody
        4
    NoOneNoBody  
       278 天前
    python 是层层依赖,项目大(主要是依赖多)的话确实分析很耗时
    我项目不大,但依赖很多,也很耗时,就因为这个原因转 sublime+pyright 了
    stimw
        5
    stimw  
       278 天前 via Android   ❤️ 1
    能发个很慢的样例仓库吗

    话说一楼怎么不能用 vscode 写 Python ,我现在 ts rust go python 都用 vscode...除了 c/c++用 clion 体验好
    GeekGao
        6
    GeekGao  
       278 天前
    没感觉,结合 venv 加载 4w 行代码在 ubuntu 上没啥问题
    wolfan
        7
    wolfan  
       278 天前
    有没有可能是你的插件有问题,或者你的内存不足够用,有些 vscode 的插件吃内存的很,尤其是解析插件。
    0attocs
        8
    0attocs  
       278 天前
    看看 language server 是不是 pylance 。跟 ruff 没关系,ruff 只是一个简单的 linter 。
    jjx
        9
    jjx  
       278 天前
    你一个文件几十万行?

    我 16 万行的项目打开都是 1-2 秒
    bianhui
        10
    bianhui  
       278 天前
    电脑不行,或者乱七八糟插件装多了吧。我是秒识别。是不是你前台开的页签太多了,vscode 只会识别打开的页签
    jstony
        11
    jstony  
       278 天前
    1. 看看你的插件
    2. 看看你的 language server
    3. vs code 本身其实只是一个壳
    Vegetable
        12
    Vegetable  
       278 天前
    vscode 的 python highlight 根本不走 lsp 和任何插件,是 vscode 内置的,如果你这方面有问题,更可能是有某些插件提前卡死了 vscode 。
    不如好好研究一下是什么卡住了,startup performance 看一下什么插件在工作
    Vegetable
        13
    Vegetable  
       278 天前
    vscode 内置了一个扩展二等分功能,Start Extension Bisect ,原理是使用二分法自动禁用扩展,帮助你找到有问题的扩展,你可以先执行一遍这个流程。
    uni
        14
    uni  
    OP
       278 天前
    跟 python 相关的插件只有 python ,python-debugger ,pylance ,jupyter ,ruff

    谢谢楼上的各位,我仔细思考了一下原因,我觉得主要原因可能是我这个项目是十几个 flask 微服务组成的 vscode 的 workspace ,相当于是十几个项目了。我拿秒表计时了一下,从打开到语法解析完成的时间是 40 秒,之前说一分钟可能是体感慢的原因,有点夸张了。40 秒也是一个挺长的时间,是因为语法解析要把这十几个项目全部过一遍才给语法解析?

    我随便找了个项目,比如说这个: https://github.com/ethereum/web3.py ,我从打开到语法解析完成大概花十秒,这个速度正常吗?
    yph007595
        15
    yph007595  
       278 天前
    @uni #14 “从打开到语法解析完成”,是从哪里看的? vscode> file > open folder? 怎么确定是语法解析完?
    yph007595
        16
    yph007595  
       278 天前
    @uni #14 “从打开到语法解析完成”,是从哪里看的? vscode - file - open folder? 怎么确定是语法解析完?
    cc666
        17
    cc666  
       278 天前
    @uni #14 什么是语法解析完? 刚测试第一次打开几乎是瞬间着色,
    uni
        18
    uni  
    OP
       278 天前
    @yph007595 #15 随便打开一个文件,highlight 完成(比如类着上绿色,关键字着上粉紫色,函数着上黄色,变量着上淡蓝色)
    uni
        19
    uni  
    OP
       278 天前
    @cc666 代码文件里面的所有单词都完成着色吗?没有一个单词是白色的哦?
    yph007595
        20
    yph007595  
       278 天前
    @uni #18 那肯定是你 vscode 有问题了,我打开都是一瞬间就着色完成,快到看不到有白色的单词。
    xctcc
        21
    xctcc  
       278 天前
    用 geek uninstaller 卸载重装一下
    Jimmyisme
        22
    Jimmyisme  
       278 天前
    @uni #14 同样是瞬间解析,甚至是 WSL 下的
    supergeek1
        23
    supergeek1  
       278 天前
    我用 vsc 同时开几个几万行的 python 项目也就是几秒加载完,倒是 pycharm 会特别慢,好几分钟那种
    tedding
        24
    tedding  
       278 天前
    你尝试在 github 项目主页 敲一下 " . " 用在线版本的看一下。。。从 clone 开始也就 10 多秒吧
    xarthur
        25
    xarthur  
       278 天前
    如果我没记错的话 VSCode 的语法高亮的功能是由 LSP 提供的( LSP 提供哪些是类、函数、变量之类的信息),所以一旦项目文件多了,就非常受限于 LSP 的性能。
    顺便这里谴责微软不开源 pylance
    xarthur
        26
    xarthur  
       278 天前
    不过我测试了一下 OP 说的项目,应该都是打开即高亮,应该出现这么慢的情况。
    futuretech6
        27
    futuretech6  
       278 天前
    可以试一下 pyright ,pylance 就是基于 pyright 再包一层的
    runstone
        28
    runstone  
       278 天前
    试验了一下,基本秒着色 web3.py 。。。
    talkischeap567
        29
    talkischeap567  
       277 天前
    不懂就问 vscode 写啥快?
    lisongeee
        30
    lisongeee  
       277 天前
    vscode 的语法高亮基于 https://github.com/MagicStack/MagicPython

    貌似是基于特定结构的正则表达式去实现的
    hailaz
        31
    hailaz  
       277 天前
    大家都好像忽略了硬件差距,应该同时观察一下启动时的 CPU 和内存和硬盘的占用情况。
    例如硬盘,固态和机械在小文件读取的差距还是蛮大的,固态和固态之间的差距有时也很大。
    工作空间中的文件越多,对速度的影响也会越大(我写 go 的时候就能明显感觉到)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3415 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 12:01 · PVG 20:01 · LAX 04:01 · JFK 07:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.