zsh bắt đầu cực kỳ chậm


63

ZSH mất khoảng một giây rưỡi từ khi tạo một cửa sổ đầu cuối mới để sẵn sàng. Tôi khá chắc chắn rằng thủ phạm là compinit.

Tôi đã không thể tìm thấy tài liệu tốt trên compinit,nhưng có vẻ như nó nên lưu trữ tất cả những thứ cần thiết trong một số tệp như thế nào .zcompdump.

Bất kỳ thủ thuật để tăng tốc nó lên?

Câu trả lời:


33

oh-my-zshmất khoảng 1,5 giây để khởi động máy tính xách tay của tôi. Tôi đã viết lên một số bước tôi đã thực hiện để giảm xuống còn khoảng 0,25 giây .

Một linh hồn tốt bụng khác đã tóm tắt các bước cần thiết để tích hợp các thay đổi của tôi vào bản sao oh-my-zsh của bạn.

Vấn đề lớn nhất là việc compinitđược gọi là cả đống thời gian thêm thay vì chỉ một lần sau khi đường dẫn hoàn toàn được xác định. Tôi đã thực hiện những thay đổi trên nhánh của tôi oh-my-zshtrên github. Những thay đổi đã được thảo luận trên github và chúng dường như đang hoạt động tốt đối với một số người. Hy vọng những thay đổi sẽ được sáp nhập vào oh-my-zshtrong tương lai gần.


4
Đối với độc giả trong tương lai, tôi tin rằng tất cả những thay đổi này đã được hợp nhất ngược dòng.
Michael Mior

1
Các thay đổi có thể đã được chuyển lên thượng nguồn, nhưng loại bỏ Git khỏi các plugin đã giúp tôi đáng kể.
kylehotchkiss

25

Mặc dù ZSH có chia sẻ chậm, nhưng nếu bạn thấy cửa sổ đầu cuối trống trong một vài phút trước khi bạn nhìn thấy Last Login:dòng, bạn sẽ cần phải xóa các tệp nhật ký của mình để xem cải thiện tốc độ. Đây vẫn là một vấn đề của OSX Lion và sẽ cần được thực hiện vài tháng một lần. Lame, tôi biết.

Lệnh là:

sudo rm -rf /private/var/log/asl/*.asl

Tất nhiên, bạn cần phải đọc bài viết này trước và để bạn biết chính xác những gì đang xảy ra, bởi vì chạy bất cứ điều gì nói sudo rmcần phải suy nghĩ. Tôi chỉ đặt điều này ở đây vì việc sử dụng ZSH của bạn chứng tỏ năng lực của bạn với dòng lệnh bắt đầu.


1
Cảm ơn, một giải pháp đơn giản cho thứ gì đó đã làm tôi khó chịu quá lâu!
Trưởng khoa

7
Tôi khuyên bạn không nên sử dụng -rvì không có thư mục nào được tham gia và nó không cần thiết. Bỏ qua nó sẽ dẫn đến ít nước mắt hơn nếu ai đó gõ sudo rm -rf / private/var/log/asl*.asl(không gian trước khi riêng tư) do nhầm lẫn.
Trưởng khoa

1
Hoặc thậm chí nhiều hơn nữa, cd /private/var/log/aslsau đó rm -f *.asl. Cũng cho hồ sơ, câu trả lời này đã cứu tôi khỏi thời gian khởi động đã gần 10 giây, cảm ơn rất nhiều!
Vũ điệu Garrett

1
Đã làm cho tôi! BTW trash /private/var/log/asl*.asl. trashtất nhiên sẽ cần phải được cài đặt brew install trash
Mike D

12

Cải tiến lớn nhất của tôi đến từ việc xóa các mục khỏi phần plugin = (). Các plugin 'github' và 'brew' tải rất chậm.

Tôi cũng loại bỏ hub mà tôi đã đặt bí danh gitvà điều đó cũng tăng tốc nhắc nhở.

Tôi đã sử dụng '/ usr / bin / time zsh -i -c exit' để ghi lại thời gian khởi động, tuy nhiên compinitdường như không tạo ra sự khác biệt đủ lớn đối với tôi.

Thật tuyệt khi nghe những gì người khác đang làm để tăng tốc nó.


1
Loại bỏ các plugin githubbrewgiải quyết vấn đề của tôi ngay lập tức.
Peter Niederwieser

gitbrewplugin là khá cần thiết với tôi. Bằng cách loại bỏ rubyplugin đã giải quyết vấn đề của tôi. Cảm ơn.
Ivan ZG Xiao

6

Bạn đang sử dụng cài đặt sẵn /bin/zshhoặc một cái khác? Tôi hỏi, bởi vì zsh tôi đã cài đặt thông qua fink bắt đầu rất chậm do bao gồm các mẫu zsh , trong khi vanilla bắt đầu ngay.

Việc chạy với dumpfile ( compinit -d dumpfile) rõ ràng có làm cho nó đi nhanh hơn không? Trang người đàn ông nói rằng

Lệnh gọi tiếp theo của compinit sẽ đọc tệp kết xuất thay vì thực hiện khởi tạo đầy đủ.


2
Tôi đang sử dụng Oh My Zsh (mà tôi tin rằng sử dụng mặc định / bin / zsh). Khi tôi vô hiệu hóa tải tất cả các plugin của Oh My Zsh và không có gì, nó sẽ tải lên rất nhanh, nhưng tôi nghĩ trong trường hợp đó compinitkhông bao giờ được gọi. Khi tôi tự gọi compinitnó sẽ mất một chút thời gian. Có lẽ đó chỉ là vì Oh My Zsh thêm rất nhiều ràng buộc vào compinit?
Eli

5

Bây giờ oh-my-zsh kiểm tra tùy chọn cấu hình git đặc biệt oh-my-zsh. Leather-status trước khi truy vấn trạng thái. Vì vậy hãy chạy

git config oh-my-zsh. leather-status 1

trên kho lưu trữ có vấn đề.


Đối với tôi, tôi đã phải tắt plugin git .zshrc. Tôi hiện đang phải đối mặt với các vấn đề với phản hồi internet chậm, khiến zsh chậm
Paschalis

5

Zsh tự khởi động trong khoảng 0,1 giây đối với tôi, điều đó đủ tốt. Tôi chỉ nhận thấy khi tôi đến gần mốc lịch sử lệnh 50.000, nó trở nên giống như 3 giây để tải lên dấu nhắc đầu tiên.

Tôi không biết làm thế nào các bạn tìm thấy tất cả những lý do khác cho việc khởi động chậm, nhưng tôi chính xác là những gì tôi đoán đầu tiên. Tôi đã làm một mv ~/.zsh_history zsh_history_backupvà bam, 3 giây khởi động bây giờ là 0,1 giây khởi động. Thật kỳ lạ, /usr/bin/time /bin/zsh -i -c exitkhông nắm bắt được thời gian cần thiết để tải trong lịch sử.

Tuy nhiên, nếu bạn không có hàng chục ngàn lệnh trong lịch sử zsh của mình, thì đây không phải là nó. Số ~/.zsh_historyđo của tôi là 1,8 MB. Rất có thể vô tình dán một khối lớn các thứ như một lệnh vào một thiết bị đầu cuối, điều này cũng sẽ làm tăng lịch sử ngay lập tức (mặc dù đây là điều rất nhiều để tránh làm vì nó rõ ràng có thể cực kỳ phá hủy).


Đây là câu trả lời. Nếu chưa làm được điều gì lạ mắt (rất nhiều plugin và addons) với oh-my-zsh, thì tôi đảm bảo đó là vì nhật ký lịch sử. Sự thay đổi là ngay lập tức.
Sebastialonso

2

Tôi đã sử dụng chủ đề "af-magic"

Chuyển sang "nàng thơ" đã giải quyết vấn đề.

Chỉnh sửa ~ / .zshrc và sửa đổi dòng đó:

#ZSH_THEME="random"
#ZSH_THEME="af-magic"
ZSH_THEME="muse"

cảm ơn vì câu trả lời, tôi thấy việc thay đổi từ af-magic sang thứ khác đã giải quyết được vấn đề. Thú vị khôi phục lại af-ma thuật vẫn hoạt động tuyệt vời. không chắc chắn những gì đã diễn ra dưới mui xe.
sarat

0

Tôi có những cải tiến tốc độ thực sự tuyệt vời sau khi xóa thư mục ~ / .oh-my-zsh / plugins /. Có rất nhiều plugin không được sử dụng bên trong nó.


0

Thêm phần sau vào ~ / .zshenv của bạn

skip_global_compinit=1
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.