- Oh My Zsh(OMZ) masih sering direkomendasikan, tetapi menyebabkan beban skrip yang tidak perlu yang memperlambat waktu startup shell
- OMZ ditulis sebagai skrip shell, sehingga setiap kali membuka tab terminal baru semua skrip harus diinterpretasikan ulang, dan bahkan dengan konfigurasi dasar saja muncul jeda sekitar 0,38 detik
- Dengan memakai konfigurasi minimal Zsh, prompt Starship, dan pencarian riwayat berbasis fzf, waktu startup bisa dipangkas menjadi 0,07 detik
- Starship menyusun prompt sebagai satu biner, sehingga dapat menggantikan plugin git, virtual environment, dan plugin per bahasa yang biasa dipakai di OMZ
- Dibanding plugin yang rumit, konfigurasi shell yang ringan dengan hanya menambahkan fungsi yang benar-benar dibutuhkan lebih efisien
Masalah performa Oh My Zsh
- Oh My Zsh(OMZ) masih banyak dipakai, tetapi menurunkan kecepatan startup shell karena bloat yang tidak perlu
- OMZ tersusun dari skrip shell, jadi saat membuka tab terminal baru semua skrip harus diinterpretasikan
- Pada konfigurasi yang menyertakan plugin bawaan (git, zsh-autosuggestions, zsh-autocomplete), hasil menjalankan
/usr/bin/time -f "%e seconds" zsh -i -c exit memakan waktu 0,38 detik
- Saat membuka tab baru di folder repositori git, jeda yang terasa bisa mencapai sekitar 1 detik
- OMZ secara berkala memeriksa pembaruan, dan proses ini dapat menimbulkan tambahan jeda beberapa detik
- Pembaruan konfigurasi shell yang terlalu sering tidak perlu, dan konfigurasi sederhana dengan hanya menambahkan fungsi yang dibutuhkan secara langsung lebih disarankan
Konfigurasi minimal Zsh
Kustomisasi prompt
Pencarian riwayat
- Plugin
zsh-autosuggestions yang umum dipakai dapat menampilkan saran saat mengetik dan berpotensi mengalihkan perhatian
- Sebagai gantinya, ikat fzf ke
Ctrl+R untuk menelusuri riwayat dengan fuzzy search interaktif
source <(fzf --zsh)
Hasil peningkatan performa
Tip tambahan
Kesimpulan dan kasus penggunaan
- Setelah beralih dari OMZ, adaptasi ke workflow baru hanya memerlukan beberapa hari
- Plugin yang diperlukan tetap bisa dimuat secara manual
- Alasan membuka banyak tab adalah karena tmux dan editor berbasis terminal (helix) dipakai bersama
- Di tmux,
lazygit dan file manager yazi dijalankan sebagai popup
- Dipakai juga pane split sementara untuk menjalankan kode dan melihat output pengujian, dan masing-masing berjalan sebagai sesi shell terpisah
Ringkasan komentar
- Sebagian pengguna berpendapat waktu startup OMZ di kisaran 0,03 detik sudah cukup cepat
- Penulis menunjukkan bahwa plugin zsh-autocomplete memperlambat performa
- Pada hasil
zsh-bench, jeda ke prompt pertama OMZ sebesar 603ms, sedangkan konfigurasi Zsh sederhana tercatat 103ms
- Starship menggantikan fitur prompt OMZ dengan satu alat saja
- Pengguna lain juga menyebut alternatif seperti Zimfw, Atuin, dan prompt bash buatan sendiri
9 komentar
Kalau tidak dioptimalkan memang sangat lambat. Tapi karena sudah terbiasa dengan banyak fiturnya, agak susah juga untuk benar-benar pindah.
Saya belum merasa ini cukup mengganggu sampai benar-benar menonjol.
Ini bukan server web, jadi kalau tidak sampai terasa merepotkan, ya saya anggap wajar saja..
Namanya juga para developer, ributnya heboh cuma gara-gara beberapa ms yang nggak penting wkwk
Bukankah teknologi berkembang justru karena mengejar beberapa ms yang tidak perlu itu?
Jika Anda sering menggunakan terminal, latensi tambahan yang disebabkan oleh omz terasa cukup mengganggu.
Beberapa bulan lalu saya beralih ke prezto, dan saya sempat berpikir, memangnya omz dulu selambat ini ya?
Bahkan hanya dengan beberapa plugin dasar saja sudah terasa jauh lebih lambat...
Saya pindah ke starship.
Komentar Hacker News
Saya hanya punya satu alasan untuk memakai oh-my-zsh
yaitu untuk mendapatkan lingkungan shell yang langsung produktif yang bisa dipakai segera di mesin baru, host jarak jauh, atau container mana pun
Daripada menghabiskan berjam-jam mengutak-atik konfigurasi sendiri, saya lebih memilih memakai waktu itu untuk hal yang lebih penting
Pengalaman “langsung bisa dipakai setelah instalasi” tetap ada, tapi tanpa latensi prompt lebih dari 200ms
Instalasinya cukup satu baris
curl, dan konfigurasinya juga sederhanaMenurut saya Anda tidak akan menyesal mencobanya
Setelah file konfigurasi dibuat sekali dan dikelola dengan git, Anda bisa memakainya apa adanya di mesin lain
Saat menyiapkan mesin baru, saya juga cukup membawa dotfiles agar lingkungan yang familiar langsung berjalan
Cuma bercanda, tapi menyalin
.bashrcjauh lebih mudah daripada memasang shell defaultHarus menunggu setiap kali membuka tab sangat mengesalkan
Pada akhirnya saya hanya memasang beberapa plugin yang saya butuhkan langsung lewat Homebrew, dan itu bahkan tidak sampai satu jam
Sekarang shell saya jauh lebih cepat dan ringan, jadi saya jauh lebih produktif dan senang
Kecepatan startup shell sangat tinggi dan penyiapannya juga mudah
Karena itu saya pindah ke fish
Memang tidak 100% sesuai selera saya, tapi konfigurasi bawaannya sudah cukup bagus jadi saya tinggal membiasakan diri
Sekarang saya hampir tidak pernah perlu memikirkan konfigurasi shell lagi
Tapi saya sarankan pemula benar-benar membaca key binding-nya
Pernah ada rekan tim yang jadi lebih lambat karena tidak tahu fitur seperti tab completion atau shift+arrow
Saya kadang hanya menambahkan binding vim atau plugin fuzzy find
fish bawaan saja sudah sangat bagus
Saya tidak setuju dengan pendapat yang menyarankan menyalakan mode Vim di Zsh
readline bawaan juga sudah cukup bagus untuk perintah tunggal
Untuk perintah panjang, cukup edit dengan
C-x C-eSaat pair programming, perpindahan mode Vim malah terlihat memperlambat
C-x C-ememang sangat bergunaSebagian besar waktu saya ada di mode insert, dan hanya memakai
C-x C-esaat perlu edit besarKalau sudah terbiasa dengan binding vi, perintah seperti
w,b,dwjadi lebih cepat karena muscle memoryMembuka editor terasa memutus alur kerja dan juga menutupi output, jadi saya kurang suka
Akan menyenangkan kalau shell juga punya fitur Vim seperti menghapus di antara karakter (di")
Saya juga memakai oh-my-zsh hanya untuk setelan dasar
Saya cuma memakai satu plugin git, dan fungsi kustom dimuat otomatis
Setelah diukur dengan
hyperfine, shell login saya sekitar 54ms dan shell biasa sekitar 6msSaya rasa jeda 380ms mungkin disebabkan hal lain
Ia bisa langsung mulai seketika, dan karena ada di mode maintenance justru membantu menghindari pemborosan waktu
zsh -ladalah shell login jadi tidak memuatzshrcPengujian seharusnya dilakukan dengan
zsh -ic exitUntuk detailnya lihat panduan zsh-bench
zprofke.zshrcextract,z,fzfSaya pindah ke kombinasi fish + starship
fish secara bawaan menyediakan autocompletion dan syntax highlighting, jadi bisa menggantikan fungsi utama oh-my-zsh
Lihat artikel terkait
Karena itu saya tetap memakai zsh+starship+skrip init sederhana
Saya berharap fish bisa benar-benar “langsung bekerja”, tapi untuk sekarang masih ada kekurangannya
Tidak adanya HEREDOC dan blok background memang kurang nyaman,
tapi belakangan saya lebih menyukai bahasa yang dibangun menjadi binary tunggal daripada skrip rumit
Kalau sudah makin matang, saya berencana pindah ke nushell
Saya pindah ke Zim beberapa tahun lalu
Semua fitur yang saya butuhkan ada, dan cepat serta mudah dipasang
https://zimfw.sh/
Mendukung berbagai sumber dan format, dan integrasi kode zsh-nya juga sangat bagus
Dibanding kebanyakan sistem plugin, ia jauh lebih baik dalam kecepatan dan kompatibilitas
Ini framework yang sangat keren
Sekitar 15 tahun lalu saat kuliah saya memasang oh-my-zsh,
dan sejak saat itu saya sangat puas sampai tidak merasa perlu mencoba shell atau konfigurasi lain
Setiap kali menyiapkan komputer baru, ini selalu jadi hal pertama yang saya pasang
Saya sudah lama memakai oh-my-zsh, tapi kali ini saya menghapusnya dalam 5 menit dengan bantuan Claude
Saya mengganti hanya fitur yang benar-benar saya butuhkan dengan raw zsh
Karena saya memakai
starshipsebagai prompt, hampir tidak ada konfigurasi tambahan yang diperlukanSejauh ini semua fungsi tampaknya berjalan baik
Ada yang merasa menganggap jeda 0,5 detik di oh-my-zsh sebagai masalah itu berlebihan
Katanya cukup pakai bash dan KDE konsole saja
Shell hanyalah pembungkus sederhana untuk pekerjaan, jadi tidak perlu terlalu memikirkan mikro-optimalisasi seperti ini
Karena tiap shell adalah bagian dari alur kerja, jeda 1 detik pun sangat terasa
Jadi menurut saya shell yang cepat itu penting
Paling banyak sekitar 20 kali, jadi menurut mereka itu bukan masalah besar
Performa yang cepat tentu bagus, tapi menurut mereka ini bukan masalah yang mendasar
Konfigurasi zsh saya sekitar 90 baris dan hanya memakai 3 plugin (compinit, vcs-info, edit-command-line)
Dari mulai sampai selesai butuh sekitar 0,32 detik
Di repositori besar, pengambilan info branch menyebabkan jeda
Utilitas cache bkt(https://github.com/dimo414/bkt) bisa membantu menyelesaikan masalah seperti ini
Mungkin Starship juga memanfaatkan cache dengan cara serupa