Акрамя спынення падтрымкі Python 2.7, іншай важнай зменай стала ўключэнне
Правядзенне прафілявання наяўнага кода паказала, што асноўны час пры вылічэннях марнуецца на выклік функцый use_reduce і catpkgsplit з паўтаральным наборам аргументаў (напрыклад, функцыя catpkgsplit выклікалася ад 1 да 5 млн разоў). Для паскарэння было ўжыта кэшаванне выніку працы дадзеных функцый з выкарыстаннем слоўнікаў. Аптымальным для захоўвання кэша была ўбудаваная функцыя lru_cache, але яна была даступная толькі ў выпусках Python, пачынальна з 3.2. Для сумяшчальнасці з больш раннімі версіямі была дададзеная заглушка, якая падмяняе 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