بر اساس گزارش منتشرشده در وبلاگ مهندسی گیتهاب (GitHub Engineering Blog)، رابط کاربری نمایش تغییرات (diff) در اپلیکیشن GitHub Copilot بازطراحی شد. این بازنویسی برای مدیریت پولریکوئستهای بسیار حجیم شامل ۲۲۰۰ فایل، بیش از ۱ میلیون خط تغییر و افزون بر ۴۰۰ کامنت بررسی درونخطی انجام شده است.
چالش مقیاسپذیری و شکست مجازیسازی سنتی
نمایش سریع diffهای کد به مجازیسازی (Virtualization) متکی است؛ فقط حدود ۱۰۰ ردیف در DOM بارگذاری میشوند و با اسکرول، عناصر بازیافت میشوند. این مدل بر قرارداد اندازه ثابت پیش از رندر (all heights known before paint) استوار است. محاسبه اسکرولبار و موقعیت ردیف N از طریق جدول ریاضی ارتفاعها انجام میشد.
ورود کامنتهای بررسی کد این سیستم را دچار اختلال میکند. ارتفاع کامنت به فاکتورهای ناشناخته پیش از رندر بستگی دارد: شکست خطوط Markdown، بلوکهای بازشونده details، کادرهای درج پاسخ، تصاویر با بارگذاری ناهمگام و تفاوتهای پیشنهادی. تخمین ثابت یا اصلاح ارتفاع پس از نقاشی DOM باعث پرش ناگهانی اسکرول (scroll jump) در اسناد طویل میشود.
معماری هندسه دوگانه (Two Geometries)
مهندسان گیتهاب برای حل مشکل، ساختار ریاضی ارتفاع کل صفحه را به دو دامنه مستقل تفکیک کردند:
total height = deterministic code height + Σ dynamic block effective heights + scroll padding
- هندسه کد (Code geometry): قطعی، بر پایه پیشمحاسبه جمع پیشوندی (prefix-summed) و ریاضیات Typed-array. با تغییر اندازه کامنتها هرگز مجدداً محاسبه نمیشود. عدم استفاده از مؤلفه React به ازای هر خط و پیادهسازی رندرینگ امری (imperative recycled renderer).
- هندسه بلوکهای پویا (Dynamic block geometry): اختصاص کلید پایدار بر اساس فایل، شماره خط و جهت، نه مختصات پیکسلی. ثبت اثر انگشت (fingerprint) برای محتوا و وضعیت باز بودن المانها، به همراه دستهبندی عرض پنجره برای جلوگیری از بیاعتباری اندازهگیری در تغییر اندازه صفحه.
ارتفاع واقعی بلوکهای پویا به شکل تنبل (lazy) اندازهگیری شده و اصلاحات ارتفاع به موقعیت فعلی دید کاربر مهار (anchor) میشوند تا جابجایی اسکرول رخ ندهد.
خرید قانونی گیتهاب کوپایلت (GitHub Copilot)
فعالسازی مستقیم با کارتهای بینالمللی معتبر، بدون واسطه، با ضمانت کامل تا آخرین روز اشتراک و پشتیبانی سریع در شیرازگِیت.
دیدگاه خود را بنویسید