เทคนิคการค้นหาที่เร็วกว่า Ripgrep, grep, ag, Git grep, ucg, pt และ sift (ปี 2016)
(blog.burntsushi.net)สรุป: แนะนำเครื่องมือค้นหาบนบรรทัดคำสั่งตัวใหม่ ripgrep
ripgrepเป็นเครื่องมือค้นหาบนบรรทัดคำสั่งตัวใหม่ที่ผสานความสะดวกในการใช้งานของ The Silver Searcher เข้ากับประสิทธิภาพของ GNU grep- มีไบนารีสำหรับ Linux, Mac และ Windows และเขียนด้วย Rust
- โดดเด่นทั้งด้านประสิทธิภาพและความแม่นยำในการค้นหาไฟล์เดี่ยวและไดเรกทอรีขนาดใหญ่
- รองรับ Unicode ได้ยอดเยี่ยม และโดยทั่วไปเร็วกว่าเครื่องมือที่ใช้ memory map
แนะนำ ripgrep
ข้อดี
- เร็วกว่าเครื่องมือค้นหาอื่น ๆ และจะไม่ค้นหาไฟล์ที่ถูกละเว้นโดย
.gitignore - มีความสามารถในการค้นหาเฉพาะประเภทไฟล์ที่กำหนด หรือยกเว้นบางประเภท
- รองรับฟีเจอร์จำนวนมากของ
grepและรองรับ Unicode เสมอ - สามารถเลือกใช้เอนจิน regular expression แบบ PCRE2 ได้
- รองรับการค้นหาไฟล์บีบอัดและข้อความหลายรูปแบบการเข้ารหัส
- รองรับตัวกรอง preprocessor สำหรับอินพุตแบบกำหนดเอง
ข้อโต้แย้ง
- ไม่เป็นไปตามมาตรฐาน POSIX และไม่ได้ใช้กันทั่วไปเท่า
grep - อาจไม่มีฟีเจอร์เฉพาะบางอย่างหรือบั๊กบางแบบจากเครื่องมืออื่นใน ripgrep
- ในบาง edge case ด้านประสิทธิภาพ ripgrep อาจช้ากว่าเครื่องมืออื่น
การติดตั้ง
- ชื่อไบนารีของ
ripgrepคือrgและสามารถติดตั้งได้บนหลายแพลตฟอร์ม - มีวิธีติดตั้งผ่าน Homebrew, Archlinux และสำหรับโปรแกรมเมอร์ Rust
- สามารถ build จากซอร์สได้โดยตรงเช่นกัน
ทัวร์แบบรวดเร็ว
- การใช้งาน
ripgrepผ่านบรรทัดคำสั่งไม่ได้ต่างจากเครื่องมือประเภทเดียวกันมากนัก - รองรับการแสดงผลในเทอร์มินัล สี และหมายเลขบรรทัดโดยอัตโนมัติ
- สามารถค้นหาได้ด้วยตัวเลือกและแพตเทิร์นที่หลากหลาย
โครงสร้างของ ripgrep
พื้นหลัง
- อธิบายทั้งความแตกต่างและจุดร่วมของเครื่องมือกลุ่มลูกหลานของ
grepและack ripgrepผสานความสามารถของgrepในการค้นหาไฟล์ขนาดใหญ่เข้ากับค่าเริ่มต้นการค้นหาแบบ "อัจฉริยะ" ของack
การเตรียมค้นหาไฟล์
- การใช้ตัววนซ้ำไดเรกทอรีที่รวดเร็วและการกรองพาธไฟล์เป็นสิ่งสำคัญ
- การใช้กฎจากไฟล์
.gitignoreอย่างรวดเร็วส่งผลต่อประสิทธิภาพ
การค้นหา
- เอนจิน regular expression ที่รวดเร็วและการปรับแต่ง literal optimization มีความสำคัญ
- ค้นหาในบัฟเฟอร์ขนาดใหญ่ทีเดียว แทนการค้นหาแยกทีละบรรทัดทั้งไฟล์
เอาต์พุต
- เขียนผลการค้นหาลงในบัฟเฟอร์หน่วยความจำ แล้ว serialize ออกไปยัง
stdout
วิธีการ
ภาพรวม
- มุ่งเน้นไปที่ปัญหาที่ผู้ใช้พยายามแก้ และพยายามทำ benchmark อย่างเป็นธรรม
- ทำ benchmark กับเครื่องมือหลายตัว และเปรียบเทียบโดยคำนึงถึงความแตกต่างของพฤติกรรมเริ่มต้นของแต่ละตัว
ความเห็นของ GN⁺
สิ่งสำคัญที่สุดของบทความนี้คือการอธิบายอย่างละเอียดว่า ripgrep มีข้อดีอะไรบ้างเมื่อเทียบกับเครื่องมือค้นหาเดิม ๆ โดยเฉพาะเรื่องความเร็ว การรองรับ Unicode และการรองรับรูปแบบไฟล์กับการเข้ารหัสที่หลากหลาย ซึ่งล้วนเป็นเหตุผลที่ดึงดูดผู้ใช้ได้ บทความนี้น่าสนใจเพราะช่วยให้เข้าใจว่าเครื่องมือใหม่แตกต่างจากเครื่องมือเดิมอย่างไร และความแตกต่างนั้นอาจส่งผลต่อผู้ใช้จริงอย่างไร
1 ความคิดเห็น
ความคิดเห็นบน Hacker News