- Oh My Zsh(OMZ) hâlâ yaygın biçimde öneriliyor, ancak kabuğun açılış süresini yavaşlatan gereksiz script yüküne neden oluyor
- OMZ shell script olarak yazıldığı için her yeni terminal sekmesi açıldığında tüm scriptlerin yeniden yorumlanması gerekiyor ve varsayılan yapılandırmada bile yaklaşık 0,38 saniyelik gecikme oluşuyor
- Basit bir minimal Zsh yapılandırması ile Starship promptu ve fzf tabanlı geçmiş araması kullanıldığında açılış süresi 0,07 saniyeye düşürülebiliyor
- Starship, promptu tek bir binary ile oluşturarak OMZ'nin mevcut git·sanal ortam·dil bazlı eklentilerinin yerini alıyor
- Karmaşık eklentiler yerine yalnızca gereken işlevleri doğrudan ekleyen hafifletilmiş shell yapılandırması daha verimli
Oh My Zsh'nin performans sorunu
- Oh My Zsh(OMZ) hâlâ yaygın kullanılıyor, ancak gereksiz yük (bloat) nedeniyle shell açılış hızını düşürüyor
- OMZ shell scriptlerden oluştuğu için her yeni terminal sekmesi açıldığında tüm scriptlerin yorumlanması gerekiyor
- Varsayılan eklentiler (git, zsh-autosuggestions, zsh-autocomplete) içeren yapılandırmada
/usr/bin/time -f "%e seconds" zsh -i -c exit çalıştırıldığında sonuç 0,38 saniye
- Git deposu klasöründe yeni sekme açıldığında hissedilen gecikme yaklaşık 1 saniye olabiliyor
- OMZ düzenli aralıklarla güncelleme kontrolü yapıyor ve bu süreç birkaç saniyelik ek gecikmeye yol açabiliyor
- Shell yapılandırmasının sık güncellenmesi gereksiz; bunun yerine yalnızca gerekli işlevleri elle ekleyen sade bir yapı öneriliyor
Minimal Zsh yapılandırması
Prompt özelleştirme
Geçmiş araması
- Yaygın kullanılan
zsh-autosuggestions eklentisi yazarken öneri gösterdiği için dikkati dağıtabiliyor
- Bunun yerine fzf,
Ctrl+R tuşuna bağlanarak geçmişte etkileşimli fuzzy search yapılmasını sağlıyor
source <(fzf --zsh)
Performans iyileştirme sonucu
Ek ipuçları
Sonuç ve kullanım örnekleri
- OMZ'den geçiş yaptıktan sonra yalnızca birkaç gün içinde yeni iş akışına uyum sağlanmış
- Gereken eklentiler elle yüklenebiliyor
- Çok sayıda sekme açılmasının nedeni tmux ile terminal tabanlı düzenleyicinin (helix) birlikte kullanılması
- tmux içinde
lazygit ve yazi dosya yöneticisi açılır pencere biçiminde çalıştırılıyor
- Kod çalıştırma ve test çıktıları için geçici bölme pencereleri kullanılıyor; bunların her biri ayrı bir shell oturumu olarak çalışıyor
Yorum özeti
- Bazı kullanıcılar OMZ'nin açılış süresinin 0,03 saniye civarında olup yeterince hızlı olduğunu savunuyor
- Yazar, zsh-autocomplete eklentisinin hızı düşürdüğünü belirtiyor
zsh-bench sonuçlarında OMZ için ilk prompt gecikmesi 603 ms, sade Zsh yapılandırması içinse 103 ms ölçülmüş
- Starship, OMZ'nin promptla ilgili işlevlerini tek bir araçla değiştiriyor
- Diğer kullanıcılar Zimfw, Atuin ve elle yazılmış bash promptları gibi alternatiflerden söz ediyor
10 yorum
Optimizasyon yapmazsanız gerçekten yavaş oluyor. Ama alıştığım çok fazla özelliği var, o yüzden bırakıp gitmek biraz,, kolay değil.
Henüz o kadar fark edilir derecede rahatsız edici gelmiyordu.
Bu bir web sunucusu da değil; rahatsızlık verecek kadar değilse çok da dert etmiyorum..
Geliştiriciler işte, gereksiz birkaç ms için ortalığı ayağa kaldırıyorlar lol
Birkaç gereksiz ms yüzünden teknoloji ilerlemiyor muydu zaten?
Terminali sık kullanıyorsanız, omz'nin eklediği gecikme oldukça can sıkıcıdır.
Ben de başlangıçta omz ile başladım; bunun katlanılması gereken bir rahatsızlık olduğunu sanıyordum T_T
Son zamanlarda eklentileri tek tek kaldırdım ve güncelleme politikasını da değiştirdim ama.. bunu görünce onsuz da olurmuş diye düşündüm.
Benim için, tmuxinator ile ayarları yüklerken omz update y/n çıkması pek hoş olmuyor.
Birkaç ay önce prezto’ya geçmiştim; o zaman da omz bu kadar yavaş mıydı diye düşünmüştüm.
Sadece birkaç temel eklenti bile hissedilir şekilde yavaşlatıyor...
Ben
starship'e geçtim.Hacker News yorumları
Benim oh-my-zsh kullanmak için tek bir nedenim var
yeni bir makinede, uzak bir hostta ya da container içinde nerede olursam olayım hemen kullanabileceğim anında üretken bir shell ortamı elde etmek
ayarlarla saatler harcamak yerine o zamanı daha önemli işlere ayırmak istiyorum
“kur ve kullan” deneyimi aynı kalıyor ama 200 ms’den fazla prompt gecikmesi olmuyor
tek satırlık
curlile kuruluyor ve yapılandırması da basitdenersen pişman olmayacağını düşünüyorum
Yapılandırma dosyalarını bir kez oluşturup git ile yönetirsen, diğer makinelerde de aynısını kullanabilirsin
Ben de yeni bir makine kurarken sadece dotfiles’ımı getiriyorum ve alışık olduğum ortam hemen hazır oluyor
Şaka bir yana, varsayılan shell’i kurmaktan ziyade
.bashrckopyalamak çok daha kolayHer sekme açışımda beklemek sinir bozucuydu
Sonunda Homebrew ile ihtiyacım olan birkaç eklentiyi kendim kurdum, bir saat bile sürmedi
Şimdi hızlı ve hafif bir shell ile çok daha üretkenim ve keyfim yerinde
Shell açılış hızı çok yüksek ve kurulumu da zahmetsiz
Bu yüzden ben fish’e geçtim
Tam olarak zevkime göre değil ama varsayılan ayarları yeterince iyi, ben de alıştım gitti
Artık shell yapılandırmasıyla neredeyse hiç uğraşmıyorum
Yine de yeni başlayanlara tuş kısayollarını mutlaka okumalarını tavsiye ederim
Ekipte bir arkadaşım tab tamamlama ya da shift+arrow gibi özellikleri bilmediği için yavaşlamıştı
Ben bazen sadece vim bağları ya da fuzzy find eklentisi ekliyorum
Sadece temel fish bile fazlasıyla iyi
Zsh’te Vim modu açmayı öneren görüşe katılmıyorum
Varsayılan readline tek bir komut için zaten yeterince iyi
Uzun komutları da
C-x C-eile düzenleyebilirsinBirlikte pair programming yaparken Vim moduna geçişler yüzünden aksine daha yavaş görünüyor
C-x C-ekısayolunun gerçekten çok faydalı olduğunu yeni öğrendimÇoğu zaman insert modundayım, sadece büyük bir düzenleme gerektiğinde
C-x C-ekullanıyorumvi tuş bağlarına alışkınsan
w,b,dwgibi komutlar kas hafızasıyla daha hızlı oluyorEditör açmak akışı bölüyor ve çıktıyı da kapatıyor, o yüzden tercih etmiyorum
Keşke shell’de de Vim’deki karakterler arası silme (
di") gibi özellikler olsaydıBen de oh-my-zsh’i sadece temel kurulum için kullanıyorum
Sadece git eklentisini kullanıyorum ve özel fonksiyonları otomatik yüklüyorum
hyperfineile ölçtüğümde login shell 54 ms, normal shell ise yaklaşık 6 ms çıktı380 ms gecikmenin başka bir nedeni olabileceğini düşünüyorum
anında başlatma sunuyor ve bakım modunda olduğu için zaman kaybını da azaltıyor
zsh -lbir login shell’dir, bu yüzdenzshrcyüklemezTesti
zsh -ic exitile yapmak gerekirAyrıntılar için zsh-bench kılavuzuna bakabilirsin
.zshrciçinezprofeklemek daha iyi olurextract,z,fzfgibi eklentileri de denemeni öneririmBen fish + starship kombinasyonuna geçtim
fish, varsayılan olarak otomatik tamamlama ve sözdizimi renklendirme sunduğu için oh-my-zsh’nin temel işlevlerini karşılıyor
ilgili yazıya bakabilirsin
Bu yüzden ben zsh+starship+basit bir init script kullanmaya devam ediyorum
fish’in tamamen “sadece çalışmasını” isterdim ama hâlâ eksikleri var
HEREDOC olmaması ve background block desteklememesi can sıkıcı ama,
bugünlerde karmaşık script’ler yerine daha çok tek bir binary olarak derlenen dilleri tercih ediyorum
Olgunlaştığında nushell’e geçmeyi düşünüyorum
Ben birkaç yıl önce Zim’e geçtim
İhtiyacım olan her şey var, hızlı ve kurulumu da kolay
https://zimfw.sh/
Çeşitli kaynakları ve formatları destekliyor, zsh kod entegrasyonu da çok iyi
Çoğu eklenti sisteminden hız ve uyumluluk açısından çok daha iyi
Gerçekten harika bir framework
Üniversite zamanlarımda, yaklaşık 15 yıl önce oh-my-zsh kurmuştum
O zamandan beri o kadar memnunum ki başka bir shell ya da yapılandırma deneme ihtiyacı hiç hissetmedim
Yeni bir bilgisayar kurarken ilk işim onu yüklemek oluyor
Uzun zamandır oh-my-zsh kullanıyordum ama bu kez Claude yardımıyla 5 dakikada kaldırdım
İhtiyacım olan özellikleri sadece raw zsh ile değiştirdim
Prompt olarak
starshipkullandığım için ek yapılandırma neredeyse hiç gerekmediŞimdilik her şey sorunsuz çalışıyor gibi görünüyor
Bazıları oh-my-zsh’nin 0,5 saniyelik gecikmesini sorun etmenin abartı olduğunu düşünüyor
Sadece bash ve KDE konsole kullanmanın yeterli olduğunu söylüyorlar
Shell’in sadece iş yapmak için basit bir sarmalayıcı olduğunu, bu tür mikro optimizasyonlarla uğraşmaya gerek olmadığını düşünüyorlar
Her shell, iş akışının bir parçası olduğu için 1 saniyelik gecikme bile hissediliyor
Bu yüzden hızlı bir shell’in önemli olduğunu düşünüyorum
En fazla 20 kez açılıyorsa bunun o kadar büyük bir mesele olmadığını söylüyorlar
Yüksek performans elbette güzel ama bunun temel bir mesele olmadığını düşünüyor
Benim zsh yapılandırmam yaklaşık 90 satır ve sadece 3 eklenti kullanıyor: compinit, vcs-info, edit-command-line
Başlangıçtan çıkışa kadar yaklaşık 0,32 saniye sürüyor
Büyük depolarda branch bilgisini alırken gecikme yaşanıyor
bkt önbellekleme yardımcı aracı (https://github.com/dimo414/bkt) bu tür sorunları çözebiliyor
Sanırım Starship de benzer şekilde önbellekten yararlanıyor