Khóa luận tốt nghiệp HCMUTE: Website quản lý, phân chia công việc Vue3, NestJS

Khám phá cách xây dựng website quản lý công việc sử dụng Vue3 và NestJS. Đồ án thực tế tại HCMUTE, ứng dụng công nghệ hiện đại giúp sinh viên nâng cao kỹ năng

Chuyên ngành

Công nghệ Thông tin

Người đăng

Ẩn danh

Thể loại

Khóa luận tốt nghiệp

2022

93
0
0

Phí lưu trữ

35 Point

Tóm tắt

I. Tổng quan Đồ án HCMUTE Website quản lý công việc sử dụng Vue3 NestJS

Trong bối cảnh chuyển đổi số mạnh mẽ, nhu cầu về một hệ thống quản lý công việc hiệu quả trở nên cấp thiết hơn bao giờ hết. Các tổ chức, đội nhóm luôn tìm kiếm giải pháp để tối ưu hóa quy trình làm việc, nâng cao năng suất và đảm bảo sự minh bạch. Website quản lý công việc không chỉ giúp phân chia nhiệm vụ một cách rõ ràng mà còn hỗ trợ theo dõi tiến độ, quản lý tài nguyên và giao tiếp nội bộ hiệu quả. Đồ án HCMUTE đã tập trung vào việc xây dựng một giải pháp đột phá, kết hợp các công nghệ hiện đại như Vue3 framework cho giao diện người dùng và NestJS backend mạnh mẽ. Sự lựa chọn này không chỉ thể hiện xu hướng công nghệ mà còn khẳng định khả năng giải quyết các bài toán thực tiễn phức tạp của sinh viên Công nghệ thông tin Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh.

Đề tài "Xây dựng website quản lý và phân chia công việc sử dụng Vue3 và NestJs" do sinh viên Nguyễn Trường Thịnh và Nguyễn Quang Duy thực hiện dưới sự hướng dẫn của TS. Lê Văn Vinh đã giải quyết một trong những thách thức lớn trong quản lý dự án hiện đại. Mục tiêu chính là tạo ra một nền tảng trực tuyến cho phép người dùng quản lý hiệu quả các nhiệm vụ, dự án, thời gian biểu và giao tiếp nhóm. Giải pháp này không chỉ đơn thuần là một công cụ mà còn là một bước tiến quan trọng trong việc ứng dụng công nghệ để nâng cao hiệu suất làm việc. Việc sử dụng Vue3 mang lại trải nghiệm người dùng mượt mà, trong khi NestJS đảm bảo sự ổn định, bảo mật và khả năng mở rộng cho hệ thống.

1.1. Định nghĩa và tầm quan trọng của hệ thống quản lý công việc

Một hệ thống quản lý công việc là một nền tảng phần mềm được thiết kế để giúp các cá nhân hoặc tổ chức lên kế hoạch, tổ chức, theo dõi và hoàn thành các nhiệm vụ. Nó đóng vai trò trung tâm trong việc hợp lý hóa quy trình làm việc, tăng cường sự hợp tác và đảm bảo các dự án được hoàn thành đúng thời hạn. Tầm quan trọng của website quản lý công việc được thể hiện qua khả năng giảm thiểu sự chồng chéo, tránh lãng phí thời gian và nguồn lực. Nó cung cấp cái nhìn tổng quan về tình trạng dự án, giúp xác định nút thắt và đưa ra quyết định kịp thời. Đối với các đội nhóm phân tán hoặc làm việc từ xa, một ứng dụng quản lý công việc trở thành công cụ không thể thiếu để duy trì sự kết nối và hiệu suất. Việc ứng dụng công nghệ vào quản lý công việc không chỉ là xu hướng mà còn là yếu tố sống còn để doanh nghiệp duy trì khả năng cạnh tranh trong kỷ nguyên số.

1.2. Lý do chọn Vue3 framework và NestJS backend cho dự án

Việc lựa chọn Vue3 framework cho Frontend và NestJS backend cho dự án website quản lý công việc dựa trên nhiều yếu tố kỹ thuật và hiệu quả. Vue3 mang lại hiệu suất cao hơn, kích thước bundle nhỏ hơn và cú pháp API dễ sử dụng, giúp phát triển giao diện người dùng (UI) nhanh chóng và mượt mà. Khả năng phản ứng của Vue3 giúp xây dựng các thành phần tương tác phức tạp một cách dễ dàng, nâng cao trải nghiệm người dùng khi phân chia công việc và theo dõi tiến độ.

Trong khi đó, NestJS là một framework Node.js tiến bộ, được xây dựng với TypeScript và kiến trúc Module mạnh mẽ, tương tự Angular. Nó cung cấp một cấu trúc vững chắc cho các ứng dụng phía máy chủ, đảm bảo tính bền vững, dễ bảo trì và khả năng mở rộng. Sự kết hợp giữa NestJSNodeJS EventLoop cho phép xử lý các yêu cầu không đồng bộ hiệu quả, rất phù hợp cho một ứng dụng web có lượng truy cập và tương tác cao. Đây là sự lựa chọn tối ưu để xây dựng một website quản lý công việc mạnh mẽ, ổn định và có khả năng phát triển trong tương lai.

II. Thách thức quản lý công việc truyền thống và giải pháp công nghệ

Quản lý công việc theo phương pháp truyền thống thường xuyên đối mặt với vô số thách thức, từ việc thiếu minh bạch trong phân chia công việc đến khó khăn trong theo dõi tiến độ và giao tiếp. Các công cụ thủ công như bảng tính, ghi chú giấy hoặc email thường gây ra sự nhầm lẫn, mất mát thông tin và giảm hiệu suất làm việc. Đặc biệt trong các dự án lớn, việc đồng bộ hóa thông tin giữa các thành viên, quản lý tài nguyên và thời hạn trở thành gánh nặng lớn. Các sai sót nhỏ có thể dẫn đến hậu quả nghiêm trọng, ảnh hưởng đến chất lượng dự án và chi phí. Chính vì những lý do này, việc tìm kiếm một giải pháp công nghệ toàn diện, có khả năng tự động hóa và tối ưu hóa quy trình là điều tất yếu. Website quản lý công việc không chỉ là một công cụ, mà là một chiến lược giúp các tổ chức vượt qua những rào cản này, tạo ra một môi trường làm việc hiệu quả và linh hoạt hơn.

Nhu cầu về một ứng dụng web quản lý công việc linh hoạt không ngừng tăng lên, đặc biệt trong bối cảnh làm việc từ xa và sự phân tán của các đội nhóm. Một hệ thống hiệu quả cần có khả năng tùy chỉnh, tích hợp với các công cụ khác và cung cấp cái nhìn tổng quan về toàn bộ hoạt động. Đây là động lực chính để Đồ án HCMUTE phát triển một giải pháp sử dụng Vue3 và NestJS, nhằm cung cấp một nền tảng không chỉ giải quyết các vấn đề hiện tại mà còn có khả năng thích ứng với những thay đổi trong tương lai.

2.1. Hạn chế của phương pháp phân chia công việc thủ công

Các phương pháp phân chia công việc thủ công, như sử dụng bảng tính Excel, giấy tờ hay tin nhắn điện thoại, thường tồn tại nhiều hạn chế cố hữu. Thiếu minh bạch là vấn đề lớn nhất, khi người quản lý khó có thể nắm bắt được ai đang làm gì, tiến độ ra sao. Việc cập nhật thông tin thủ công dễ dẫn đến sai sót, dữ liệu không nhất quán và thông tin lỗi thời. Khả năng theo dõi thời hạn và quản lý tài nguyên bị hạn chế, gây khó khăn trong việc dự đoán và điều chỉnh kế hoạch. Hơn nữa, việc giao tiếp qua nhiều kênh khác nhau làm giảm hiệu quả hợp tác, dễ gây ra hiểu lầm và bỏ sót thông tin quan trọng. Điều này làm giảm năng suất tổng thể của đội nhóm và tăng nguy cơ thất bại của dự án. Một website quản lý công việc sẽ giải quyết những vấn đề này bằng cách tập trung mọi thông tin vào một nền tảng duy nhất, đảm bảo tính minh bạch và dễ dàng truy cập.

2.2. Nhu cầu về ứng dụng quản lý công việc linh hoạt hiệu quả

Trong môi trường làm việc hiện đại, các doanh nghiệp cần một ứng dụng quản lý công việc không chỉ hiệu quả mà còn phải cực kỳ linh hoạt. Điều này có nghĩa là hệ thống phải có khả năng thích nghi với các quy trình làm việc đa dạng, cho phép tùy chỉnh các trường thông tin, báo cáo và quy tắc tự động. Một giải pháp lý tưởng cần hỗ trợ nhiều loại hình dự án, từ nhỏ đến lớn, và dễ dàng tích hợp với các công cụ khác như lịch cá nhân (ví dụ: Google Calendar), hệ thống giao tiếp nhóm. Khả năng truy cập từ bất kỳ đâu, trên mọi thiết bị, cũng là yếu tố then chốt, đặc biệt đối với các đội nhóm làm việc phân tán. Website quản lý công việc đáp ứng được những tiêu chí này sẽ giúp tối ưu hóa năng suất, giảm thiểu gánh nặng hành chính và cho phép nhân viên tập trung vào công việc chính, tạo ra giá trị thực sự cho tổ chức. Đồ án HCMUTE đã nhận thấy rõ nhu cầu này và cung cấp một giải pháp công nghệ tiên tiến.

III. Cách xây dựng Website quản lý công việc với Vue3 và NestJS Kiến trúc và Công nghệ

Việc xây dựng một website quản lý công việc đòi hỏi sự kết hợp giữa các công nghệ Frontend và Backend hiện đại để đảm bảo hiệu suất, khả năng mở rộng và trải nghiệm người dùng. Đồ án HCMUTE đã chọn cách tiếp cận Microservices hoặc Monolithic với cấu trúc rõ ràng, sử dụng Vue3 cho giao diện người dùng và NestJS cho phía máy chủ. Kiến trúc này phân tách rõ ràng giữa phần trình bày và phần xử lý logic nghiệp vụ, cho phép các nhóm phát triển độc lập và triển khai linh hoạt. Frontend chịu trách nhiệm về hiển thị dữ liệu và tương tác người dùng, trong khi Backend xử lý xác thực, cấp quyền, truy vấn cơ sở dữ liệu và các logic phức tạp khác. Sự tách biệt này giúp dễ dàng nâng cấp, bảo trì và mở rộng hệ thống khi có yêu cầu mới. Việc áp dụng các nguyên tắc thiết kế phần mềm tốt như SOLID và DRY cũng được chú trọng để đảm bảo chất lượng mã nguồn và tính bền vững của dự án.

Website quản lý công việc Vue3 NestJS được xây dựng trên một nền tảng vững chắc, tận dụng tối đa sức mạnh của JavaScript/TypeScript trên cả hai đầu. Điều này không chỉ giúp giảm đường cong học tập cho đội ngũ phát triển mà còn tối ưu hóa hiệu suất tổng thể của ứng dụng. Cụ thể, Vue3 mang đến các tính năng như Composition API, Teleports, Fragments giúp xây dựng các thành phần UI phức tạp một cách có tổ chức và hiệu quả. Trong khi đó, NestJS với kiến trúc mô-đun, các Decorator và Dependency Injection, tạo ra một môi trường phát triển Backend mạnh mẽ và dễ kiểm thử. Sự phối hợp nhịp nhàng giữa hai công nghệ này tạo nên một ứng dụng web quản lý công việc đáng tin cậy và có khả năng mở rộng cao, đáp ứng được các yêu cầu khắt khe của môi trường doanh nghiệp.

3.1. Tổng quan kiến trúc hệ thống Website quản lý công việc Vue3 NestJS

Kiến trúc của website quản lý công việc Vue3 NestJS theo mô hình Client-Server. Phần Frontend được xây dựng bằng Vue3, chịu trách nhiệm về giao diện người dùng (UI), hiển thị dữ liệu và xử lý các tương tác trực tiếp từ phía client. Nó giao tiếp với Backend thông qua các API RESTful hoặc GraphQL. Phần Backend được phát triển bằng NestJS, hoạt động như một máy chủ API, quản lý logic nghiệp vụ, xác thực người dùng, cấp quyền, và tương tác với cơ sở dữ liệu. NestJS cũng có thể xử lý các tác vụ phức tạp như đồng bộ lịch với Google hoặc gửi thông báo. Cơ sở dữ liệu thường là một hệ quản trị cơ sở dữ liệu quan hệ (như PostgreSQL) hoặc NoSQL, lưu trữ thông tin về người dùng, nhiệm vụ, dự án và các dữ liệu liên quan. Mô hình kiến trúc này đảm bảo tính modular, dễ dàng mở rộng và bảo trì cho toàn bộ hệ thống quản lý công việc.

3.2. Vai trò của Vue3 trong phát triển giao diện người dùng

Vue3 đóng vai trò trung tâm trong việc định hình trải nghiệm người dùng của website quản lý công việc. Với hiệu suất vượt trội và cú pháp dễ hiểu, Vue3 giúp các nhà phát triển tạo ra các giao diện người dùng tương tác, mượt mà và trực quan. Tính năng Composition API của Vue3 cho phép tổ chức logic code linh hoạt hơn, đặc biệt hữu ích cho các thành phần phức tạp trong ứng dụng quản lý công việc như bảng nhiệm vụ, biểu đồ tiến độ hay lịch. Khả năng reactivity được cải thiện giúp tối ưu hóa việc cập nhật UI, mang lại trải nghiệm không gián đoạn. Các thành phần có thể tái sử dụng (reusable components) trong Vue3 giúp tăng tốc độ phát triển và duy trì tính nhất quán cho toàn bộ giao diện của hệ thống quản lý công việc, từ trang đăng nhập đến các trang chi tiết dự án và phân chia công việc.

3.3. Tối ưu hiệu năng Backend với NestJS và NodeJS EventLoop

NestJS đóng góp quan trọng vào hiệu năng của Backend nhờ việc tận dụng tối đa NodeJS EventLoop. Theo mô tả từ tài liệu gốc, NodeJS EventLoop cho phép xử lý các yêu cầu đồng thời một cách hiệu quả mà không bị chặn (Non-blocking I/O). Khi các client gửi request, chúng được đưa vào Event Queue. EventLoop sẽ chọn các request theo thứ tự, kiểm tra xem chúng có yêu cầu hoạt động Blocking I/O hoặc tính toán phức tạp hay không. Đối với các request đơn giản, Non-blocking I/O, EventLoop sẽ xử lý trực tiếp và gửi phản hồi. Các yêu cầu Blocking I/O sẽ được giao cho Worker Pool xử lý, giảm thiểu thời gian chờ đợi trên luồng chính. Cơ chế này giúp NestJS backend của website quản lý công việc duy trì khả năng phản hồi cao ngay cả dưới tải trọng lớn, đảm bảo sự ổn định và tốc độ cho ứng dụng.

IV. Các tính năng cốt lõi và ứng dụng thực tiễn của Đồ án HCMUTE

Để đáp ứng nhu cầu thực tiễn về quản lý công việc trong các tổ chức, đồ án HCMUTE đã triển khai một loạt các tính năng cốt lõi trên website quản lý công việc của mình. Các tính năng này được thiết kế để bao quát toàn bộ chu trình quản lý từ việc tạo nhiệm vụ, phân chia công việc đến theo dõi tiến độ và báo cáo. Một trong những điểm nổi bật là khả năng tùy biến cao, cho phép người dùng điều chỉnh thông tin tài khoản, avatar và thậm chí đồng bộ lịch hệ thống với Google Calendar cá nhân. Điều này không chỉ tăng cường tính cá nhân hóa mà còn cải thiện hiệu quả làm việc bằng cách tích hợp các công cụ quen thuộc.

Hệ thống cũng chú trọng đến sự thuận tiện và minh bạch. Người dùng có thể dễ dàng thay đổi mật khẩu, cập nhật thông tin cá nhân. Đối với việc quản lý các vấn đề phát sinh, tính năng gửi báo lỗi được tích hợp trực tiếp, giúp đội ngũ hỗ trợ nhanh chóng tiếp nhận và xử lý. Mục tiêu của website quản lý công việc Vue3 NestJS là cung cấp một giải pháp toàn diện, không chỉ giúp người dùng tổ chức công việc cá nhân mà còn hỗ trợ mạnh mẽ cho việc hợp tác nhóm và quản lý dự án hiệu quả. Các tính năng này được xây dựng trên nền tảng kỹ thuật vững chắc, đảm bảo độ tin cậy và khả năng mở rộng trong tương lai. Việc áp dụng các công nghệ tiên tiến như Vue3NestJS đã góp phần tạo nên một sản phẩm chất lượng, đáp ứng được các yêu cầu khắt khe của thực tế.

4.1. Chi tiết các tính năng của website quản lý công việc HCMUTE

Website quản lý công việc HCMUTE cung cấp nhiều tính năng quan trọng. Người dùng có thể tạo và quản lý các nhiệm vụ, dự án, gán thành viên, thiết lập thời hạn và ưu tiên. Khả năng phân chia công việc rõ ràng giúp mọi người biết trách nhiệm của mình. Hệ thống hỗ trợ thay đổi thông tin tài khoản, bao gồm cập nhật avatar, mật khẩu và đồng bộ lịch cá nhân với Google Lịch, như được mô tả trong Usecase "Thay đổi thông tin tài khoản". Ngoài ra, tính năng báo lỗi cũng được tích hợp (Usecase "Báo lỗi"), cho phép người dùng gửi phản hồi về các sự cố. Các tính năng này đảm bảo một trải nghiệm toàn diện cho việc tổ chức, theo dõi và hợp tác hiệu quả, biến website quản lý công việc trở thành một công cụ không thể thiếu trong môi trường làm việc số.

4.2. Thiết kế lược đồ lớp và quản lý dữ liệu hiệu quả

Thiết kế lược đồ lớp là yếu tố then chốt đảm bảo tính toàn vẹn và hiệu quả của website quản lý công việc. Tài liệu gốc giới thiệu lược đồ lớp với bảng Users là một ví dụ điển hình. Bảng Users bao gồm các thuộc tính như id (mã định danh), email, name, password (đã mã hóa), roles (vai trò người dùng) và status (trạng thái tài khoản). Các thuộc tính nâng cao như calendarSync (bật/tắt đồng bộ Google Lịch), avatarId, calendarId, và googleCalendarApiToken cho thấy sự tích hợp sâu rộng với các dịch vụ bên ngoài và khả năng tùy biến cá nhân. Việc thiết kế cơ sở dữ liệu chặt chẽ với các khóa chính, khóa ngoại và ràng buộc dữ liệu giúp hệ thống quản lý thông tin một cách có tổ chức, giảm thiểu trùng lặp và đảm bảo khả năng truy xuất dữ liệu nhanh chóng cho ứng dụng quản lý công việc.

4.3. Hướng dẫn sử dụng và báo cáo lỗi trong hệ thống quản lý

Để tối ưu trải nghiệm người dùng, website quản lý công việc cung cấp quy trình rõ ràng cho việc sử dụng các tính năng quan trọng. Ví dụ, đối với "Usecase Thay đổi thông tin tài khoản", người dùng chỉ cần chọn avatar, nhấn nút Cài đặt, sau đó thực hiện các thay đổi mong muốn như avatar, mật khẩu, hoặc thông tin cá nhân. Đối với "Usecase Báo lỗi", quy trình bao gồm truy cập trang báo cáo, nhập tiêu đề, nội dung và đính kèm tệp tin nếu cần, sau đó nhấn gửi. Các quy trình này được thiết kế để đơn giản hóa các tác vụ phức tạp, giúp người dùng dễ dàng tương tác với hệ thống quản lý công việc. Sự rõ ràng trong hướng dẫn sử dụng góp phần nâng cao hiệu quả tổng thể và sự hài lòng của người dùng đối với website quản lý công việc Vue3 NestJS.

V. Kết quả đạt được và tiềm năng phát triển của Website quản lý công việc

Sau quá trình phát triển và thử nghiệm, đồ án HCMUTE về website quản lý công việc sử dụng Vue3 và NestJS đã đạt được những kết quả đáng ghi nhận. Hệ thống không chỉ hoạt động ổn định, cung cấp các tính năng quản lý và phân chia công việc hiệu quả mà còn thể hiện được khả năng mở rộng và tùy biến cao. Giao diện người dùng được xây dựng bằng Vue3 mang lại trải nghiệm mượt mà, trực quan, giúp người dùng dễ dàng thao tác và nắm bắt thông tin. Backend với NestJS đảm bảo tính bảo mật, hiệu năng và khả năng xử lý đồng thời nhiều yêu cầu, đáp ứng tốt cho các đội nhóm có quy mô khác nhau. Sự thành công của dự án này không chỉ là minh chứng cho năng lực của sinh viên Công nghệ thông tin mà còn mở ra nhiều hướng phát triển tiềm năng trong tương lai.

Tiềm năng phát triển của website quản lý công việc Vue3 NestJS là rất lớn. Với kiến trúc module và việc sử dụng các công nghệ hiện đại, hệ thống có thể dễ dàng được nâng cấp và bổ sung các tính năng mới như tích hợp AI để gợi ý nhiệm vụ, phân tích dữ liệu hiệu suất làm việc, hoặc mở rộng sang các nền tảng di động native. Khả năng tích hợp với các hệ thống ERP, CRM khác cũng là một hướng đi đầy hứa hẹn. Đây không chỉ là một đồ án tốt nghiệp HCMUTE mà còn là một nền tảng vững chắc có thể phát triển thành một sản phẩm thương mại hoàn chỉnh, đáp ứng nhu cầu đa dạng của thị trường. Việc tiếp tục nghiên cứu và áp dụng các công nghệ mới sẽ giúp ứng dụng quản lý công việc này duy trì sự cạnh tranh và mang lại giá trị lâu dài cho người sử dụng.

5.1. Đánh giá hiệu quả và khả năng mở rộng của giải pháp Vue3 NestJS

Giải pháp website quản lý công việc Vue3 NestJS từ đồ án HCMUTE đã chứng minh hiệu quả vượt trội trong việc tổ chức và phân chia công việc. Người dùng có thể dễ dàng tạo, gán, theo dõi và hoàn thành nhiệm vụ, góp phần nâng cao năng suất tổng thể. Tính ổn định của hệ thống được đảm bảo nhờ kiến trúc chặt chẽ của NestJS, trong khi giao diện người dùng linh hoạt của Vue3 mang lại trải nghiệm tích cực. Đặc biệt, khả năng mở rộng của giải pháp này là một điểm cộng lớn. Với kiến trúc tách biệt Frontend và Backend, việc thêm module mới, tích hợp API bên ngoài hay mở rộng cơ sở dữ liệu đều có thể thực hiện một cách thuận lợi. Điều này giúp hệ thống quản lý công việc không chỉ đáp ứng nhu cầu hiện tại mà còn có thể phát triển, thích nghi với những yêu cầu phức tạp hơn trong tương lai.

5.2. Tương lai và các hướng phát triển cho ứng dụng quản lý công việc

Tương lai của website quản lý công việc dựa trên Vue3 và NestJS hứa hẹn nhiều tiềm năng phát triển. Một số hướng cải tiến bao gồm tích hợp Machine Learning để tự động gợi ý nhiệm vụ dựa trên lịch sử làm việc, phát triển các công cụ phân tích dữ liệu nâng cao để đo lường hiệu suất nhóm và cá nhân. Ngoài ra, việc mở rộng sang các nền tảng di động native bằng React Native hoặc Flutter để mang lại trải nghiệm đồng bộ trên mọi thiết bị cũng là một hướng đi cần cân nhắc. Cải thiện tính năng giao tiếp nội bộ với chat tích hợp, video conferencing, và tích hợp sâu hơn với các hệ thống quản lý tài nguyên doanh nghiệp (ERP) hoặc quan hệ khách hàng (CRM) sẽ biến ứng dụng quản lý công việc này thành một trung tâm điều hành toàn diện. Việc tiếp tục đầu tư vào bảo mật và tối ưu hóa hiệu năng cũng luôn là ưu tiên hàng đầu để hệ thống quản lý công việc duy trì vị thế dẫn đầu.

Tóm tắt và mô tả trên trang này được tạo với sự hỗ trợ của AI. Nếu bạn thấy nội dung không chính xác hoặc có vấn đề, vui lòng Báo lỗi nội dung.

14/04/2026
Đồ án hcmute xây dựng website quản lý và phân chia công việc sử dụng vue3 và nestjs

Trích đoạn nội dung tài liệu

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1. NodeJS là gì? Node là một trình biên đóng gói của Google’s V8 JavaScript engine, một nền tảng phát triển các ứng dụng web back-end được viết bằng JavaScript. NodeJS cung cấp công cụ giúp lập trình viên có thể làm việc trong non-blocking, mô hình I/O. Sau hơn 20 năm nghiên cứu, xây dựng và phát triển, nhóm kĩ sư đã cho ra đời sản phẩm ứng dụng web NodeJS[2] chạy thời gian thực và kết nối 2 chiều client và server, cho phép trao đổi dữ liệu một cách tự do.

Ngoài việc chạy trên JavaScript thì Node có những tính năng đi kèm sau: - Có trình CLI (giao diện dòng lệnh) - Chạy theo mô hình REPL - Có các hàm quản lý tiến trình - Có các đối tượng hỗ trợ làm việc với dữ liệu nhị phân - Hỗ trợ TCP và UDP - Hỗ trợ phân giải DNS - Hỗ trợ HTTP và HTTPS - Có thể truy cập file và thư mục 18 h Dưới đây là sơ đồ về các thành phần quan trọng trong NodeJS: Hình 1: Các thành phần quan trọng trong NodeJS Ta có thể sử dụng NodeJS để thực hiện các giao thức mạng cấp độ thấp một cách dễ dàng. Chẳng hạn như với module HTTP của NodeJs cho phép xây dựng một webserver chỉ với vài dòng code, tuy nhiên vì thế mà chúng ta sẽ phải học nhiều thứ hơn như học về các header của một gói tin HTTP, không như PHP vốn chỉ là một module mở rộng của một webserver có sẵn (như Apache hay NginX) – tức là PHP dễ dùng hơn NodeJS nhưng lại không cho phép các lập trình viên thực hiện các công việc ở cấp độ thấp. Tuy nhiên vì NodeJS là một framework mã nguồn mở, các tài liệu về nó cũng như thư viện hỗ trợ viết webserver rất nhiều, giúp đỡ cho các lập trình viên. Kiến trúc cơ bản của NodeJS NodeJS sử dụng kiến trúc lập trình hướng sự kiện bất đồng bộ, và đây là một tính năng làm cho các ứng dụng NodeJS có thể chạy với hiệu suất cao, phản hồi nhanh chóng.

Chẳng hạn như đối với một chương trình viết bằng C++ thì khi ta viết chương trình để đọc dữ liệu, sẽ phải dừng lại ở đoạn code đọc dữ liệu xong, nếu muốn chương trình tiếp tục vừa chạy các công việc khác vừa đọc dữ liệu thì phải dùng đến đa luồng (multi- threading), tuy nhiên việc dùng đa luồng rất phức tạp và có thể làm chậm server nếu quản lý đa luồng không tốt. Trong khi đó, NodeJS chỉ sử dụng một luồng duy nhất, các câu lệnh nhập xuất không cần phải chờ mà được thực hiện ngay lập tức bằng cách sử dụng Event Loop, cứ mỗi lần có sự kiện xảy ra thì chuyển dữ liệu của sự kiện đó đến các hàm 19 h xử lý tương ứng, và trong khi các hàm xử lý đang chạy thì vòng lặp sự kiện vẫn tiếp tục nhận sự kiện và chuyển đến các hàm xử lý tương ứng khác. Ví dụ giả sử chúng ta có dòng code lấy dữ liệu từ cơ sở dữ liệu như sau: Hình 2: Code lấy dữ liệu từ cơ sở dữ liệu Đối với các chương trình bình thường thì khi chạy đến dòng code trên, luồng chạy chương trình đó sẽ phải dừng lại để đợi quá trình xử lý từ cơ sở dữ liệu thực hiện xong và trả về rồi mới tiếp tục được, trong quá trình đợi đó sẽ có nhiều yêu cầu khác có thể xảy ra và hiệu suất phần mềm sẽ giảm do lãng phí tài nguyên, để giải quyết tình trạng đó thì ta có thể dùng cơ chế đa luồng để xử lý, tuy nhiên đa luồng có một nhược điểm làm tiêu tốn nhiều bộ nhớ và CPU và nếu chúng ta quản lý không tốt việc xử lý đa luồng có thể làm chậm server. Thay vì dùng đa luồng thì NodeJS sử dụng cơ chế Event Loop để giải quyết việc này, nói một cách đơn giản thì Node sẽ đưa các câu lệnh chờ trên vào một luồng khác là Event Loop để xử lý riêng, trong khi luồng chính vẫn sẽ chạy các công việc của riêng nó, và khi nào luồng chính “rảnh” rỗi thì luồng Event Loop sẽ chuyển các công việc đã thực hiện xong trở về lại luồng chính.

Và chính vì NodeJS chỉ sử dụng 2 luồng nên tài nguyên hệ thống sẽ không bị chiếm nhiều như khi dùng cơ chế đa luồng, ngoài ra việc viết mã sử dụng Event Loop đơn giản hơn nhiều, ví dụ: Hình 3: Ví dụ về hoạt động của NodeJs Trong đoạn mã trên, kết quả trả về từ hàm query() thay vì được gán vào một biến thì sẽ được truyền vào một hàm khác là function(err, result), và hàm này sẽ được chuyển vào luồng Event Loop và chờ cho đến khi luồng chính trống thì mới được chuyển qua. Cách thức hoạt động của NodeJS Ý tưởng chính của NodeJS là sử dụng non-blocking, hướng sự vào ra dữ liệu thông qua các tác vụ thời gian thực một cách nhanh chóng. Bởi vì, NodeJS có khả năng mở rộng nhanh chóng, khả năng xử lý một số lượng lớn các kết nối đồng thời bằng thông lượng cao. Nếu như các ứng dụng web truyền thống, các request tạo ra một luồng xử lý yêu cầu mới và chiếm RAM của hệ thống thì việc tài nguyên của hệ thống sẽ được sử dụng không hiệu quả.

Chính vì lẽ đó giải pháp mà NodeJS đưa ra là sử dụng luồng đơn (Single-Threaded), kết hợp với non-blocking I/O để thực thi các request, cho phép hỗ trợ hàng chục ngàn kết nối đồng thời. Hình 4: Cách thức hoạt động của NodeJS 21 h Tính toán nhanh như sau: giả sử mỗi một luồng đính kèm 2MB dữ liệu được gửi lên server chạy trong hệ thống với 8GB RAM hệ thống, thì có tối đa khoảng 4000 kết nối đồng thời. Tuy nhiên với NodeJS thì nó có khả năng mở rộng ra cả hàng triệu kết nối cùng lúc. Thật vậy, cơ chế của NodeJS Application xử lý Model như sau: - Client gửi request đến Web Server.

- NodeJS Web Service duy trì trong nội bộ một luồng giới hạn để cung cấp dịch vụ cho Client Request. - NodeJS Web Service nhận tất cả các request và đặt chúng vào một trong Queue. Nó được gọi là một Event Queue. - NodeJS Web Service nội bộ có một thành phần được gọi là "Event Loop".

- Event Loop chỉ sử dụng một luồng đơn để xử lý Model. - Event Loop kiểm tra tất cả các Request đặt trong Event Queue. Nếu không có request nào thì chờ request đến vô thời hạn. - Nếu có request thì sẽ lấy một request từ Event Queue: - Khởi động quá trình xử lý tiến trình từ client request.

- Nếu Client Request không chứa nhiều Blocking I/O thì xử lý tất cả mọi thứ và chuẩn bị cho quá trình gửi lại phản hồi cho phía client. - Nếu Client Request chứa nhiều Blocking I/O như việc tương tác với cơ sở dữ liệu, tập tin hệ thống, dịch vụ mở rộng, thì nó sẽ thực hiện theo các phương pháp tiếp cận khác nhau. Kiểm tra các luồng sẵn có từ nội bộ bên trong của request gửi lên. Chọn một luồng và chỉ định cho client request tương ứng với luồng đó.

Luồng đó phải có trách nhiệm với request đó, xử lý nó, thực thi các hoạt động Blocking I/O, chuẩn bị các phản hồi và gửi lại cho Event Loop. Event Loop gửi lại phản hồi tương ứng cho client. 22 h Hình 5: Cơ chế EventLoop trong NodeJS Mô tả sơ đồ như sau: - Có n số lượng client gửi request lên web service. Chúng ta giả định rằng chúng đều truy cập đồng thời vào ứng dụng Web của chúng ta - Chúng ta giả định client của chúng ta là Client-1, Client-2, Client-n - Web server của chúng ta duy trì một vùng các luồng có giới hạn và giả định rằng m là số luồng của vùng luồng đó.

- NodeJS Web service nhận các request từ client-1, client-2, Client-n và đặt chúng vào trong Event Queue - NodeJS Event Loop chọn các request theo dạng một đối một: ▪ Event Loop chọn client-1 request-1 o Kiểm tra trong client-1 request-1 có không yêu cầu bất kì hoạt động Blocking I/O hoặc mất nhiều thời gian cho việc tính toán phức tạp. 23 h o Request này thì đơn giản và Non-blocking I/O, nó không có đòi hỏi một xử lý nào riêng biệt. o Event Loop xử lý tất cả các giai đoạn để cung cấp cho hoạt động của client-1 request-1 (hoạt động ở đây nghĩa là các function của javascript) và chuẩn bị response-1. o Event Loop gửi Response-1 đến Client-1 ▪ Event Loop chọn client-2 request-2 o Kiểm tra trong client-2 request-2 có không yêu cầu bất kì hoạt động Blocking I/O hoặc mất nhiều thời gian cho việc tính toán phức tạp.

o Request này thì đơn giản và Non-blocking I/O, nó không có đòi hỏi một xử lý nào riêng biệt. o Event Loop xử lý tất cả các giai đoạn để cung cấp cho hoạt động của client-2 request-2 và chuẩn bị response-2. o Event Loop gửi Response-2 đến Client-2. ▪ Event Loop chọn client-n request-n o Kiểm tra trong client-n request-n có không yêu cầu bất kì hoạt động Blocking I/O hoặc mất nhiều thời gian cho việc tính toán phức tạp.

o Request này thì phức tạp và nhiệm vụ Blocking I/O. Event Loop thì không thể xử lý request này ngay được. o Event Loop lựa chọn Thread T-1 từ nội bộ khu vực Thread và chỉ định Client-n Request-n này ánh xạ với Thread T-1 o Thread T-1 đọc và xử lý Request-n, thực hiện Blocking IO cần thiết hoặc tính toán nhiệm vụ, và hoàn tất để chuẩn bị Response-n. o Thread T-1 gửi Response-n này đến Event Loop o Event Loop trong công đoạn này gửi Response-n này tới Client-n 24 h Tại đây Client Request thì gọi đến một hoặc nhiều function javascript.

Các function Javascript có thể gọi tới các function khác hoặc có thể sử dụng chức năng callback đặc thù. NestJS là gì ? NestJS[3] là một framework Node.JS cho phép xây dựng ứng dụng phía server. Nest mở rộng các framework Node.js như Express hay Fastify để bổ sung thêm nhiều module hay thư viện hỗ trợ việc xử lý tác vụ. Đây là một framework mã nguồn mở, sử dụng TypeScript và rất linh hoạt để xây dựng các hệ thống backend.

Lý do sử dụng NestJS: • Cho phép lập trình nhanh và hiệu quả hơn. • Khả năng mở rộng tốt, dễ bảo trì ứng dụng. • Là framework Node.js phát triển mạnh nhất trong 3 năm trở lại đây. • Cộng đồng hỗ trợ lớn, tích cực.

• Kết hợp phát triển front-end và mid-tier, một đặc điểm vượt trội so với hầu hết các ngôn ngữ khác. • Sử dụng TypeScript, cho phép thích ứng nhanh chóng với các thay đổi khi JavaScript đang ngày càng phát triển mạnh mẽ. • Nguồn tài liệu hướng dẫn phong phú, chi tiết. • Quá trình unit testing trở nên đơn giản hơn.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ