นอกจากการสิ้นสุดการสนับสนุน Python 2.7 แล้ว การเปลี่ยนแปลงที่สำคัญอีกประการหนึ่งคือการรวมเอา
การทำโปรไฟล์โค้ดที่มีอยู่แสดงให้เห็นว่าเวลาในการคำนวณส่วนใหญ่ถูกใช้ไปในการเรียกฟังก์ชัน use_reduce และ catpkgsplit ด้วยชุดอาร์กิวเมนต์ที่ซ้ำกัน (เช่น ฟังก์ชัน catpkgsplit ถูกเรียก 1 ถึง 5 ล้านครั้ง) เพื่อเร่งความเร็วสิ่งต่าง ๆ จึงมีการใช้การแคชผลลัพธ์ของฟังก์ชันเหล่านี้โดยใช้พจนานุกรม ตัวเลือกที่ดีที่สุดสำหรับการจัดเก็บแคชคือฟังก์ชัน lru_cache ในตัว แต่มีเฉพาะใน Python ที่เริ่มตั้งแต่เวอร์ชัน 3.2 เท่านั้น เพื่อให้เข้ากันได้กับเวอร์ชันก่อนหน้า เราได้เพิ่ม stub เพื่อแทนที่ lru_cache แต่การตัดสินใจยุติการสนับสนุน Python 2.7 ใน Portage 3.0 ทำให้งานนี้ง่ายขึ้นอย่างมาก และทำให้สามารถทำได้โดยไม่ต้องใช้เลเยอร์นี้
การใช้แคชช่วยลดเวลาดำเนินการของการดำเนินการ “emerge -uDvpU —with-bdeps=y @world” บนแล็ปท็อป ThinkPad X220 จาก 5 นาที 20 วินาที เหลือ 3 นาที 16 วินาที (63%) การทดสอบบนระบบอื่นแสดงให้เห็นประสิทธิภาพเพิ่มขึ้นอย่างน้อย 48%
นักพัฒนาที่เตรียมการเปลี่ยนแปลงยังได้พยายามใช้ต้นแบบของรหัสการแก้ไขการพึ่งพาใน C ++ หรือ Rust แต่งานนั้นยากเกินไปเพราะจำเป็นต้องย้ายรหัสจำนวนมาก และสงสัยว่าผลลัพธ์จะคุ้มค่ากับความพยายาม .
ที่มา: opennet.ru