Làm chủ Next.js từ kinh nghiệm thực chiến của các anh tài công nghệ Sun*

Những năm trở lại đây, Next.js đã trở thành một công cụ đắc lực và không thể thiếu đối với các lập trình viên tại Sun*. Với Next.js, chúng ta có thể xây dựng ứng dụng web đa nền tảng (cross-platform) với khả năng tương thích với nhiều loại thiết bị và trình duyệt khác nhau, đồng thời hỗ trợ các tính năng tuyệt vời giúp tối ưu hóa hiệu suất của ứng dụng. Next.js hiện nằm trong nhóm các công nghệ mũi nhọn của Sun*, được các lập trình viên tích cực khai phá, hướng tới mục tiêu đa dạng năng lực công nghệ, tăng cường khả năng làm chủ sản phẩm, trở thành những “Người đồng hành đích thực” với business khách hàng.

Trong bối cảnh công ty đang liên tục đẩy mạnh mục tiêu đồng hành cùng business khách hàng thông qua hàng loạt giải pháp và sáng kiến sáng tạo, việc sẵn sàng học hỏi, linh hoạt công nghệ giúp sản phẩm trở nên vượt trội hơn so với kỳ vọng của khách hàng không còn là lựa chọn, mà đã trở thành một nhiệm vụ cấp thiết. Đối với các lập trình viên Sun*, hiểu và sử dụng thành thạo các ngôn ngữ trong Tech White Paper được xem là một trong những hành động mục tiêu, tăng khả năng làm chủ sản phẩm, từ đó thể hiện rõ hơn vai trò đồng hành với business khách hàng của một Digital Creative Studio thực thụ. 

Đôi nét về Next.js

Next.js là một framework phát triển web dựa trên React, cung cấp các tính năng mạnh mẽ như Server-Side Rendering (SSR), Static Site Generation (SSG) và nhiều tính năng khác giúp tăng tốc độ tải trang và nâng cao trải nghiệm người dùng. Với sự hỗ trợ từ cộng đồng React đông đảo và nhiều thư viện được phát triển liên tục, Next.js ngày càng trở thành lựa chọn hàng đầu của các lập trình viên web hiện đại. 

Next.js hiện nằm trong nhóm các công nghệ mũi nhọn của Sun*. Sức hấp dẫn và độ phổ biến của Next.js là không bàn cãi. Nhưng khả năng tối ưu hóa framework này, áp dụng thành công trong công việc như thế nào mới là điều cần thảo luận thêm. Đó là lý do, Next.js được lựa chọn là framework tiếp theo được đề cập đến trong series “Chinh phục công nghệ” của Sun* News. 

Để trả lời cho câu hỏi tối ưu hóa hiệu suất khi sử dụng Next.js như thế nào, chúng ta sẽ cùng nhau gặp gỡ 4 “anh tài” Next.js của Sun*, những người đã có nhiều kinh nghiệm thực chiến và nỗ lực không ngừng khai phá tiềm năng của framework này qua các dự án. Họ sẽ giúp các bạn có thêm những góc nhìn cụ thể và bí quyết tiên tiến nhất khi áp dụng Next.js vào công việc.

Xuân Thắng (CEV03): “Đơn giản và phức tạp là 2 thứ tồn tại song song trong Next.js, bạn cần nắm vững kiến thức trước khi áp dụng.”

Tại thời điểm Next.js ra mắt, nó cung cấp rất nhiều tính năng giải quyết được hạn chế của React (bản thân mình vốn rất thích React), đó là lý do vì sao mình lựa chọn Next.js cho các dự án chinh chiến và hứng thú khi sử dụng framework này. 

Về cơ bản, Next.js sẽ dễ tiếp cận đối với các bạn đã có kiến thức sẵn về React, vì cách làm việc với Next.js sẽ không quá khác biệt so với React thuần. Bản thân Next.js có ưu điểm nổi bật là hỗ trợ giải quyết nhiều vấn đề kĩ thuật như: cung cấp SSR - tối ưu cho SEO, routing đơn giản hơn React thuần, tích hợp sẵn API Routes và nhiều vấn đề khác. Điểm cộng nữa là Next.js có một cộng đồng lớn có thể hỗ trợ bạn khi gặp issue, và cũng có rất nhiều thư viện được cộng đồng cung cấp để bạn tham khảo. 

Càng đào sâu, các bạn sẽ càng thấy Next.js có rất nhiều thứ cần phải nắm vững. Vì nó cung cấp các tính năng hỗ trợ nhiều hơn nhiều so với React thuần, nên để có thể hiểu và sử dụng thuần thục các khía cạnh và vấn đề của Next.js các bạn sẽ cần có thời gian để trải nghiệm và nghiên cứu. 

Một số lưu ý khi dùng Next.js: 

  • Next.js có thể trông rất hợp lí, cung cấp nhiều thứ tiện lợi, tuy nhiên có thể nó sẽ không phù hợp cho tất cả các dự án, không phải tất cả dự án đều yêu cầu SEO, SSR, cho nên cần được đánh giá kĩ khi lựa chọn công nghệ cho dự án để giảm effort triển khai, vì việc coding có thêm SSR sẽ phức tạp hơn so với việc chỉ sử dụng CSR.
  • Cẩn trọng khi sử dụng Next.js từ phiên bản 13 trở đi. Next.js sẽ cung cấp 2 loại Router: App Router và Page Router. Vì 2 loại này ban đầu nhìn thì rất giống nhau, tuy nhiên nó khác nhau rất nhiều, để lựa chọn sử dụng cái nào trong trường hợp nào, các bạn nên tìm hiểu, đọc kĩ về 2 loại Router này để tránh trường hợp sẽ phải thay đổi toàn bộ source code của dự án vì đã lựa chọn sai loại Router tại thời điểm khởi tạo dự án. Next.js có 2 phiên bản Router, mà document của chúng cũng khác nhau, khi đọc tài liệu hoặc khi research một vấn đề của Next.js, bạn nên để ý đoạn document đó đang nằm ở page của Router nào, nếu không có thể bạn sẽ đọc document sai chỗ và tốn thời gian tìm hiểu tại sao code của mình không hoạt động.

Next.js hiện tại vẫn là một framework được tính là tuổi đời còn trẻ, với sự hỗ trợ của cộng đồng cũng như tài trợ của nhiều tổ chức lớn, vẫn còn rất nhiều đất để phát triển. Với việc cung cấp nhiều tính năng, Next.js vẫn là một lựa chọn hàng đầu đối với các dự án sử dụng React, tuy nhiên cũng vì độ phức tạp của nó, Next.js có thể sẽ phải cải thiện hơn để dễ tiếp cận hơn.

Đối với các bạn dự định học Next.js, mình có 1 số lời khuyên như sau:

  • Trước tiên, các bạn cần nắm vững React trước như là một nền tảng cho bản thân để có kiến thức nền vững chắc khi tiếp cận với Next.js.
  • Tiếp theo là cần kinh nghiệm: Vì Next.js có rất nhiều thứ cần phải nắm, các bạn nên làm nhiều để có thể va chạm với các vấn đề, từ đó thực hành xử lý giải quyết các vấn đề xuất hiện. Việc thực chiến sẽ giúp bạn hiểu Next dễ hơn và giúp bạn nhớ lâu hơn.
  • Một lời khuyên đối với các bạn mới là hãy từ từ tìm hiểu và nắm vững từng phần một của Next.js: Next.js có thể đơn giản, đôi khi rất phức tạp, nhưng khi bạn nắm vững các cấu trúc của Next.js, bạn sẽ biết phương án có thể xử lí khi gặp vấn đề.

Đức Duy (CEV02): "Làm tốt những điều cơ bản và để ý bảo mật"

Khi nghe 1 framework có tích hợp React.js - khai sinh bởi Facebook thì ai cũng sẽ hứng thú thôi nhỉ?! Mình cũng bắt đầu với Next.js từ sự hứng thú đó!  

Ưu điểm mình thích nhất của Next.js là app router. Hồi đang học React.js, mình thấy việc cài đặt router khá rắc rối và mất thời gian, còn với app router thì mọi thứ trở nên rất dễ dàng và dễ làm quen với người mới. Nhược điểm duy nhất với mình là cần server Node.js để vận hành, điều này làm tăng chi phí và triển khai phức tạp hơn.

Next.js vốn mang lại hiệu suất cao, nên ngay cả khi bạn chỉ code bình thường, ứng dụng Next.js của bạn cũng đã rất nhanh, nên vấn đề hiệu suất hầu hết là những vấn đề chung ở cả React.js.

Mình từng tham gia 1 dự án mà trang chủ load xong đã tốn khoảng 10s, sau đó mọi thao tác đều giật lag. Sau khi điều tra thì có nhiều vấn đề, 2 nguyên nhân chính. 1 là phần table ngốn rất nhiều html, số thẻ html riêng trong table đã lên tới vài trăm nghìn. Nguyên nhân thứ 2 là nhiều hàm fetch thực hiện bởi useEffect với nhiều dependencies, do quản lý không tốt dẫn đến useEffect chạy vô số lần.

Giải pháp là, với table phải áp dụng virtualize, bạn có thể tìm hiểu thêm bằng cách search từ khoá như "react virtualized", hiểu đơn giản thì thay vì render 1 lúc toàn bộ html, giờ chỉ scroll tới đâu mới render tới đó, thư viện virtualize có nhiều nhưng không phải lúc nào UI cũng áp dụng trực tiếp được, còn tuỳ thuộc UI, bạn nên code "tay" giúp hiểu cách hoạt động để với UI nào cũng làm được, nó không chỉ áp dụng cho table, mà còn cả list, masonry, thậm chí cả với pdf viewer. Còn với useEffect, giải pháp là hạn chế fetch dữ liệu cách này, cái hay là nếu bạn có nhiều component cần gọi 1 hàm fetch, chỉ cần 1 useEffect duy nhất kiểm tra dependencies là các params thay đổi thì fetch, nhưng với hơn 10 dependencies thì sao? Thay vào đó hãy làm cơ bản là tạo 1 hàm fetch và gọi khi cần, dù có thể phải truyền qua nhiều lớp component, gửi vào nhiều params, nhưng chắc chắn sẽ không gặp lỗi, và khi tìm kiếm cũng dễ hơn.

Một số lưu ý khi dùng Next.js: 

  • Xung đột css, hầu hết các dự án đều sử dụng 1 thư viện UI làm base, nhưng khi cần custom nhiều rất dễ bị xung đột css, vì thư viện UI nhiều mà cách triển khai css cho Next.js cũng nhiều, các bạn có thể tìm hiểu với từ khoá như "Styling methods in Next.js", nên cần tìm hiểu kĩ trước khi áp dụng.
  • Phần lớn không kiểm tra hiệu suất trong quá trình phát triển, dù có thể test rất nhanh bằng lighthouse trên chrome nhưng chỉ đến cuối dự án nếu thấy app chậm mới đi refactor.
  • Không để ý nâng cao bảo mật, khách hàng yêu cầu thì mới làm.
  • “Quên" không sử dụng next/image, tuy đây là ưu điểm nổi bật và rất cơ bản của Next.js nhưng mình thấy mọi người khá ngại sử dụng vì cần truyền thêm tham số, hãy ưu tiên dùng nó.

Hiện tại, cộng đồng Next.js rất đông đảo, liên tục được cập nhật tính năng mới nên chắc chắn tương lai đây vẫn là framework top đầu cho front-end. Mình đang mong chờ Next.js phát triển thêm cho PWA, và chắc chắn là cả AI nữa.

Với chatGPT thì mọi người có thể học Next.js rất dễ dàng, trong quá trình đọc tài liệu có gì không hiểu cứ hỏi chatGPT, kèm theo là làm demo để hiểu sâu nhớ lâu nhé! 

Văn Hưng (CEV10): “Next.js nổi bật với khả năng SSR, nhưng cần cẩn trọng khi sử dụng SSR cho mọi trang.”

Mình bắt đầu tiếp cận Next.js khi tìm kiếm một giải pháp giúp tối ưu hóa SEO cho ứng dụng React. Lúc đó, mình nhận ra việc render phía server (Server Side Rendering - SSR) là điều mà React không xử lý hiệu quả. Next.js nổi bật với khả năng SSR, SSG (Static Site Generation), cùng với hệ thống routing linh hoạt, đây là yếu tố đã thu hút mình tìm hiểu sâu hơn về framework này. 

Điều khiến mình hứng thú với Next.js là sự linh hoạt của nó khi hỗ trợ cả SSR lẫn SSG, giúp ứng dụng có khả năng load nhanh hơn và SEO tốt hơn. Hơn nữa, hệ thống routing tích hợp sẵn và việc hỗ trợ tích hợp API Routes cũng giúp đơn giản hóa cấu trúc dự án mà không cần phải cài đặt nhiều công cụ phụ trợ. Bên cạnh đó, Next.js có khả năng mở rộng tốt và dễ dàng tích hợp với nhiều công nghệ khác như TypeScript, GraphQL,...

Mình đã từng thành công khi áp dụng Next.js tại dự án X-Table - từng được đề cử là dự án của năm. Dự án đã áp dụng thành công Next.js cho phía site user (consumer) đặt hàng, đây là 1 hệ thống lớn cần chịu tải nhiều, việc áp dụng và đặt Next.js là core framework giúp hệ thống tối ưu tốt mặt SEO, chịu tải tốt cũng như tăng khả năng scale trong tương lai. SSR, SSG cùng với đó là tối ưu hình ảnh với next/image giúp trang load nhanh hơn, trải nghiệm người dùng mượt mà hơn. 

Một số lưu ý khi dùng Next.js:

  • Quên tối ưu hình ảnh. Next.js có công cụ next/image để tối ưu hóa hình ảnh một cách tự động, nhưng ban đầu mình không sử dụng tính năng này, kết quả là tốc độ tải trang bị ảnh hưởng. Sau khi chuyển sang sử dụng next/image để lazy load và nén hình ảnh, trang web đã cải thiện rõ rệt về tốc độ.
  • Cẩn trọng khi sử dụng SSR cho mọi trang. SSR đem lại lợi ích về SEO, nhưng nếu không kiểm soát tốt lượng request, server sẽ bị quá tải. Bài học là sử dụng kết hợp giữa SSR và SSG tùy thuộc vào tính chất của từng trang, và sử dụng cache để giảm tải cho server.

1 số nhược điểm khác khi dùng Next.js: 

  • Quá trình build có thể trở nên phức tạp với các ứng dụng lớn.
  • Khả năng custom quá sâu đôi khi cần nhiều công sức, một số tính năng nâng cao cần thời gian làm quen, đặc biệt khi mới bắt đầu.
  • SSR có thể khiến server chịu tải cao hơn nếu không tối ưu hợp lý.

Next.js có tiềm năng rất lớn trong tương lai, nhất là khi xu hướng JAMstack và Static Site Generation tiếp tục phát triển. Việc hỗ trợ cho React Server Components và khả năng xử lý edge rendering sẽ càng làm Next.js trở thành lựa chọn hàng đầu cho các ứng dụng web phức tạp. Next.js nên tiếp tục phát triển thêm các tính năng giúp tối ưu hóa hơn nữa cho edge computing và micro-frontends. 

Bí kíp nhanh nhất để học Next.js là bắt đầu từ tài liệu chính thức của nó và thử xây dựng một dự án nhỏ từ đầu đến cuối, chẳng hạn như blog cá nhân hoặc một trang tĩnh. Sau đó, hãy khám phá dần các tính năng nâng cao như SSR, SSG, và API Routes. Việc kết hợp học qua thực hành dự án thực tế sẽ giúp các bạn tiếp thu nhanh hơn rất nhiều.

Trần Đại (CEV12): “Với tầm nhìn hoàn thiện kiến trúc React full-stack architecture, Next.js luôn là sự lựa chọn hàng đầu trong nhiều năm tới”

Mình may mắn được tiếp xúc với Next.js từ đầu năm 2019, được tham gia vào nhóm tiên phong của công ty để khám phá framework mới. Điều khiến mình hứng thú với framework này đó chính là, đối với một full-stack React framework, Next.js cho bạn khả năng làm tất cả mọi thứ để phát triển một trang Web hiện đại một cách nhanh chóng. Next.js team luôn đi đầu trong việc phát triển các tính năng mới nhất từ React, mang đến những trải nghiệm công nghệ mới tuyệt vời. Thêm nữa, document cực kì chi tiết và cộng đồng vô cùng rộng lớn giúp mọi developer tiếp cận rất nhanh.

Điểm mạnh nhất của Next.js đến từ tính năng đa dạng, ổn định, luôn dẫn đầu xu hướng, tài liệu chi tiết (có cả tutorial cho người mới), đầy đủ các ví dụ từ GitHub chính chủ và cộng đồng developer hùng hậu. Trang chủ và GitHub chính chủ Next.js là tất cả những gì bạn cần để trở thành chuyên gia Next.js

Trong những năm gần đây, mình đều ưu tiên chọn Next.js cho team dự án. Dự án gần đây nhất bọn mình đã áp dụng thành công kiến trúc mới nhất từ Next.js là Next.js app router, được trải nghiệm thực tế các tính năng mới như React server component, route handler, server action, ... mang đến cho web của bọn mình performance cực kì cao cũng như cảm giác "code rất sướng tay".

Một số lưu ý khi dùng Next.js:

  • Vừa là điểm mạnh và vừa là điểm yếu, đó là Next.js nâng cấp rất thường xuyên phiên bản, dẫn đến yêu cầu các Next.js Developer phải luôn luôn làm mới chính mình.
  • Tối ưu performance luôn là bài toán mà mọi Developer bắt buộc phải quan tâm. Nó không chỉ mang đến trải nghiệm cho end-user mà còn chứng minh được bạn đã thực sự làm chủ về tech stack đó. Với mọi dự án, sau khi các chức năng đã dần dần đầy đủ, mình đều cố gắng tìm cơ hội để đo lường performance, quality và correctness cho Web của dự án bằng tool Lighthouse, tool này tuy đơn giản nhưng lại rất lợi hại, mang lại nhiều cái nhìn về trang Web mà team đang xây dựng, từ đó team sẽ tập trung cải thiện.

Next.js vẫn đang dẫn đầu trong lĩnh vực Web framework, với tầm nhìn hoàn thiện kiến trúc React full-stack architecture, mình chắc chắn rằng Next.js luôn là sự lựa chọn hàng đầu trong nhiều năm tới. Bạn hãy thử áp dụng theo trình tự lí thuyết - thực hành - thực chiến và mình tin chắc bạn sẽ yêu Next.js.

Kết

Qua kinh nghiệm của 4 chuyên gia tại Sun Asterisk, có thể thấy Next.js không chỉ mang lại nhiều giải pháp mạnh mẽ cho các vấn đề kỹ thuật như SSR, SEO và routing, mà còn đóng vai trò quan trọng trong việc tối ưu hóa trải nghiệm người dùng. Tuy nhiên, để chinh phục Next.js, các lập trình viên cần nắm vững React trước, kết hợp lý thuyết với thực hành và liên tục cập nhật các tính năng mới.

Nếu bạn đang tìm kiếm một framework mạnh mẽ để phát triển các ứng dụng web hiện đại, Next.js chắc chắn là một sự lựa chọn đáng cân nhắc. Hãy bắt đầu từ những dự án nhỏ và dần dần khám phá các tính năng nâng cao của Next.js, để bạn cũng có thể chinh phục framework này một cách dễ dàng.

#

#Next.js

#Kinh nghiệm Next.js

#Công nghệ Sun*

#công nghệ