Điều tôi đã hiểu sai về terminal nhanh
(mijndertstuij.nl)- Một cấu hình shell nhanh không đạt được chỉ bằng thiết lập tối thiểu; các công cụ Zsh hiện đại cải thiện tốc độ khởi động cảm nhận được theo những cách khác
time zsh -i -c exitđo cả thời gian khởi tạo lẫn thoát, nhưng điểm người dùng thực sự phải chờ là dấu nhắc đầu tiên, lần chạy lệnh đầu tiên và độ trễ khi nhập- zsh-bench đo các yếu tố người dùng thực sự cảm nhận như thời gian tới dấu nhắc đầu tiên, thời gian chạy lệnh đầu tiên, độ trễ lệnh và độ trễ nhập liệu
- Trình quản lý plugin không phải lúc nào cũng chậm; antidote biên dịch danh sách plugin thành một script tĩnh duy nhất nên không phân giải phụ thuộc khi khởi động
- Cấu hình tối thiểu không phải con đường duy nhất để có tốc độ nhanh mà là một lựa chọn vì sự đơn giản dễ hiểu; một shell đầy đủ tính năng vẫn có thể cho cảm giác tức thì
Những gì đã được đo sai
time zsh -i -c exitkhởi động một shell tương tác rồi thoát ngay, vì vậy nó đo gộp cả thời gian khởi tạo và thời gian thoát- Đây là cách benchmark thường được dùng, nhưng zsh-bench có hẳn một mục riêng nói về lý do cách này là sai
- Thứ người dùng thực sự phải chờ không phải là toàn bộ thời gian khởi tạo mà là lúc dấu nhắc xuất hiện, thời điểm lệnh đầu tiên chạy và độ trễ của mọi lần gõ phím sau đó
- Một số cấu hình có thể cho kết quả chậm trong benchmark này nhưng khi dùng thực tế lại có cảm giác nhanh hơn
- zsh-bench đo thời gian tới dấu nhắc đầu tiên, thời gian tới khi lệnh đầu tiên chạy, độ trễ lệnh và độ trễ nhập liệu
- instant prompt render dấu nhắc đã được cache ngay khi shell khởi động và cho phép nhập liệu ngay cả trước khi
.zshrchoàn tất - Khi áp dụng instant prompt, thời gian khởi động cảm nhận được gần như về 0 bất kể chi phí khởi tạo, khiến con số thời gian thoát trở nên kém quan trọng hơn
Đính chính về trình quản lý plugin và tô sáng cú pháp
-
Cụm từ “trình quản lý plugin làm tăng overhead” đã được dùng quá rộng
- Một số trình quản lý plugin thêm overhead riêng và cả bước phân giải phụ thuộc khi khởi động
- Tuy nhiên, áp đặc tính này cho toàn bộ nhóm trình quản lý plugin là không chính xác
- antidote biên dịch một danh sách plugin đơn giản thành một script tĩnh duy nhất và không phân giải phụ thuộc khi mở shell
- Cách của antidote là
sourcemột file được tạo sẵn, tương tự như các dòngsourcedo chính bạn viết - Cách phân biệt chính xác hơn là: các framework nặng phải phân tích plugin ở mỗi lần khởi động thì chậm, còn các trình quản lý bundling tĩnh hiện đại thì không
- Các trình quản lý bundling tĩnh hiện đại cũng cung cấp quản lý cập nhật, trong khi script cài đặt tự viết phải xử lý việc đó thủ công
-
Đã khuyến nghị một trình tô sáng cú pháp chậm
- Nhìn lại thì việc
sourcezsh-syntax-highlightingtrong một cấu hình bàn về độ trễ nhập liệu là một lựa chọn đáng xấu hổ zsh-syntax-highlightingtô sáng lại toàn bộ buffer ở mỗi lần gõ phím, và với các dòng lệnh dài nó có thể chính là nguyên nhân tạo ra độ trễ theo từng phím đó- Zsh-patina là một cách tiếp cận mới hơn và có thể mang lại cảm giác tốt hơn công cụ đang dùng hiện nay nếu bạn thường nhập các lệnh dài
- Nhìn lại thì việc
-
Phần cốt lõi của lập luận vẫn còn nguyên
- Điều thực sự được ưa thích là có thể đọc toàn bộ
.zshrctrong một lần - Điểm cốt lõi là framework không quyết định thay bạn và không có plugin nào được chọn hộ mà bạn không chủ động chọn
- Vì có ít thành phần hơn nên nếu phát sinh phần chậm, nó cũng dễ tìm hơn
- Lựa chọn này là vì ưu tiên sự đơn giản hơn là vì bản thân tốc độ, còn việc đơn giản dẫn tới nhanh hơn chỉ là hiệu ứng phụ
- Một shell đầy đủ tính năng vẫn có thể nhanh và cho cảm giác tức thì, và có nhiều con đường để đạt mục tiêu đó
- Cấu hình tối thiểu được giữ lại không phải vì đó là con đường duy nhất để có tốc độ nhanh, mà vì muốn có thứ mình có thể hiểu được
- Điều thực sự được ưa thích là có thể đọc toàn bộ
-
Kết lại
- Bài viết gốc vẫn được giữ nguyên với một ghi chú ở đầu trỏ tới bài này
- Cấu hình vẫn nằm trong dotfiles, và trình tô sáng cú pháp cũng vẫn được giữ nguyên
- Một số thiết lập sẽ được cập nhật để dùng các công cụ mới hơn
1 bình luận
Ý kiến trên Lobste.rs
Đây là một bài viết nối tiếp rất hay, cho thấy sức mạnh của cộng đồng và việc trao đổi ý tưởng, khiến Internet có cảm giác nhân văn hơn một chút
Phản ứng đầu tiên là ngạc nhiên vì hóa ra vẫn có thể thừa nhận và sửa sai
Nói nghiêm túc thì, vì vốn không thích mấy shell mới nên tôi đã lướt qua bài đầu, nhưng bài này thì hay.
ashcó hành vi history mặc định không hợp với cách tôi dùng, còn các shell nhưfishthì tôi thấy có quá nhiều tính năng UI mà mình không quan tâmTuy vậy, những tính năng trông như bộ nhớ đệm prompt tự động lại khá hấp dẫn. Tôi từng tự làm một prompt quái vật và cache nó theo cách khá chắp vá, nên thấy rất đồng cảm
Tôi thích những bài như thế này. Nếu nhiều người công khai sai lầm và các đính chính sau đó hơn, Internet sẽ trở thành một nơi nhân văn hơn một chút
Sau khi đọc bài đầu, tôi đã tối ưu
zshrcvà cắt thời gian xuống còn một nửa. Sau đó tìm hiểu thêm, tôi còn dùng cảzsh-bench, và bài viết đó đã trở thành động lực tối ưu hóa cho tôiDù không còn được bảo trì nữa, zsh4humans vẫn gần như ở mức tối tân về hiệu năng. Người tạo ra nó giống kiểu một thiên tài Zsh vậy
Bản thân tôi không dùng trực tiếp, vì muốn giữ quyền kiểm soát. Dù vậy, ở những phần có thể hiểu được, tôi vẫn mượn các ý tưởng như transient prompt
Tôi cũng không biết
zsh-benchlà dự án của cùng một tác giảzsh4humanscó vài phần thật sự là viên ngọc quý, nên tôi sẽ xem thửNhờ bài này mà tôi biết đến
zsh-patinaTôi đã dùng
zsh-fast-syntax-highlightingsuốt vài năm nay, nhưng có lẽ cũng nên đánh giá công cụ mới nàyTôi tò mò không biết việc
zsh-syntax-highlightingtô sáng lại toàn bộ buffer sau mỗi lần bấm phím, gây ra độ trễ, có thực sự dễ nhận ra hay khôngTrong các trình soạn thảo mã, về bản chất cũng làm điều tương tự, nhưng tôi gần như không cảm thấy độ trễ. Xét theo tiêu chuẩn của editor thì ngay cả những lệnh “dài” trên dòng lệnh nhìn chung vẫn ngắn, nên việc phát sinh vấn đề như vậy khá bất ngờ
Tuy nhiên, nếu syntax highlighting thực sự phức tạp hơn tôi nghĩ rất nhiều thì cũng có thể xảy ra
Tôi học được rất nhiều mẹo mới từ bài này. Trước giờ tôi chỉ thực hiện các chỉnh sửa đơn giản kiểu đảm bảo dữ liệu đưa vào prompt không đến từ backend chậm
Ở đây có những kỹ thuật tối ưu hóa prompt tinh vi hơn nhiều, và trong luồng làm việc hằng ngày phải mở vô số cửa sổ terminal, những cải thiện nhỏ như thế này sẽ cộng dồn thành tác động lớn