เทคนิคการปรับปรุงประสิทธิภาพ TRAMP ทำให้การแก้ไขไฟล์ระยะไกลใน Emacs เร็วขึ้นอย่างมีนัยสำคัญ

ทีมชุมชน BigGo
เทคนิคการปรับปรุงประสิทธิภาพ TRAMP ทำให้การแก้ไขไฟล์ระยะไกลใน Emacs เร็วขึ้นอย่างมีนัยสำคัญ

ผู้ใช้ Emacs ที่ทำงานกับไฟล์ระยะไกลต้องต่อสู้กับประสิทธิภาพที่ช้าของ TRAMP มานาน แต่เทคนิคการปรับปรุงล่าสุดกำลังเปลี่ยนประสบการณ์จากความหงุดหงิดให้กลายเป็นความลื่นไหล TRAMP ซึ่งย่อมาจาก Transparent Remote Access Multiple Protocol ช่วยให้ผู้ใช้ Emacs สามารถแก้ไขไฟล์บนเครื่องระยะไกลได้เหมือนกับไฟล์ในเครื่อง แม้จะมีพลังมาก แต่ในอดีตมักประสบปัญหาความล่าช้าที่สำคัญซึ่งทำให้การใช้งานประจำวันเป็นเรื่องที่ยากลำบาก

คุณภาพการเชื่อมต่อเครือข่ายเป็นตัวขับเคลื่อนความแตกต่างของประสิทธิภาพ

ช่องว่างประสิทธิภาพระหว่างการดำเนินการในเครื่องและระยะไกลนั้นมีความแตกต่างอย่างมาก การเรียกใช้ TRAMP แต่ละครั้งโดยทั่วไปใช้เวลา 50-100 มิลลิวินาทีเมื่อเปรียบเทียบกับเพียง 1 มิลลิวินาทีสำหรับการดำเนินการในเครื่อง ความแตกต่างนี้จะเห็นได้ชัดเจนโดยเฉพาะบนการเชื่อมต่อเครือข่ายที่ช้ากว่า ซึ่งช่องว่างสามารถขยายไปถึง 750 มิลลิวินาทีหรือมากกว่า ชุมชนพบว่าคุณภาพการเชื่อมต่อมีบทบาทสำคัญในการกำหนดว่ากลยุทธ์การปรับปรุงใดจะทำงานได้ดีที่สุด

การเปรียบเทียบประสิทธิภาพ

  • การทำงานของ Emacs ในเครื่อง: ประมาณ 1ms
  • การทำงานระยะไกลของ TRAMP: 50-100ms
  • การเชื่อมต่อที่ช้า: ความล่าช้าสูงสุดถึง 750ms
  • จุดตัดระหว่าง inline กับ out-of-band: ขนาดไฟล์ประมาณ 2MB

การเลือกวิธีการถ่ายโอนไฟล์สร้างการเพิ่มความเร็วที่สำคัญ

หนึ่งในการปรับปรุงที่มีผลกระทบมากที่สุดเกี่ยวข้องกับการปรับเปลี่ยนเมื่อ TRAMP เปลี่ยนระหว่างวิธีการถ่ายโอนไฟล์แบบ inline และ out-of-band การทดสอบเผยให้เห็นว่าการถ่ายโอนแบบ inline ยังคงเร็วกว่าเครื่องมือภายนอกเช่น rsync หรือ scp สำหรับไฟล์ที่มีขนาดประมาณ 2MB โดยไม่คำนึงถึงความเร็วการเชื่อมต่อ การค้นพบนี้ขัดแย้งกับขีดจำกัดเริ่มต้น 10KB แนะนำให้ผู้ใช้เพิ่มขีดจำกัดเป็นประมาณ 2MB เพื่อประสิทธิภาพที่เหมาะสม

วิธี rsync มีประโยชน์เพิ่มเติมสำหรับการอัปเดตไฟล์ โดยให้ประสิทธิภาพที่เร็วกว่า 3-4 เท่าเมื่อบันทึกการเปลี่ยนแปลงไปยังไฟล์ที่มีอยู่ อย่างไรก็ตาม สิ่งนี้มาพร้อมกับข้อแลกเปลี่ยน เนื่องจาก rsync สามารถทำลายฟังก์ชันการทำงานของ remote shell ได้

ประสิทธิภาพของวิธีการถ่ายโอนไฟล์

  • การถ่ายโอนแบบ Inline: เร็วกว่าสำหรับไฟล์ที่มีขนาดต่ำกว่า 2MB
  • แบบ Out-of-band ( rsync / scp ): ดีกว่าสำหรับไฟล์ขนาดใหญ่
  • Rsync สำหรับการอัปเดต: เร็วกว่า scp 3-4 เท่าสำหรับไฟล์ที่มีอยู่แล้ว
  • ค่าเริ่มต้น: 10KB (แนะนำ: 2MB)

คุณสมบัติ Direct Async Process เปลี่ยนแปลงความเข้ากันได้ของแพ็กเกจ

TRAMP เวอร์ชันล่าสุดรวมคุณสมบัติ direct async process ที่ปรับปรุงความเข้ากันได้กับแพ็กเกจ Emacs ยอดนิยมอย่างมาก การปรับปรุงนี้ทำให้เครื่องมือที่ใช้งานไม่ได้ก่อนหน้านี้เช่น Magit และ git-gutter สามารถใช้งานได้ผ่านการเชื่อมต่อระยะไกล คุณสมบัตินี้ทำงานโดยการใช้การเชื่อมต่อที่มีอยู่แล้วซ้ำแทนที่จะสร้างใหม่สำหรับแต่ละกระบวนการแบบ asynchronous

TRAMP เป็นอัญมณีจริงๆ และรู้สึกเหมือนว่ามันควรจะเร็วขึ้นได้ ไม่ว่าจะด้วยการปรับแต่งการกำหนดค่าเพื่อทำให้ทันสมัยขึ้นหน่อย หรือการปรับปรุงในระบบแคชหรือตรรกะการซิงค์

เวิร์กโฟลว์ทางเลือกเกิดขึ้นสำหรับกรณีการใช้งานที่แตกต่างกัน

ผู้ใช้บางคนได้เลิกใช้ TRAMP ทั้งหมด โดยหันไปใช้การแก้ไขในเครื่องพร้อมการซิงโครไนซ์อัตโนมัติ เครื่องมือเช่น watchexec ร่วมกับ rsync ให้การแก้ไขในเครื่องที่เกือบจะทันทีในขณะที่รักษาการซิงโครไนซ์ระยะไกล วิธีการนี้ให้ประโยชน์ในการทำงานกับเอดิเตอร์ใดก็ได้และเก็บสำรองข้อมูลในเครื่อง แม้ว่าจะต้องมีการตั้งค่าเพิ่มเติมและไม่ได้ให้การเข้าถึงระยะไกลแบบโปร่งใสที่ทำให้ TRAMP มีเอกลักษณ์

กลยุทธ์การแคชลดการเรียกใช้ระยะไกล

ผู้ใช้ขั้นสูงกำลังใช้กลไกการแคชที่กำหนดเองเพื่อลดการดำเนินการระยะไกลที่มีราคาแพง โดยการ memoizing ข้อมูลที่เข้าถึงบ่อยเช่น project roots และข้อมูล git repository การปรับปรุงเหล่านี้สามารถกำจัดการเรียกใช้ TRAMP ที่ซ้ำซ้อนซึ่งไม่เปลี่ยนแปลงบ่อย แม้ว่าจะไม่เป็นทางการ แต่เทคนิคเหล่านี้แสดงให้เห็นความหวังสำหรับการพัฒนา TRAMP ในอนาคต

ความพยายามในการปรับปรุงได้ทำให้ TRAMP สามารถใช้งานได้มากขึ้นสำหรับงานพัฒนาระยะไกลประจำวัน แม้ว่าการดำเนินการบางอย่างยังคงช้ากว่าเทียบเท่าในเครื่อง แต่การปรับปรุงได้เปลี่ยนแปลง TRAMP จากการใช้งานได้แทบจะไม่ได้เป็นการใช้งานจริงสำหรับเวิร์กโฟลว์ Emacs ระยะไกล

TRAMP: Transparent Remote Access Multiple Protocol - แพ็กเกจ Emacs สำหรับการแก้ไขไฟล์ระยะไกล Memoizing: เทคนิคที่แคชผลลัพธ์ของฟังก์ชันเพื่อหลีกเลี่ยงการคำนวณที่มีราคาแพงซ้ำๆ

อ้างอิง: Making TRAMP go Brrrr....