Kỹ thuật tìm kiếm nhanh hơn Ripgrep, grep, ag, Git grep, ucg, pt và sift (2016)
(blog.burntsushi.net)Tóm tắt: giới thiệu công cụ tìm kiếm dòng lệnh mới ripgrep
ripgreplà một công cụ tìm kiếm dòng lệnh mới kết hợp tính tiện dụng của The Silver Searcher với hiệu năng của GNU grep.- Cung cấp binary cho Linux, macOS và Windows, được viết bằng Rust.
- Vượt trội về hiệu năng và độ chính xác khi tìm kiếm trên một tệp đơn lẻ cũng như trong các thư mục lớn.
- Hỗ trợ Unicode xuất sắc và nhìn chung nhanh hơn các công cụ dùng memory map.
Giới thiệu ripgrep
Ưu điểm
- Nhanh hơn các công cụ tìm kiếm khác và không tìm trong các tệp bị bỏ qua bởi
.gitignore. - Cung cấp khả năng chỉ tìm trong một số loại tệp nhất định hoặc loại trừ chúng.
- Hỗ trợ nhiều tính năng của
grepvà luôn hỗ trợ Unicode. - Có thể tùy chọn dùng engine biểu thức chính quy PCRE2.
- Hỗ trợ nhiều kiểu mã hóa văn bản và tìm kiếm trong các tệp nén.
- Hỗ trợ bộ lọc tiền xử lý đầu vào tùy ý.
Ý kiến phản đối
- Không tuân thủ tiêu chuẩn POSIX và không phổ biến bằng
grep. - Có thể thiếu một số tính năng hoặc lỗi cụ thể vốn có ở các công cụ khác mà ripgrep không có.
- Trong một số trường hợp biên về hiệu năng, ripgrep có thể chậm hơn công cụ khác.
Cài đặt
- Tên binary của
ripgreplàrgvà có thể cài đặt trên nhiều nền tảng. - Có hướng dẫn cài đặt qua Homebrew, Archlinux và cho lập trình viên Rust.
- Cũng có thể tự build từ mã nguồn.
Tham quan nhanh
- Cách dùng dòng lệnh của
ripgrepkhông khác nhiều so với các công cụ tương tự khác. - Tự động hỗ trợ đầu ra terminal, màu sắc, hiển thị số dòng, v.v.
- Có thể tìm kiếm bằng nhiều tùy chọn và mẫu khác nhau.
Cấu trúc của ripgrep
Bối cảnh
- Giải thích điểm khác biệt và điểm chung giữa
grepvà các công cụ hậu duệ củaack. ripgrepkết hợp khả năng tìm kiếm trên tệp lớn củagrepvới thiết lập mặc định tìm kiếm "thông minh" củaack.
Chuẩn bị tìm kiếm tệp
- Việc dùng bộ lặp thư mục nhanh và lọc đường dẫn tệp là rất quan trọng.
- Áp dụng nhanh các quy tắc trong tệp
.gitignoreảnh hưởng đến hiệu năng.
Tìm kiếm
- Engine biểu thức chính quy nhanh và tối ưu hóa literal là rất quan trọng.
- Không tìm theo từng dòng hay trên toàn bộ tệp, mà tìm trong các buffer lớn cùng lúc.
Đầu ra
- Ghi kết quả tìm kiếm vào buffer bộ nhớ rồi tuần tự hóa và xuất ra
stdout.
Phương pháp luận
Tổng quan
- Tập trung vào vấn đề mà người dùng muốn giải quyết và cố gắng thực hiện benchmark công bằng.
- Benchmark nhiều công cụ và so sánh có tính đến sự khác biệt trong hành vi mặc định của từng công cụ.
Ý kiến của GN⁺
Điểm quan trọng nhất của bài viết này là nó giải thích chi tiết những ưu điểm mà ripgrep có khi so với các công cụ tìm kiếm hiện có. Đặc biệt, hiệu năng nhanh, hỗ trợ Unicode và khả năng hỗ trợ nhiều định dạng tệp cũng như kiểu mã hóa là những lý do có thể hấp dẫn người dùng. Điều khiến bài viết này thú vị là nó giúp hiểu công cụ mới khác gì so với các công cụ hiện có, và sự khác biệt đó có thể ảnh hưởng thế nào đến người dùng thực tế.
1 bình luận
Ý kiến trên Hacker News