NextJS là gì? Đó là một framework dựng giao diện web, xây trên thư viện React của JavaScript. Hiểu đơn giản: nếu backend là bộ não xử lý dữ liệu, thì NextJS là phần dựng ra những gì người dùng nhìn thấy và chạm vào trên trình duyệt. Với phần mềm doanh nghiệp, nó đáng cân nhắc khi bạn cần giao diện tải nhanh, có thể được công cụ tìm kiếm đọc tốt, và đủ khung để mở rộng dần thành nhiều màn hình.
Chúng tôi dùng NextJS cho phần giao diện web, kết hợp với backend Django hoặc AdonisJS. Bài này chỉ nói NextJS giúp gì cho chủ doanh nghiệp, không đi sâu vào lập trình.
NextJS giúp gì cho phần mềm nội bộ
Phần mềm nội bộ được dùng hằng ngày, nên điều quan trọng là mượt, ổn định và dễ dùng trên mọi thiết bị.
- Chuyển trang nhanh: người dùng thao tác nhiều lần mỗi ngày, độ trễ nhỏ cộng lại thành sự khó chịu lớn
- Giao diện thống nhất: các thành phần như bảng dữ liệu, biểu mẫu, bộ lọc được dựng một lần rồi tái sử dụng, nên các màn hình trông và hoạt động giống nhau
- Dùng tốt trên điện thoại và máy tính: một cơ sở mã có thể tạo giao diện thích ứng nhiều kích thước màn hình
- Dễ thêm màn hình mới: khi bạn mở rộng thêm module, giao diện lớn lên theo cùng khuôn mẫu
NextJS giúp gì cho cổng khách hàng và trang công khai
Khác với phần mềm nội bộ, cổng khách hàng, trang tra cứu đơn hàng, hay trang đặt lịch có người dùng từ bên ngoài và đôi khi cần được tìm thấy qua Google.
NextJS cho phép dựng sẵn nội dung trang ở phía máy chủ trước khi gửi đến trình duyệt. Hai hệ quả thiết thực: trang hiện nội dung nhanh hơn, và công cụ tìm kiếm đọc được nội dung dễ dàng hơn so với trang chỉ hiện sau khi trình duyệt chạy mã. Điều này không tự động đưa bạn lên đầu kết quả tìm kiếm, vì thứ hạng còn phụ thuộc nội dung, uy tín và nhiều yếu tố khác, nhưng nó bỏ đi một rào cản kỹ thuật.
Điểm cần phân biệt: các màn hình sau đăng nhập (tức nội dung riêng tư) không cần cho Google đọc. Với chúng, lợi ích chính là tốc độ và trải nghiệm, không phải tìm kiếm.
Ghép với backend ra sao
NextJS lo giao diện, backend lo dữ liệu và nghiệp vụ. Hai phần nói chuyện qua API. Cách tách này có lợi:
- Backend được dùng chung cho web, ứng dụng mobile và Zalo Mini App
- Có thể thay đổi giao diện mà không đụng đến nghiệp vụ, và ngược lại
- Mỗi phần có kiểm thử tự động riêng, giảm lỗi khi cập nhật
Về lựa chọn backend, xem Python Django cho phần mềm doanh nghiệp và cách chia hệ thống trong bài monolith hay microservices cho doanh nghiệp vừa và nhỏ.
Khi nào không cần NextJS
Một công nghệ giao diện hiện đại không phải lúc nào cũng cần thiết. Nên cân nhắc lựa chọn đơn giản hơn trong các trường hợp:
- Công cụ nội bộ rất nhỏ: một vài biểu mẫu và danh sách có thể làm bằng giao diện dựng thẳng từ backend, ít thành phần phải bảo trì hơn
- Trang tĩnh vài trang: nếu nội dung hiếm khi đổi, một website đơn giản là đủ
- Chỉ cần ứng dụng mobile: khi người dùng chỉ ở trên điện thoại, giao diện web có thể không phải ưu tiên
- Đội nội bộ sẽ tự bảo trì bằng công nghệ khác: nên thống nhất với năng lực thực của đội đó
NextJS cũng đòi hỏi kỹ năng chuyên môn để tối ưu đúng. Một giao diện dựng bằng công nghệ tốt nhưng thiết kế kém vẫn chậm và khó dùng. Công nghệ chỉ là một phần, thiết kế trải nghiệm và hiểu nghiệp vụ vẫn là phần quyết định.
Những điều nên hỏi bên làm phần mềm
- Vì sao giao diện cần công nghệ này thay vì cách đơn giản hơn
- Giao diện có dùng được tốt trên điện thoại không
- Phần nào cần công cụ tìm kiếm đọc, phần nào không
- Khi thêm module mới, giao diện hiện có tái sử dụng được những gì
- Phân quyền hiển thị được kiểm soát ở backend hay chỉ ẩn trên giao diện (phân quyền thật phải nằm ở backend)
Câu cuối đáng chú ý: ẩn một nút trên giao diện không phải là bảo mật. Quyền thật phải được kiểm tra ở phía backend, với vai trò rõ ràng cho từng người dùng.
Bước tiếp theo
Nếu bạn đang cân nhắc một cổng khách hàng, trang tra cứu hoặc giao diện mới cho phần mềm nội bộ, hãy gửi cho chúng tôi mô tả người dùng và các thao tác chính. Chúng tôi sẽ đề xuất phạm vi cho bản đầu nhỏ rồi mở rộng dần. Tìm hiểu thêm về dịch vụ viết phần mềm theo yêu cầu, hoặc xem phần thiết kế web nếu bạn cần một website giới thiệu.


