美文网首页
NeoVim 光标移动卡顿原因分析

NeoVim 光标移动卡顿原因分析

作者: zzdts | 来源:发表于2019-07-15 23:07 被阅读0次

    最近打开一个html文件时JK移动光标直接卡死或者1秒后才有反应处理过程如下。
ENV: macOS Mojave: 10.14.5; NeoVim: v0.3.1 , 使用SpaceVim配置。

  1. 升级NeoVim 和SpaceVim到最新版本,Github上下载最新0.3.8 编译好的macos版本。

  2. VIM 在Normal模式下每次移动光标都会触发自动命令:CursorMoved。通过开启:set verbose=9追踪发现:

Executing CursorMoved Autocommands for "*"
autocommand call s:matchparen.highlight_deferred()
Press ENTER or type command to continue

每次JK移动都会执行一个call s:matchparen.highlight_deferred()函数,搜索确定函数是在vim-matchup 插件中定义的,这个插件主要是语法匹配 并且会高亮匹配符号比如{} [] () 。

  1. 测试语法匹配时间:打开html文件输入 vim命令:
    :syntime on
    移动光标 再输入:
    :syntime off , :syntime report
    查看 report:
  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN
  0.644858   308    254     0.004609    0.002094  javaScriptLineComment \/\/.*
  0.075428   500    418     0.004837    0.000151  htmlTagError       [^>]<
  0.062363   204    0       0.001224    0.000306  htmlCssStyleComment \(<!--\|-->\)
  0.049274   31086  31080   0.000265    0.000002  javaScriptParens   [()]
  0.047984   264    4       0.000533    0.000182  htmlArg            \<\(http-equiv\|href\|title\)=
  0.045648   260    0       0.000664    0.000176  htmlArg            \<\(accept-charset\|label\)\>
  0.044403   200    0       0.000465    0.000222  javaScriptRegexpString [,(=+]\s*/[^/*]
  0.035824   3887   3887    0.000407    0.000009  javaScriptNumber   -\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>
  0.028142   10514  10454   0.002904    0.000003  javaScriptBraces   [{}\[\]]
  0.017400   288    224     0.000470    0.000060  htmlTagName        \<[a-z][-.0-9_a-z]*-[-.0-9_a-z]*\>
  0.016333   288    224     0.000355    0.000057  htmlTagName        [.0-9_a-z]\@<=-[-.0-9_a-z]*\>
  0.007602   310    228     0.000142    0.000025  htmlCssDefinition  style="
  ...
  ...
  1.329802   93025

可以看到 javaScriptLineComment 居然花了640多ms时间,操作完成花费 1.329802 Sec,Why?
文件是html文件 为什么会是javascript sync异常呢?
再去看看html中的js代码,我去 一行代码居然没玩没了了,使用vim命令移动光标到js代码行末,这一行js居然有32001列,也就是32001个字符。

导致Nvim卡顿的原因确认,一行js代码太长导致的,格式化后测试JK移动正常。

Vim debug 还可以使用 profile:

:profile start profile.log
:profile func *
:profile file *
" At this point do slow actions
:profile pause
:noautocmd qall!

相关文章

  • NeoVim 光标移动卡顿原因分析

    最近打开一个html文件时JK移动光标直接卡死或者1秒后才有反应处理过程如下。ENV: macOS Mojave:...

  • Linux云计算学习笔记day08

    vim 一、 光标移动操作 h 光标向左移动 l 光标向右移动 j 光标向下移动 k 光标向上移动 gg 1G光标...

  • Android 卡顿分析

    卡顿原因 造成Android系统卡顿的原因有很多,但是追根究底都会反映在cpu时间上.通过分析内存信息和cpu信息...

  • vim setnu-快捷键

    vimh 光标向左移动 l光标向右移动j 光标向下移动 k光标向上移动gg光标移动到文本行首或1G1...

  • Ui卡顿及内存管理

    UI 卡顿原因分析 1 人为在UI线程中做轻微耗时操作,导致UI线程卡顿。 2 布局Layout 过于复杂,无法在...

  • iOS 底层原理:界面优化

    界面优化无非就是解决卡顿问,优化界面流畅度,以下就通过先分析卡顿的原因,然后再介绍具体的优化方案,来分析如何做界面...

  • iOS 底层原理:界面优化

    界面优化无非就是解决卡顿问,优化界面流畅度,以下就通过先分析卡顿的原因,然后再介绍具体的优化方案,来分析如何做界面...

  • Linux59期day08

    1、vim编辑器的快捷键光标移动操作: l:光标向右移动h:光标向左移动j:光标向下移动k:光标向上移动gg或1G...

  • 应用卡顿优化

    概要 应用运行时的卡顿问题非常影响用户体验,严重降低产品表现力,本文将介绍应用卡顿原因以及分析方法等等。 卡顿问题...

  • 无标题文章

    APP性能优化 UI卡顿优化 View的绘制原理 UI卡顿原理分析 UI卡顿检测分析 BlockCanary原理分...

网友评论

      本文标题:NeoVim 光标移动卡顿原因分析

      本文链接:https://www.haomeiwen.com/subject/yvtakctx.html