- Trong vài tháng gần đây, tốc độ của trang web GitHub trên trình duyệt Safari đã giảm dần
- Với PR lớn hoặc các tệp mã có hàng nghìn dòng, việc render màn hình gần như trở nên bất khả thi
- Xuất hiện hiện tượng tiến trình render của trình duyệt dùng 100% và màn hình trắng khi cuộn, cùng với độ trễ nghiêm trọng ở các chức năng tìm kiếm và bình luận
- Thay đổi CSS và việc dùng
transform xung đột với lỗi hiệu năng của Safari và gây ra sự cố; các trình duyệt khác như Chrome hoạt động tương đối tốt hơn
- Một số bản vá hiệu năng đã được thực hiện trong WebKit, nhưng có đề cập rằng nhóm frontend của GitHub vẫn cần biện pháp ứng phó tạm thời cho đến bản phát hành Safari tiếp theo
Bối cảnh và các vấn đề chính
- Gần đây, hiện tượng suy giảm hiệu năng tổng thể trở nên rõ rệt khi truy cập trang web GitHub bằng trình duyệt Safari
- Đặc biệt, khi xem các thay đổi lên tới hàng nghìn dòng trong Pull Request (PR) hoặc duyệt các tệp mã dung lượng lớn, tình trạng đã đến mức bản thân việc render gần như không thể thực hiện được
- Trong Activity Monitor, tiến trình render chiếm 100% CPU, và tốc độ render trang chậm đến mức khi cuộn, màn hình hiện ra như khoảng trống trắng
- Các tính năng tương tác như tìm kiếm, bình luận bị trễ nghiêm trọng, và ngay cả việc nhấp checkbox khi review PR cũng mất hơn vài giây
- Hiện tượng tương tự cũng xảy ra trên các mẫu MacBook Pro mới nhất dùng Apple Silicon cao cấp, trong khi trải nghiệm trên Chrome hoặc các trình duyệt khác tốt hơn nhiều
Nguyên nhân và phân tích
- Người dùng Safari 18.6 (cùng các bản beta/Tech Preview) cùng báo cáo chung về vấn đề này
- Một số người dùng cho biết tình trạng suy giảm hiệu năng đặc biệt nghiêm trọng chỉ trên GitHub, chứ không phải trên Safari nói chung
- Việc sử dụng nhiều CSS selector và
transform: translateY được mô tả là xung đột trực tiếp với giới hạn xử lý lớp GPU của Safari
- Frontend của GitHub đặt mọi dòng văn bản bằng
transform: translateY, khiến Safari phải tạo ra hàng nghìn lớp GPU
- Chrome tối ưu việc tạo layer khi không có các animation kiểu này, nên cho hiệu năng đỡ chậm hơn tương đối
- Giải pháp tạm thời là áp dụng script loại bỏ thuộc tính
transform, giúp tăng tốc nhưng độ chính xác vị trí không hoàn hảo
Trải nghiệm người dùng và các báo cáo khác nhau
- Nhiều người dùng than phiền rằng trong PR, mọi tương tác như thêm reviewer, thêm nhãn, sửa mô tả PR đều bị trễ hơn vài giây
- Khi truy cập bằng Safari, UI của trình duyệt mã và tính năng tự động hoàn thành (thanh tìm kiếm, command palette, v.v.) trở nên rất chậm
- Trên iOS Safari, cũng có trường hợp ngay cả các tính năng trình duyệt như nút quay lại gốc cũng không hoạt động bình thường
- Xét về khả năng truy cập (VoiceOver), hiệu năng cũng giảm mạnh, dẫn đến tình trạng người dùng khiếm thị gần như không thể sử dụng
Thảo luận về cách khắc phục và ứng phó
- Phía WebKit (engine của Safari) gần đây đã triển khai một phần bản vá cho vấn đề hiệu năng CSS/compositor liên quan, nhưng rất khó khắc phục ngay trước bản phát hành Safari tiếp theo
- Có đề cập rằng cần chủ động đề xuất cách xử lý lỗi và trao đổi sớm về vấn đề hiệu năng với các kỹ sư GitHub trước khi bản Safari tiếp theo được phát hành
- Nhiều thay đổi UI frontend khác nhau (ví dụ: UI thay đổi tệp trong PR, các tính năng mới, v.v.) được xem là có liên hệ trực tiếp với sự suy giảm hiệu năng
- Một số người dùng chuyển hướng sử dụng Graphite.dev, GitLab hoặc bộ định tuyến giao thức tùy chỉnh (ví dụ: Finicky, Velja, v.v.) để né tránh hoặc dùng UI thay thế
Bình luận khác và mẹo từ người dùng thực tế
- Một cách lách tạm thời là sau khi tạo issue/PR trên Safari, nên dùng tính năng thêm nhãn theo kiểu bảng
- Cũng có những ý kiến bày tỏ lo ngại về CSS quá phức tạp, thay đổi trong cấu trúc kỹ thuật, xu hướng chỉ tối ưu cho Chrome, và nhấn mạnh sự cần thiết phải hỗ trợ nhiều trình duyệt
- Một số người dùng để lại bình luận chỉ trích hoặc hài hước về vấn đề hiệu năng (cần tránh tranh cãi cảm tính không cần thiết trong thảo luận)
- Có cả ý kiến nội bộ và bên ngoài cho rằng cần xem lại cách phát triển frontend cần tối ưu hiệu năng, cũng như tầm quan trọng của việc kiểm thử đa trình duyệt
Kết luận
- Những thay đổi gần đây trong cấu trúc UI của GitHub và cách dùng CSS đang xung đột với đặc tính render riêng của Safari, gây ra bất tiện nghiêm trọng trên một nền tảng cộng tác tiêu chuẩn của ngành
- Cần có nỗ lực cải thiện tích cực từ cả WebKit lẫn GitHub, và trong ngắn hạn cần ưu tiên ứng phó theo hướng lấy người dùng Safari và người dùng cần trợ năng làm trung tâm
- Đây là vấn đề hiệu năng nghiêm trọng đến mức ảnh hưởng trực tiếp tới công việc phát triển, khiến sự đồng cảm lẫn sự phẫn nộ trong cộng đồng tăng mạnh
1 bình luận
Ý kiến trên Hacker News
Website của Github nhìn chung chỗ nào cũng chậm. Khó có thể xem đây là phần mềm tốt xét về hiệu năng hay UX/UI, và tạo cảm giác như một sản phẩm được ghép lại từ KPI và kế hoạch của nhiều người. Bản thân việc nó là một mạng xã hội cho lập trình viên có lẽ là phần “đổi mới” nhất, còn với công việc phát triển hằng ngày thì lại quá tầm thường đến mức khiến người ta cảm thấy Gitlab tốt hơn hẳn. Vấn đề này không phải do Rails, và tôi không nghĩ việc khoác lên nó một lớp vỏ công nghệ để né tránh bản chất là đúng đắn
Nhóm WebKit đã áp dụng bản cải thiện cho vấn đề hiệu năng của Github trong 2 ngày qua liên kết liên quan. Trong nhóm họ thậm chí còn tạo các PR khổng lồ (hơn 1000 file), và đồng nghiệp thường nói kiểu “khi nào mở được thì tôi sẽ duyệt” trong lúc chờ PR tải xong
Ngay sau khi Microsoft mua lại Github, Github gần như lập tức chuyển sang kiểu render bằng JavaScript (SPA). Trước đây trên Mac Mini 2011, ngay cả khi tắt JavaScript vẫn có thể duyệt Github, còn hiện tại thì dù bật JS cũng không thể dùng Github do vấn đề tương thích với trình duyệt cũ. Khó nói bên nào đáng trách hơn, nhưng tôi nghĩ cả hai phía đều có trách nhiệm. Có thể đổi sang thiết bị mới hơn, nhưng trong bối cảnh người ta cố tình từ bỏ hỗ trợ thiết bị cũ và áp đặt planned obsolescence thay vì ưu tiên tính bền vững về lâu dài, tôi có cảm giác ngay cả niềm tin vào tiêu chuẩn web cũng đang lung lay
Có nhiều chỉ trích nhắm vào React, nhưng vấn đề lần này là lỗi
CSS transform. Tôi khuyên nên đọc kỹ nội dung ở liên kết liên quanTôi khuyên nên chuyển sang Forgejo, Codeberg, SourceHut. So với Github và Gitlab thì chúng nhanh như chớp Forgejo / Codeberg / SourceHut
Tôi thắc mắc tại sao trong các tổ chức lớn những vấn đề như vậy cứ lặp đi lặp lại. Hẳn họ phải phát hiện rõ vấn đề hiệu năng trong các bài test trên những trình duyệt chính, nên thật khó hiểu khi lại có ai đó phê duyệt cho triển khai bằng mọi giá
Là một lập trình viên React, nhìn thread này tôi cảm nhận rõ sự căm ghét của thế giới. Có rất nhiều cạm bẫy của SPA: lịch trình phi thực tế, rồi cả logic backend cũng bị đẩy sang frontend. Tôi tự hỏi liệu React bản thân nó có phải là lựa chọn sai không, hay có những ứng dụng React thực sự được làm tốt
Có cảm giác mọi thứ trong toàn bộ lĩnh vực điện toán đều chậm đi. Dù dùng Mac Studio M4 Max mới nhất với 64GB RAM, mọi website vẫn chậm hơn so với thời MacBook Pro 2011
Tôi thường nghe trên HN rằng Github chậm đi vì họ migrate UI sang React, nhưng không biết có thực sự như vậy không. Với các dự án nhỏ thì tôi chưa thấy ảnh hưởng, nên muốn tìm bằng chứng rõ ràng hơn
Không chỉ Safari, Github còn cực kỳ chậm cả trên Firefox; spinner tải xuất hiện khắp nơi và chuyển trang cũng lâu hơn trước. Tôi thật sự không hiểu họ đã dựa vào chỉ số nào để thay SSR vốn hoạt động hoàn hảo bằng SPA