Các nhà phát triển Next.js bày tỏ sự thất vọng ngày càng tăng với độ phức tạp của framework và tình trạng bị khóa nhà cung cấp

Nhóm Cộng đồng BigGo
Các nhà phát triển Next.js bày tỏ sự thất vọng ngày càng tăng với độ phức tạp của framework và tình trạng bị khóa nhà cung cấp

Cộng đồng phát triển web đang trải qua một làn sóng chỉ trích hướng về Next.js, một trong những React framework phổ biến nhất. Điều bắt đầu từ một bài viết blog của một nhà phát triển về khó khăn trong việc ghi log đã châm ngòi cho một cuộc thảo luận rộng hơn về độ phức tạp ngày càng tăng của framework và sự liên kết chặt chẽ với nền tảng hosting của Vercel.

Middleware và cơn ác mộng ghi log

Vấn đề cốt lõi kích hoạt cuộc thảo luận này tập trung xung quanh middleware Next.js và việc ghi log trong môi trường production. Không giống như các web framework truyền thống nơi việc thiết lập logging rất đơn giản, Next.js đưa ra những thách thức độc đáo do mô hình thực thi phức tạp của nó. Các nhà phát triển báo cáo việc dành hàng giờ để cố gắng triển khai chức năng ghi log cơ bản hoạt động trên các môi trường runtime khác nhau - edge functions, server-side rendering và client-side code.

Vấn đề xuất phát từ việc Next.js chạy code trong nhiều ngữ cảnh đồng thời. Một số code thực thi trên edge servers, một số trên traditional Node.js servers, và một số trong browsers. Điều này tạo ra sự nhầm lẫn về nơi logs thực sự xuất hiện và cách duy trì logging nhất quán trong toàn bộ vòng đời ứng dụng.

Các điểm đau phổ biến của Next.js:

  • Hạn chế về middleware: Yêu cầu file middleware duy nhất, việc kết nối chuỗi phức tạp
  • Khó khăn trong logging: Hành vi không nhất quán giữa các môi trường edge/server/client
  • Nhầm lẫn về runtime: Ngữ cảnh thực thi code không rõ ràng (edge vs server vs client)
  • Phụ thuộc vào Vercel: Các tính năng được tối ưu hóa cho hosting Vercel , gây vấn đề ở nơi khác
  • Thiếu sót tài liệu: Thiếu chi tiết về ngữ cảnh thực thi và các vấn đề tiềm ẩn

Cuộc tranh luận về vendor lock-in với Vercel

Một phần đáng kể của cuộc thảo luận cộng đồng tập trung vào những cáo buộc rằng Next.js được thiết kế có chủ ý để đẩy các nhà phát triển hướng tới các dịch vụ hosting trả phí của Vercel. Nhiều nhà phát triển báo cáo rằng các tính năng hoạt động mượt mà trên Vercel nhưng trở nên có vấn đề khi triển khai ở nơi khác. Điều này đã dẫn đến những cáo buộc rằng độ phức tạp của framework không phải là ngẫu nhiên mà là một chiến lược kinh doanh.

Kinh nghiệm của tôi với Next.js là những khía cạnh thô ráp của nó là một tính năng, không phải lỗi. Mọi thứ đều hướng về việc bạn bỏ cuộc và chỉ sử dụng hosting của Vercel

Một số nhà phát triển chia sẻ câu chuyện về việc thừa kế các dự án Next.js được liên kết chặt chẽ với hạ tầng của Vercel đến mức việc di chuyển sang các nhà cung cấp hosting khác trở nên gần như không thể, đôi khi yêu cầu viết lại hoàn toàn.

Breaking changes và sự bất ổn của API

Cộng đồng đã bày tỏ sự thất vọng với chu kỳ phát hành nhanh của Next.js và những breaking changes thường xuyên. Với phiên bản 15 vừa được phát hành, các nhà phát triển lưu ý rằng framework đã giới thiệu 15 phiên bản chính trong 8 năm, mỗi phiên bản có khả năng chứa những thay đổi không tương thích ngược. Điều này tạo ra gánh nặng bảo trì cho các dự án dài hạn và khiến các team khó có thể giữ ứng dụng được cập nhật.

Quá trình chuyển đổi từ Pages Router sang App Router đã đặc biệt gây tranh cãi. Nhiều nhà phát triển thấy Pages Router trực quan và đơn giản, nhưng App Router mới hơn giới thiệu thêm độ phức tạp mà một số cho rằng không cần thiết cho hầu hết các ứng dụng.

Lịch sử phiên bản Next.js:

  • 15 phiên bản chính được phát hành trong 8 năm (2017-2025)
  • Mỗi phiên bản chính có khả năng chứa những thay đổi đột phá
  • Phiên bản 15.5 đã thêm hỗ trợ middleware Node.js để giải quyết một số vấn đề

Các giải pháp thay thế đang thu hút sự chú ý

Khi sự thất vọng gia tăng, các nhà phát triển ngày càng khám phá các lựa chọn thay thế. React Router v7 (trước đây là Remix) đang trở nên phổ biến với cách tiếp cận đơn giản hơn đối với server-side rendering mà không có các lớp trừu tượng làm phức tạp Next.js. SvelteKit cũng được đề cập thường xuyên như một tùy chọn thân thiện với nhà phát triển hơn với khả năng self-hosting tốt hơn.

Một số nhà phát triển đang quay trở lại với các cách tiếp cận truyền thống hơn, kết hợp các ứng dụng frontend và backend riêng biệt sử dụng các công nghệ đã được thiết lập như Django, Rails, hoặc Express.js với React single-page applications. Sự tách biệt này cung cấp các ranh giới rõ ràng hơn và việc debug dễ dàng hơn so với cách tiếp cận pha trộn của Next.js.

Các Lựa chọn Thay thế Next.js Phổ biến Được Nhắc đến:

  • React Router v7 (trước đây là Remix): Mô hình request/response đơn giản hơn
  • SvelteKit: Khả năng self-hosting tốt hơn, trải nghiệm phát triển sạch sẽ hơn
  • Astro: Tạo trang web tĩnh với component islands
  • Phân tách truyền thống: Backend Django/Rails + frontend React SPA
  • HTMX + Alpine.js: Phương pháp JavaScript tối giản để nâng cao HTML

Sự mệt mỏi rộng hơn với JavaScript Framework

Sự chỉ trích Next.js này phản ánh một xu hướng rộng hơn của sự mệt mỏi với JavaScript framework trong cộng đồng phát triển. Nhiều nhà phát triển có kinh nghiệm đang đặt câu hỏi liệu độ phức tạp được giới thiệu bởi các framework hiện đại có được biện minh bởi lợi ích của chúng hay không. Một số đang ủng hộ các cách tiếp cận đơn giản hơn sử dụng vanilla JavaScript, HTML và CSS, hoặc các thư viện nhẹ như HTMX để tăng cường tính tương tác.

Cuộc thảo luận cũng đã làm nổi bật tính ổn định và tuổi thọ của các framework đã được thiết lập hơn. Các nhà phát triển thường xuyên đối chiếu kinh nghiệm Next.js của họ với các hệ sinh thái trưởng thành hơn như Angular, mặc dù có sự phát triển riêng, nhưng cung cấp các đường dẫn nâng cấp rõ ràng hơn và khả năng tương thích ngược tốt hơn.

Kết luận

Trong khi Next.js vẫn được sử dụng rộng rãi và tiếp tục phát triển, những mối quan ngại ngày càng tăng của cộng đồng về độ phức tạp, vendor lock-in và tính ổn định không thể bị bỏ qua. Đối với các nhà phát triển đang cân nhắc dự án tiếp theo của họ, những cuộc thảo luận này phục vụ như những lời nhắc nhở quan trọng để đánh giá cẩn thận liệu các tính năng của framework có phù hợp với nhu cầu thực tế của họ hay không, thay vì chỉ đơn giản theo các xu hướng phổ biến.

Cuộc tranh luận cuối cùng phản ánh sự căng thẳng đang diễn ra trong phát triển web giữa các framework mạnh mẽ, giàu tính năng và các công cụ đơn giản, dễ dự đoán hơn. Khi hệ sinh thái tiếp tục trưởng thành, các nhà phát triển đang trở nên sáng suốt hơn về những đánh đổi mà họ sẵn sàng chấp nhận để có sự tiện lợi và tính năng.

Tham khảo: Next.js Is Infuriating