برنامه نویسی

چگونه زمان بار پوسته خود را با بار تنبل بهبود بخشیدم

در ابتدا در https://www.ankitbabber.com منتشر شده است

اگر از چندین ابزار ، زبان ، ساخت محیط و غیره استفاده کرده اید. یک روش ساده برای تعیین اینکه CLI کمترین اندازه است ، اندازه گیری زمان راه اندازی است. پس از شناسایی کمترین ابزار CLI با یک پروفایل ، بارگیری تنبل آن ابزار به محیط ساده ترین روش برای تلاش برای بهبود زمان بار برای یک محیط پوسته است. من نمونه ای خاص برای بارگذاری تنبل را ارائه می دهم zsh، اما ایده کلی می تواند در محیط های دیگر اعمال شود.

0. تشخیص مشکل

time zsh -i -c exit
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • وقتی پوسته من احساس کمی لاغر شدن می کند ، من استفاده می کنم time برای به دست آوردن یک اندازه گیری دقیق از آنچه احساس می کنم.
  • در unix سیستم هایی با پوسته ، احتمالاً نسخه ای از آن را خواهید داشت time ابزار برای به دست آوردن اطلاعات خاص برای پوسته خاص خود ، توصیه می کنم خواندن man timeبشر این ابزار برای اندازه گیری زمان اجرای برنامه CLI مفید است.
  • در مثال ما ، ما به سادگی در حال گذر هستیم zsh به time برای دیدن اینکه چه مدت طول می کشد تا شروع و متوقف شود.
  • در -i نیروهای پرچم zsh در حالت تعاملی باشد.
  • در -c پرچم هر دستورات را به zsh در حالت تعاملی. به یاد داشته باشید که از ابزارها یا ابزارهای بومی در خود استفاده کنید PATHبشر
  • خروجی:
Saving session...completed.
zsh -i -c exit  0.66s user 0.72s system 89% cpu 1.543 total
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • در ابتدا نتایج خیلی بد به نظر نمی رسد ، اما می توانیم نگاهی دانه ای تر به آنچه بارگذاری می شود داشته باشیم.
  • در شما .zshrc موارد زیر را اضافه کنید:
# beginning of .zshrc
zmodload zsh/zprof

# contents of .zshrc must be in between

# end of .zshrc
zprof
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • zmodload ساخته شده در zsh در صورت اضافه شدن به ماژول های راه اندازی .zshrc همانطور که در بالا

  • ماژول ZSH/ZPROF هر آنچه را که در ابتدا بارگذاری می شود ، پروفایل می کند zshبشر
  • در راه اندازی ، zsh چیزی شبیه به خروجی زیر را خروجی می کند. پس از مشخص شدن منبع زمان بار آهسته ، من معمولاً اظهار نظر می کنم zmodload zsh/zprof وت zprof در من .zshrc برای استفاده در آینده
  • خروجی:
num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    1         835.86   835.86   80.69%    309.23   309.23   29.85%  nvm_auto
 2)    2         480.08   240.04   46.35%    278.23   139.12   26.86%  nvm
 3)    1         170.17   170.17   16.43%    145.25   145.25   14.02%  nvm_ensure_version_installed
 4)   26         104.45     4.02   10.08%     78.22     3.01    7.55%  _omz_source
 5)    4          58.36    14.59    5.63%     58.36    14.59    5.63%  compaudit
 6)    1          31.50    31.50    3.04%     31.29    31.29    3.02%  nvm_die_on_prefix
 7)    2          87.03    43.51    8.40%     28.66    14.33    2.77%  compinit
 8)    1          46.55    46.55    4.49%     25.39    25.39    2.45%  nvm_is_valid_version
 9)    1          24.92    24.92    2.41%     24.92    24.92    2.41%  nvm_is_version_installed
10)    1          15.93    15.93    1.54%     11.14    11.14    1.08%  nvm_validate_implicit_alias
11)    1          10.13    10.13    0.98%      9.98     9.98    0.96%  _zsh_highlight_load_highlighters
12)    1           7.96     7.96    0.77%      7.96     7.96    0.77%  zrecompile
13)    1           5.81     5.81    0.56%      5.81     5.81    0.56%  test-ls-args
14)    1           5.23     5.23    0.51%      5.23     5.23    0.51%  nvm_version_greater_than_or_equal_to
15)    1           4.72     4.72    0.46%      4.72     4.72    0.46%  nvm_echo
16)    1           2.12     2.12    0.21%      2.10     2.10    0.20%  _zsh_highlight__function_callable_p
17)    1           1.67     1.67    0.16%      1.67     1.67    0.16%  regexp-replace
18)    3           1.48     0.49    0.14%      1.40     0.47    0.14%  add-zle-hook-widget
19)    9           1.37     0.15    0.13%      1.37     0.15    0.13%  is-at-least
20)   13           1.35     0.10    0.13%      1.35     0.10    0.13%  compdef
21)    1           1.16     1.16    0.11%      1.16     1.16    0.11%  colors
22)    7           0.92     0.13    0.09%      0.92     0.13    0.09%  add-zsh-hook
23)    1           0.27     0.27    0.03%      0.27     0.27    0.03%  (anon) [/Users/ankit/.oh-my-zsh/custom/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh:458]
24)    4           0.21     0.05    0.02%      0.21     0.05    0.02%  nvm_npmrc_bad_news_bears
25)    6           0.18     0.03    0.02%      0.18     0.03    0.02%  is_plugin
26)    1           0.17     0.17    0.02%      0.17     0.17    0.02%  nvm_has
27)    1           0.13     0.13    0.01%      0.13     0.13    0.01%  zvm_exist_command
28)    1           0.22     0.22    0.02%      0.10     0.10    0.01%  complete
29)    3           0.09     0.03    0.01%      0.09     0.03    0.01%  is_theme
30)    1           0.08     0.08    0.01%      0.08     0.08    0.01%  (anon) [/usr/local/Cellar/zsh/5.9/share/zsh/functions/add-zle-hook-widget:28]
31)    2           0.07     0.04    0.01%      0.07     0.04    0.01%  env_default
32)    1           4.79     4.79    0.46%      0.07     0.07    0.01%  nvm_err
33)    2           0.07     0.03    0.01%      0.07     0.03    0.01%  bashcompinit
34)    1         835.90   835.90   80.69%      0.04     0.04    0.00%  nvm_process_parameters
35)    1           0.02     0.02    0.00%      0.02     0.02    0.00%  _zsh_highlight__is_function_p
36)    1           0.01     0.01    0.00%      0.01     0.01    0.00%  nvm_is_zsh
37)    1           0.00     0.00    0.00%      0.00     0.00    0.00%  _zsh_highlight_bind_widgets
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • به عنوان یک یادآوری ، هر زمان .zshrc تغییر کرده است صرفه جویی در سپس بارگیری مجدد آن اطمینان حاصل می کند که همه تغییرات منعکس می شوند. بارگیری مجدد با source .PATH/TO/.zshrcبشر

1. بار تنبل

  • از خروجی zmodload zsh/zprof، به نظر می رسد nvm دلیل احتمالی زمان شروع کار من است. اگر تنبلی چیزهای درست را بارگذاری کنم ، می توانم خودم را بهبود ببخشم zsh زمان راه اندازی
  • بارگیری تنبل به محیط شما بستگی دارد. اگر پیکربندی محلی شما کمی متفاوت است ، سپس تمرکز روی جایی که ابزارهای شما از آن بارگیری می شوند ، یک نقطه شروع معقول است. تأخیر در بار کمترین ابزار هدف است.
  • به بار تنبل nvm، توابع بسته بندی را در اطراف اضافه کردم nvmبا nodeبا npmوت npx نام های متغیر برای تغییر دامنه مربوطه (نام متغیر اضافه بار). zsh عملکرد را قبل از چیزی که در پایین باشد مشاهده خواهد کرد PATH زنجیر کی nvmبا nodeبا npm، یا npx پس از آن صریحاً خوانده می شود zsh منابع را در جلسه فعلی بارگذاری می کند.
  • برای من ، اضافه کردن توابع زیر به من .zshrc من را ثابت کرد zsh زمان بارگذاری
# lazy lode nvm instead of through oh-my-zsh to reduce load by 50%
lazy-nvm()
{
  unset -f nvm node npm npx
  export NVM_DIR="$HOME/.nvm"
  [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
  [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
}

nvm()
{
  lazy-nvm
  nvm $@
}

node()
{
  lazy-nvm
  node $@
}

npm()
{
  lazy-nvm
  npm $@
}

npx()
{
  lazy-nvm
  npx $@
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

2. تأیید

time zsh -i -c exit
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • بعد از بارگذاری تنبل nvm، من zsh زمان راه اندازی به نصف کاهش یافت.
Saving session...completed.
zsh -i -c exit  0.32s user 0.31s system 92% cpu 0.673 total
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • اضافه کردن خطوط زیر به .zshrc دوباره تأیید خواهد کرد nvm در ابتدا بارگیری نمی شود:
# beginning of .zshrc
zmodload zsh/zprof

# contents of .zshrc must be in between

# end of .zshrc
zprof
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)   26         109.34     4.21   71.45%     82.96     3.19   54.22%  _omz_source
 2)    2          29.39    14.70   19.21%     29.39    14.70   19.21%  compaudit
 3)    1          10.67    10.67    6.97%     10.51    10.51    6.87%  _zsh_highlight_load_highlighters
 4)    1          36.67    36.67   23.96%      7.27     7.27    4.75%  compinit
 5)    1           6.67     6.67    4.36%      6.67     6.67    4.36%  zrecompile
 6)    1           5.15     5.15    3.36%      5.15     5.15    3.36%  test-ls-args
 7)    1           2.21     2.21    1.45%      2.19     2.19    1.43%  _zsh_highlight__function_callable_p
 8)    3           1.74     0.58    1.14%      1.63     0.54    1.07%  add-zle-hook-widget
 9)    9           1.56     0.17    1.02%      1.56     0.17    1.02%  is-at-least
10)   12           1.50     0.12    0.98%      1.50     0.12    0.98%  compdef
11)    1           1.20     1.20    0.78%      1.20     1.20    0.78%  colors
12)    7           1.07     0.15    0.70%      1.07     0.15    0.70%  add-zsh-hook
13)    1           0.88     0.88    0.57%      0.88     0.88    0.57%  regexp-replace
14)    1           0.26     0.26    0.17%      0.26     0.26    0.17%  (anon) [/Users/ankit/.oh-my-zsh/custom/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh:458]
15)    6           0.26     0.04    0.17%      0.26     0.04    0.17%  is_plugin
16)    1           0.19     0.19    0.13%      0.19     0.19    0.13%  zvm_exist_command
17)    1           0.11     0.11    0.07%      0.11     0.11    0.07%  (anon) [/usr/local/Cellar/zsh/5.9/share/zsh/functions/add-zle-hook-widget:28]
18)    3           0.09     0.03    0.06%      0.09     0.03    0.06%  is_theme
19)    2           0.08     0.04    0.05%      0.08     0.04    0.05%  env_default
20)    1           0.02     0.02    0.02%      0.02     0.02    0.02%  bashcompinit
21)    1           0.02     0.02    0.01%      0.02     0.02    0.01%  _zsh_highlight__is_function_p
22)    1           0.00     0.00    0.00%      0.00     0.00    0.00%  _zsh_highlight_bind_widgets
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • به عنوان یک یادآوری ، هر زمان .zshrc تغییر کرده است صرفه جویی در سپس بارگیری مجدد آن اطمینان حاصل می کند که همه تغییرات منعکس می شوند. بارگیری مجدد با source .PATH/TO/.zshrcبشر

  • بنابراین اگر دستور زیر را اجرا کنیم:

time zsh -i -c exit && time zsh -i -c "nvm --version" exit
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • خروجی زمان افزایش بار را با آن نشان می دهد nvmبشر
Saving session...completed.
zsh -i -c exit  0.32s user 0.30s system 92% cpu 0.670 total
Restored session: Mon Feb 17 21:34:18 CST 2025
0.40.1

Saving session...completed.
zsh -i -c "nvm --version" exit  0.73s user 0.90s system 99% cpu 1.641 total
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • bash یا zsh دستورات چپ به راست را می خواند
  • time zsh -i -c exit قبل از آن کامل خواهد شد time zsh -i -c "nvm --version" exitبشر
time zsh -i -c "nvm --version" exit time zsh -i -c exit
کاربر 0.73s 0.32s
سیستم 0.90s 0.30s
مجموع 1.641 0.670

3. منابع

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا