Lập Trình Viên Từ Bỏ Next.js App Router Vì Những Lỗi Thiết Kế Căn Bản

Nhóm Cộng đồng BigGo
Lập Trình Viên Từ Bỏ Next.js App Router Vì Những Lỗi Thiết Kế Căn Bản

Hệ sinh thái JavaScript không ngừng phát triển, với các framework mới hứa hẹn mang lại hiệu suất và trải nghiệm nhà phát triển tốt hơn. Next.js từ lâu đã là lựa chọn phổ biến cho các ứng dụng React, nhưng kiến trúc App Router và Server Components gần đây của nó đã khơi lên những tranh luận đáng kể. Khi các nhóm có được kinh nghiệm thực tế với các tính năng này, ngày càng nhiều lập trình viên bày tỏ sự thất vọng với những quyết định thiết kế cơ bản khiến việc phát triển web trở nên phức tạp hơn thay vì đơn giản hóa.

Server Components Tạo Ra Sự Nhầm Lẫn Thay Vì Sự Rõ Ràng

Việc giới thiệu Server Components trong Next.js nhằm mục đích cách mạng hóa cách các nhà phát triển xử lý việc truy xuất dữ liệu và kết xuất thành phần. Các thành phần này chỉ thực thi trên máy chủ, không có quyền truy cập vào các tính năng phía máy khách như useState hoặc useEffect. Lợi ích về lý thuyết bao gồm thời gian tải trang ban đầu nhanh hơn và kích thước gói JavaScript giảm. Tuy nhiên, việc triển khai thực tế đã tạo ra nhiều vấn đề hơn là giải pháp cho nhiều nhóm phát triển.

Vấn đề cốt lõi nằm ở thuật ngữ và mô hình thực thi mơ hồ. Khi cả thành phần máy chủ và máy khách đều có thể chạy về mặt kỹ thuật trên phần phụ trợ, sự phân biệt trở nên mờ nhạt và gây nhầm lẫn. Các nhà phát triển thấy mình phải điều hướng trong một hệ thống mờ đục, nơi việc xử lý dữ liệu trở nên phức tạp một cách không cần thiết, đòi hỏi các giải pháp thay thế làm mất đi mục đích của kiến trúc mới. Đường cong học tập rất dốc, và tài liệu hướng dẫn thường khiến các nhóm phải vật lộn để hiểu các khái niệm cơ bản.

Các vấn đề được báo cáo với Next.js App Router:

  • Server Components tạo ra các ranh giới thực thi gây nhầm lẫn
  • Toàn bộ trang bị mount lại trong quá trình điều hướng gây mất trạng thái
  • Các component Layout render lại không cần thiết
  • Quản lý Metadata yêu cầu các giải pháp phức tạp
  • Đường cong học tập dốc với tài liệu hướng dẫn không đầy đủ

Các Vấn Đề Hiệu Suất Trong Thực Tế Xuất Hiện

Có lẽ khía cạnh gây thất vọng nhất được các nhà phát triển báo cáo là trải nghiệm điều hướng trong các ứng dụng sử dụng App Router. Không giống như các ứng dụng một trang truyền thống, nơi việc điều hướng có cảm giác tức thời, Next.js App Router gây ra việc gắn kết lại toàn bộ trang trong quá trình chuyển đổi tuyến đường. Điều này phá hủy trạng thái thành phần hiện có và tạo ra hiện tượng nhấp nháy có thể nhìn thấy, làm giảm trải nghiệm người dùng.

Tôi thấy hành vi này cực kỳ khó chịu. Thật khó để tôi hiểu tại sao họ thậm chí còn triển khai RSC mà không sửa lỗi này.

Các tác động về hiệu suất vượt ra ngoài việc điều hướng. Các thành phần bố cục, lẽ ra phải ổn định trong quá trình chuyển đổi trang, thay vào đó lại tự kết xuất lại một cách không cần thiết. Việc kết xuất nhân tạo này buộc các nhà phát triển phải triển khai các giải pháp phức tạp để duy trì trạng thái và ngăn ngừa lỗi hình ảnh. Thứ được quảng cáo là một cải tiến hiệu suất thường dẫn đến các ứng dụng chậm hơn và ít phản hồi hơn trong thực tế.

Những Phức Tạp Trong Quy Trình Phát Triển

Sự phân tách nghiêm ngặt giữa các thành phần máy chủ và máy khách của App Router gây ra ma sát đáng kể trong quá trình phát triển. Việc quản lý siêu dữ liệu trở nên đặc biệt thách thức, vì siêu dữ liệu được cập nhật động đòi hỏi các giải pháp tạm bợ, mâu thuẫn với các mẫu thiết kế dự định của framework. Yêu cầu đánh dấu các thành phần máy khách bằng chỉ thị use client tạo ra các ranh giới nhân tạo làm phức tạp việc kết hợp thành phần.

Nhiều nhóm báo cáo rằng họ dành quá nhiều thời gian để viết lại mã hiện có cho phù hợp với kiến trúc mới thay vì xây dựng các tính năng mới. Gánh nặng tinh thần của việc liên tục quyết định thành phần nào nên là máy chủ so với máy khách, kết hợp với những hạn chế của từng loại, làm chậm tốc độ phát triển. Một số bình luận viên lưu ý rằng việc từ bỏ hoàn toàn Next.js đã dẫn đến các ứng dụng đơn giản hơn, nhanh hơn với hành vi có thể dự đoán được hơn.

Các Giải Pháp Thay Thế Được Đề Cập:

  • Vite + React Router cho các ứng dụng phía client
  • Các mẫu thiết kế truyền thống không sử dụng Server Components
  • Nuxt.js dành cho các nhà phát triển Vue.js
  • Các giải pháp định tuyến tùy chỉnh đơn giản

Phản Ứng Của Cộng Đồng Và Các Giải Pháp Thay Thế

Phản ứng của cộng đồng phát triển trước những vấn đề này rất đáng chú ý. Nhiều nhóm đang xem xét lại lựa chọn framework của họ, một số chọn các giải pháp đơn giản hơn như Vite với React Router cho các ứng dụng phía máy khách. Những người khác đang khám phá các meta-framework thay thế cung cấp các cách tiếp cận khác nhau đối với kết xuất phía máy chủ và kiến trúc thành phần.

Sự đồng thuận giữa các nhà phát triển bực bội là sự phức tạp phải được biện minh bằng những lợi ích rõ ràng. Khi một framework giới thiệu các khái niệm mới đáng kể mà không có những cải tiến tương ứng trong trải nghiệm nhà phát triển hoặc hiệu suất ứng dụng, sẽ rất khó để biện minh cho nỗ lực di chuyển. Một số nhóm đã tìm thấy thành công bằng cách đơn giản là tránh hoàn toàn Server Components, bám sát các mẫu truyền thống dễ suy luận và gỡ lỗi hơn.

Tình trạng hiện tại của Next.js App Router đóng vai trò như một lời nhắc nhở rằng các công nghệ mới phải chứng minh được giá trị của chúng trong các kịch bản thực tế. Trong khi những lợi thế về lý thuyết của Server Components rất hấp dẫn, những thách thức trong triển khai thực tế đã khiến nhiều nhóm tìm kiếm các giải pháp đơn giản hơn. Khi hệ sinh thái JavaScript tiếp tục phát triển, sự cân bằng giữa đổi mới và ổn định vẫn là mối quan tâm trung tâm của các nhóm phát triển trên toàn thế giới.

Tham khảo: One Year with Next.js App Router — Why We're Moving On