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

در ابتدا در 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. منابع