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

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

  •  
  •   uni · 2024-02-21 22:25:02 +08:00 · 4702 次点击
    这是一个创建于 365 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    第 1 条附言  ·  2024-02-22 09:49:20 +08:00
    跟 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  
       2024-02-21 23:28:59 +08:00
    为什么要用 vscode 写 Python ?
    Trim21
        2
    Trim21  
       2024-02-21 23:29:38 +08:00 via Android   ❤️ 1
    ruff 不负责分析语法,你换 ruff 肯定没用…
    kneo
        3
    kneo  
       2024-02-22 00:35:52 +08:00 via Android
    不明白为什么要一分钟。正常来说不应该是一秒吗?
    NoOneNoBody
        4
    NoOneNoBody  
       2024-02-22 01:32:52 +08:00
    python 是层层依赖,项目大(主要是依赖多)的话确实分析很耗时
    我项目不大,但依赖很多,也很耗时,就因为这个原因转 sublime+pyright 了
    stimw
        5
    stimw  
       2024-02-22 02:07:01 +08:00 via Android   ❤️ 1
    能发个很慢的样例仓库吗

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

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

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

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

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