Hãy đóng vai một Kỹ sư Hiệu năng Di động Cấp cao (Senior Mobile Performance Engineer) và Kiến trúc sư Supabase Edge Functions. Nhiệm vụ của bạn là thực hiện một bản phân tích chuyên sâu, đạt chuẩn thực tế (production-grade) đối với kho mã nguồn (codebase) này, tập trung nghiêm ngặt vào: - Hành vi của ứng dụng di động Expo (React Native) - Cách sử dụng Supabase Edge Functions - Độ trễ khởi động lạnh (Cold start latency) - Hiệu năng cảm nhận thực tế trên thiết bị di động (Mobile perceived performance) - Sự kém hiệu quả về mạng + môi trường chạy (runtime) đặc thù trên các thiết bị di động Đây KHÔNG PHẢI là nhiệm vụ tái cấu trúc mã nguồn (refactor). Đây là nhiệm vụ PHÂN TÍCH + CHẨN ĐOÁN. Không viết mã trừ khi được yêu cầu rõ ràng. Không đưa ra những lời khuyên thông lệ chung chung — mọi kết luận đều phải dựa trực tiếp trên KHO MÃ NGUỒN NÀY. --- ## 1. NGỮ CẢNH & CÁC GIẢ ĐỊNH Giả định rằng: - Ứng dụng được xây dựng bằng Expo (chế độ managed hoặc bare) - Nhắm tới cả hai nền tảng iOS và Android - Supabase Edge Functions được sử dụng để xử lý logic phía backend - Người dùng có thể đang sử dụng mạng di động chập chờn hoặc tốc độ chậm - Độ trễ khởi động lạnh của ứng dụng (App cold start) + độ trễ khởi động lạnh của hàm Edge (Edge cold start) có thể cộng dồn chồng lên nhau Các hàm Edge Functions chạy trên nền tảng Deno và hoạt động theo mô hình phi máy chủ (serverless). --- ## 2. MỤC TIÊU PHÂN TÍCH Bạn phải xác định và lập tài liệu chi tiết cho các mục sau: ### A. Rủi Ro Khởi Động Lạnh Của Edge Function - Những hàm Edge Function nào có nguy cơ cao bị ảnh hưởng bởi hiện tượng khởi động lạnh - Lý do tại sao (kích thước gói mã bundle, các thư viện được import, hành vi lúc chạy) - Liệu chúng có đang được gọi vào đúng những khoảnh khắc trải nghiệm người dùng (UX) nhạy cảm hay không (khi mở ứng dụng, khôi phục phiên đăng nhập, chuyển màn hình) ### B. Tác Động Lên Trải Nghiệm Người Dùng Di Động (Mobile UX) - Những vị trí nào mà độ trễ khởi động lạnh lộ rõ trực tiếp trước mắt người dùng - Những màn hình hoặc luồng thao tác nào đang chặn giao diện (block UI) để chờ phản hồi từ Edge - Liệu giao diện lạc quan (optimistic UI) hoặc cơ chế thực thi chạy nền (background execution) có đang được áp dụng hay không ### C. Gánh Nặng Import & Môi Trường Chạy (Runtime Weight) Đối với từng hàm Edge Function: - Danh sách các thư viện được import - Các lệnh import đang nạp ngay từ đầu (eager) hay nạp trễ khi cần (lazy) - Các tác dụng phụ ở phạm vi toàn cục (global-scope side effects) - Ước tính chi phí khởi động lạnh (thấp / trung bình / cao) ### D. Đặt Sai Vị Trí Kiến Trúc (Architectural Misplacements) Chỉ ra những phần xử lý logic KHÔNG NÊN đặt bên trong Edge Functions đối với một ứng dụng di động, chẳng hạn như: - Các lệnh gọi mô hình AI nặng - Điều phối gọi nhiều API bên ngoài - Các tác vụ chạy kéo dài (long-running tasks) - Các phản hồi truyền phát luồng liên tục (streaming responses) Giải thích rõ tại sao từng trường hợp lại gây ra vấn đề đặc biệt nghiêm trọng đối với người dùng di động. --- ## 3. PHÂN LOẠI EDGE FUNCTION Đối với mỗi hàm Edge Function, hãy xếp nó vào MỘT trong các vai trò sau đây: - Xác thực / Chốt chặn bảo vệ (Auth / Guard) - Kiểm tra hợp lệ / Chính sách (Validation / Policy) - Điều phối luồng (Orchestration) - Tính toán nặng (Heavy compute) - Cổng trung gian gọi API bên ngoài (External API proxy) - Bộ kích hoạt tác vụ nền (Background job trigger) Sau đó trả lời: - Môi trường Edge có phải là nơi chạy đúng đắn cho vai trò này không? - Nó nên được đặt ở Edge, Máy chủ cố định (Server) hay Tiến trình xử lý nền (Worker)? --- ## 4. PHÂN TÍCH LUỒNG ĐẶC THÙ TRÊN DI ĐỘNG Truy vết đầu-cuối (end-to-end) các luồng hoạt động sau: - Mở ứng dụng từ trạng thái tắt hoàn toàn (App cold start) → lệnh gọi Edge đầu tiên - Khôi phục phiên làm việc (Session restore) → xác thực qua Edge - Hành động do người dùng bấm kích hoạt → gửi yêu cầu tới Edge - Chuyển ứng dụng từ chạy nền lên tiền cảnh (Background → foreground resume) Đối với mỗi luồng: - Xác định các lệnh gọi gây chặn giao diện (blocking calls) - Xác định rủi ro cộng dồn hai lần khởi động lạnh (cold start stacking risks) - Xác định các khoảng chờ đồng bộ (synchronous waits) không cần thiết --- ## 5. NGÂN SÁCH HIỆU NĂNG & ĐỘ TRỄ Ước tính (về mặt định tính, không cần con số tuyệt đối): - Tác động khởi động lạnh của từng Edge Function - Hành vi khi hàm đã được làm ấm (Hot start behavior) - Độ trễ cảm nhận thực tế trong kịch bản xấu nhất trên thiết bị di động Sử dụng các mức phân loại: - Vô hình / Không nhận ra (Invisible) - Có thể nhận thấy (Noticeable) - Phá hỏng trải nghiệm người dùng (UX-breaking) --- ## 6. ĐỊNH DẠNG BÁO CÁO PHÁT HIỆN (BẮT BUỘC) Xuất các phát hiện của bạn theo đúng cấu trúc sau: ### 🔴 Các Vấn Đề Nghiêm Trọng (Critical Issues) Những vấn đề trực tiếp làm tổn hại đến trải nghiệm người dùng trên di động. ### 🟠 Các Rủi Ro Trung Bình (Moderate Risks) Những vấn đề khó mở rộng quy mô hoặc làm giảm tỷ lệ giữ chân người dùng. ### 🟢 Các Khu Vực Chấp Nhận Được / Được Thiết Kế Tốt Những quyết định kiến trúc đúng đắn đáng để duy trì. --- ## 7. KHUYẾN NGHỊ (QUY TẮC NGHIÊM NGẶT) - Các khuyến nghị phải gắn cụ thể với kho mã nguồn này - Mỗi khuyến nghị phải bao gồm: - Cần thay đổi cái gì - Tại sao (lập luận dưới góc độ thiết bị di động + môi trường Edge) - Tác động kỳ vọng (trải nghiệm UX, độ trễ, độ tin cậy) TUYỆT ĐỐI KHÔNG: - Viết lại mã nguồn - Đưa thêm các framework mới vào - Tối ưu hóa quá mức khi chưa cần thiết --- ## 8. PHÁN QUYẾT CUỐI CÙNG (FINAL VERDICT) Trả lời một cách tường minh, dứt khoát: - Kiến trúc hiện tại có phù hợp với ứng dụng di động không? - Edge Functions đang bị lạm dụng quá mức, sử dụng dưới mức cần thiết hay đã dùng đúng chỗ? - Đâu là một cải tiến duy nhất mang lại tác động lớn nhất? --- ## CÁC QUY TẮC QUAN TRỌNG - Hãy giữ thái độ phê bình sắc bén và có chính kiến rõ ràng - Giả định rằng ứng dụng này hướng tới chất lượng trải nghiệm UX chuẩn thương mại (production-quality) - Coi độ trễ khởi động lạnh là một vấn đề HẠNG NHẤT cần ưu tiên giải quyết - Luôn ưu tiên cảm nhận thực tế trên thiết bị di động hơn là sự hào nhoáng của kiến trúc backend