Khóa luận: Xây dựng website quản lý, phân chia công việc với Vue3, NestJS - ĐHSPKT TPHCM

Tìm hiểu cách xây dựng website quản lý và phân chia công việc hiệu quả với Vue3 và NestJS. Nắm bắt kiến trúc, công nghệ để tối ưu hóa quy trình dự án.

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. Khám phá giải pháp tối ưu Cách xây dựng website quản lý công việc dùng Vue3 và NestJS

Việc quản lý công việc hiệu quả là chìa khóa thành công trong môi trường làm việc hiện đại. Tuy nhiên, nhiều doanh nghiệp và nhóm làm việc vẫn đối mặt với những thách thức đáng kể trong việc theo dõi tiến độ, phân chia nhiệm vụ và duy trì sự phối hợp nhịp nhàng. Giải pháp phần mềm là một lựa chọn tất yếu, và việc xây dựng website quản lý công việc dùng Vue3 và NestJS đang nổi lên như một phương pháp mạnh mẽ, mang lại hiệu suất cao cùng khả năng mở rộng vượt trội. Sự kết hợp giữa frontend Vue3 linh hoạt và backend NestJS ổn định tạo nên một kiến trúc vững chắc, đáp ứng các yêu cầu khắt khe của một hệ thống quản lý dự án chuyên nghiệp. Bài viết này sẽ đi sâu vào cách thức và lợi ích của việc áp dụng bộ đôi công nghệ này để tạo ra một nền tảng quản lý công việc tối ưu.

1.1. Bối cảnh và thách thức trong quản lý công việc hiện đại

Trong bối cảnh toàn cầu hóa và làm việc từ xa ngày càng phổ biến, các tổ chức đối mặt với nhu cầu cấp thiết về công cụ hỗ trợ quản lý công việc hiện đại. Các phương pháp truyền thống như bảng biểu, email hoặc giao tiếp trực tiếp thường thiếu tính hệ thống, khó khăn trong việc theo dõi tiến độ thực tế và phân bổ tài nguyên hợp lý. Việc thiếu một cái nhìn tổng quan về các dự án và nhiệm vụ có thể dẫn đến trùng lặp công việc, bỏ sót deadline và giảm hiệu suất chung của nhóm. Những thách thức này đòi hỏi một hệ thống quản lý dự án tập trung, cung cấp khả năng theo dõi thời gian thực và tự động hóa các quy trình, giúp các nhóm duy trì sự minh bạch và hiệu quả trong từng giai đoạn phát triển dự án. Một nền tảng mạnh mẽ là cần thiết để vượt qua những trở ngại này, đảm bảo mỗi thành viên đều nắm rõ vai trò và trách nhiệm của mình.

1.2. Vai trò của Vue3 và NestJS trong phát triển ứng dụng web hiệu quả

Vue3 và NestJS đại diện cho sự kết hợp lý tưởng trong phát triển ứng dụng web hiện đại. Vue3, với tư cách là framework JavaScript tiến bộ cho giao diện người dùng, cung cấp một kiến trúc hiệu năng cao, linh hoạt và dễ bảo trì, đặc biệt phù hợp cho việc xây dựng ứng dụng đơn trang (SPA) với trải nghiệm người dùng mượt mà. Trong khi đó, NestJS, một framework Node.js tiến bộ cho backend, mang đến một cấu trúc mạnh mẽ, có tổ chức dựa trên nguyên tắc kiến trúc module, cho phép phát triển các API RESTful có khả năng mở rộng cao và dễ dàng bảo trì. Sự kết hợp này cho phép phân tách rõ ràng giữa frontend và backend, giúp các nhóm phát triển có thể làm việc độc lập và đồng thời, tăng tốc độ triển khai dự án. Hệ thống quản lý dự án được xây dựng trên nền tảng này sẽ thừa hưởng khả năng phản hồi nhanh chóng từ Vue3 và sự ổn định, an toàn từ NestJS.

II. Vấn đề quản lý và phân chia công việc truyền thống Cản trở hiệu suất

Các phương pháp quản lý và phân chia công việc truyền thống đã và đang bộc lộ nhiều hạn chế trong môi trường kinh doanh ngày càng phức tạp và đòi hỏi tốc độ cao. Sự thiếu hụt các công cụ chuyên biệt gây ra nhiều rào cản, ảnh hưởng trực tiếp đến năng suất và hiệu quả làm việc của các đội nhóm. Việc không có một bức tranh tổng thể về các nhiệm vụ, thiếu cơ chế theo dõi tiến độ rõ ràng, và khó khăn trong việc phối hợp giữa các thành viên là những vấn đề nan giải. Để giải quyết triệt để các tồn đọng này, cần có một sự chuyển đổi sang các giải pháp công nghệ tiên tiến, đặc biệt là việc xây dựng website quản lý công việc dùng Vue3 và NestJS như một nền tảng đồng bộ và minh bạch.

2.1. Hạn chế của các phương pháp quản lý công việc thủ công

Các phương pháp quản lý công việc thủ công, như sử dụng sổ sách, bảng tính Excel đơn giản, hay email, thường dẫn đến tình trạng thông tin rời rạc và khó kiểm soát. Khi quy mô dự án hoặc số lượng thành viên tăng lên, việc cập nhật tiến độ, phân công nhiệm vụ, và theo dõi deadline trở nên phức tạp và dễ xảy ra sai sót. Thiếu một cơ chế tự động hóa cũng làm tăng gánh nặng hành chính, tiêu tốn thời gian đáng kể vào các tác vụ lặp đi lặp lại thay vì tập trung vào công việc cốt lõi. Sự thiếu minh bạch trong giao tiếp và luồng công việc cũng là một vấn đề lớn, khiến các thành viên khó nắm bắt được vai trò của mình và tiến độ chung của dự án. Điều này cản trở sự hợp tác và làm chậm trễ quá trình ra quyết định.

2.2. Nhu cầu cấp thiết về hệ thống quản lý dự án linh hoạt

Trước những hạn chế của phương pháp truyền thống, nhu cầu về một hệ thống quản lý dự án linh hoạt, có khả năng thích ứng cao trở nên cấp thiết. Một hệ thống lý tưởng cần cung cấp cái nhìn tổng thể về mọi công việc, cho phép phân chia nhiệm vụ rõ ràng, theo dõi tiến độ theo thời gian thực và dễ dàng điều chỉnh khi có sự thay đổi. Khả năng tích hợp với các công cụ khác như lịch cá nhân (ví dụ: Google Calendar, theo bảng dữ liệu User với thuộc tính calendarSyncgoogleCalendarApiToken) là một yếu tố quan trọng, giúp người dùng đồng bộ hóa lịch làm việc và tránh bỏ lỡ các cuộc họp hoặc deadline quan trọng. Hệ thống cũng cần hỗ trợ tính năng thay đổi thông tin tài khoản, avatar, mật khẩu, và đồng bộ lịch, như mô tả trong các Usecase của tài liệu gốc. Một nền tảng như vậy sẽ góp phần nâng cao sự minh bạch, trách nhiệm và hiệu suất tổng thể của đội nhóm.

III. Frontend Vue3 Bí quyết tạo giao diện website quản lý công việc trực quan

Trong quá trình xây dựng website quản lý công việc dùng Vue3 và NestJS, giao diện người dùng đóng vai trò cực kỳ quan trọng, quyết định trải nghiệm và hiệu suất tương tác của người dùng với hệ thống. Frontend Vue3 nổi lên như một lựa chọn hàng đầu cho việc kiến tạo các giao diện trực quan, tương tác cao và dễ dàng tùy chỉnh. Với kiến trúc component linh hoạt và khả năng phản ứng mạnh mẽ, Vue3 giúp các nhà phát triển tạo ra một môi trường làm việc số thân thiện, nơi mà mọi tác vụ quản lý công việc đều được thực hiện một cách nhanh chóng và hiệu quả. Việc tập trung vào trải nghiệm người dùng thông qua Vue3 không chỉ tối ưu hóa quy trình làm việc mà còn thúc đẩy sự hài lòng và năng suất của đội nhóm.

3.1. Sức mạnh của Vue3 trong việc xây dựng ứng dụng đơn trang SPA

Vue3 mang đến nhiều cải tiến đáng kể so với các phiên bản trước, làm cho nó trở thành một lựa chọn ưu việt cho việc xây dựng ứng dụng đơn trang (SPA). Với Composition API, các nhà phát triển có thể tổ chức code một cách logic hơn, tái sử dụng các hàm và logic giữa các component hiệu quả. Virtual DOM được tối ưu hóa cùng với các thuật toán render hiệu quả giúp tăng cường tốc độ tải trang và phản hồi của ứng dụng. Điều này đặc biệt quan trọng đối với một website quản lý công việc nơi người dùng cần thao tác liên tục với nhiều dữ liệu và trạng thái khác nhau mà không muốn chờ đợi. Khả năng kết nối và tương tác mượt mà của Vue3 đảm bảo người dùng có thể thực hiện các tác vụ như tạo nhiệm vụ, cập nhật trạng thái, hoặc xem biểu đồ tiến độ một cách liền mạch, góp phần nâng cao hiệu quả tổng thể của hệ thống quản lý công việc.

3.2. Thiết kế trải nghiệm người dùng tối ưu cho hệ thống quản lý công việc

Một hệ thống quản lý công việc hiệu quả không chỉ cần có tính năng mạnh mẽ mà còn phải sở hữu trải nghiệm người dùng (UX) tối ưu. Vue3 hỗ trợ việc thiết kế các giao diện trực quan, dễ sử dụng, với các thành phần UI/UX linh hoạt như bảng Kanban, biểu đồ Gantt, hoặc danh sách nhiệm vụ có thể kéo thả. Khả năng tùy chỉnh giao diện giúp hệ thống thích nghi với các quy trình làm việc khác nhau của từng nhóm hoặc doanh nghiệp. Việc sử dụng các thư viện UI phổ biến tương thích với Vue3 cũng giúp tăng tốc độ phát triển và đảm bảo tính nhất quán về mặt hình ảnh. Một giao diện được thiết kế tốt giúp giảm thiểu thời gian học hỏi, tăng cường khả năng tiếp nhận thông tin và giảm thiểu sai sót, từ đó tối đa hóa hiệu suất của người dùng trong việc quản lý và phân chia công việc.

IV. Backend NestJS Nền tảng vững chắc cho website quản lý công việc mạnh mẽ

Để xây dựng website quản lý công việc dùng Vue3 và NestJS đạt hiệu quả cao, một backend mạnh mẽ và ổn định là không thể thiếu. Backend NestJS, với kiến trúc module, dựa trên TypeScript và lấy cảm hứng từ Angular, cung cấp một nền tảng vững chắc cho việc phát triển các API RESTful có khả năng mở rộng, dễ bảo trì và an toàn. NestJS được thiết kế để xây dựng các ứng dụng phía máy chủ hiệu quả, đáng tin cậy. Khả năng xử lý các yêu cầu đồng thời và duy trì tính toàn vẹn của dữ liệu là những yếu tố then chốt giúp NestJS trở thành lựa chọn hàng đầu cho một hệ thống quản lý dự án chuyên nghiệp. Việc áp dụng NestJS đảm bảo rằng các tính năng phức tạp của website quản lý công việc, từ xác thực người dùng đến quản lý dữ liệu nhiệm vụ, đều được xử lý một cách hiệu quả và an toàn.

4.1. Kiến trúc NestJS và vai trò của NodeJS Event Loop

NestJS xây dựng trên nền tảng Node.js, tận dụng triệt để cơ chế NodeJS Event Loop để đạt được hiệu suất cao và khả năng xử lý không đồng bộ. Theo tài liệu gốc, "NodeJS Event Loop chọn các request theo dạng một đối một: kiểm tra trong request 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. Request đơn giản và Non-blocking I/O sẽ được Event Loop xử lý và gửi phản hồi ngay lập tức." Điều này cho phép NestJS xử lý nhiều yêu cầu đồng thời mà không bị chặn, rất quan trọng đối với một website quản lý công việc nơi có nhiều người dùng truy cập và cập nhật dữ liệu cùng lúc. Kiến trúc module của NestJS cũng giúp tổ chức code rõ ràng, dễ dàng mở rộng và thêm các tính năng mới mà không ảnh hưởng đến toàn bộ hệ thống. Việc sử dụng TypeScript trong NestJS cũng mang lại lợi ích về tính an toàn của kiểu dữ liệu và khả năng phát hiện lỗi sớm.

4.2. Phát triển API RESTful bảo mật và mở rộng với NestJS

NestJS là một lựa chọn tuyệt vời để phát triển các API RESTful chất lượng cao, đóng vai trò cầu nối giữa frontend Vue3 và cơ sở dữ liệu. Với việc tích hợp các module bảo mật như Passport.js, NestJS hỗ trợ triển khai xác thực (Authentication) và ủy quyền (Authorization) mạnh mẽ, đảm bảo rằng chỉ những người dùng có quyền mới có thể truy cập và thao tác với dữ liệu. Kiến trúc dựa trên Controller, Provider và Module giúp tổ chức các endpoint API một cách có hệ thống, dễ dàng quản lý và mở rộng. Khả năng tạo các dịch vụ (Services) có thể tái sử dụng giúp giảm thiểu trùng lặp code và tăng cường tính nhất quán của API. Các API RESTful được xây dựng bằng NestJS không chỉ nhanh chóng và đáng tin cậy mà còn được thiết kế để dễ dàng tích hợp với các hệ thống bên ngoài, mở ra nhiều khả năng cho việc mở rộng tính năng của hệ thống quản lý dự án.

V. Hướng dẫn chi tiết xây dựng website quản lý công việc dùng Vue3 và NestJS Từ ý tưởng đến triển khai

Việc xây dựng website quản lý công việc dùng Vue3 và NestJS đòi hỏi sự hiểu biết sâu sắc về cả hai framework cũng như các nguyên tắc phát triển phần mềm. Từ khâu lên ý tưởng đến triển khai thực tế, mỗi bước đều cần được thực hiện một cách cẩn trọng để đảm bảo hệ thống hoạt động ổn định, bảo mật và đáp ứng đúng nhu cầu người dùng. Việc xác định các tính năng cốt lõi, thiết kế cơ sở dữ liệu và triển khai các API là những yếu tố quyết định thành công của một hệ thống quản lý dự án toàn diện. Bài viết này sẽ cung cấp cái nhìn tổng quan về quy trình và các thành phần chính cần có để hiện thực hóa một giải pháp quản lý công việc hiệu quả, đồng thời đảm bảo khả năng tùy biến và mở rộng trong tương lai.

5.1. Các tính năng cốt lõi của hệ thống quản lý công việc

Một hệ thống quản lý công việc hiệu quả cần tích hợp một loạt các tính năng cốt lõi để hỗ trợ tối đa người dùng. Theo tài liệu gốc, các Usecase quan trọng bao gồm quản lý và phân chia công việc, báo lỗi, và thay đổi thông tin tài khoản. Cụ thể, hệ thống phải cho phép người dùng tạo, chỉnh sửa, xóa và xem các nhiệm vụ. Mỗi nhiệm vụ cần có các thuộc tính như tên, mô tả, người thực hiện, thời hạn, và trạng thái (chưa bắt đầu, đang tiến hành, hoàn thành). Khả năng phân công nhiệm vụ cho các thành viên trong nhóm, theo dõi tiến độ công việc thông qua các biểu đồ trực quan, và thiết lập thông báo tự động cho các deadline sắp tới là vô cùng cần thiết. Ngoài ra, tính năng báo lỗi giúp người dùng nhanh chóng thông báo về các vấn đề phát sinh, đảm bảo quy trình làm việc không bị gián đoạn. Các tính năng này là nền tảng để website quản lý công việc hỗ trợ đắc lực cho hoạt động của đội nhóm.

5.2. Đồng bộ hóa lịch và quản lý người dùng trong website quản lý công việc

Tính năng quản lý người dùng đóng vai trò trung tâm trong bất kỳ website quản lý công việc nào, bao gồm đăng ký, đăng nhập, quản lý vai trò và quyền hạn. Đặc biệt, theo mô tả trong Usecase "Thay đổi thông tin tài khoản" và lược đồ dữ liệu, hệ thống hỗ trợ việc đồng bộ lịch cá nhân với lịch của Google, thông qua các trường calendarSync, calendarId, và googleCalendarApiToken trong bảng Users. Chức năng này cho phép người dùng tự động cập nhật các nhiệm vụ và sự kiện từ hệ thống quản lý công việc vào lịch Google cá nhân của họ, giúp tránh bỏ lỡ các công việc quan trọng. Ngoài ra, khả năng thay đổi avatar, mật khẩu, và các thông tin cá nhân khác cũng được cung cấp, nâng cao tính cá nhân hóa và bảo mật cho người dùng. Việc triển khai các tính năng này bằng Vue3 và NestJS đảm bảo trải nghiệm người dùng liền mạch và an toàn.

VI. Tiềm năng phát triển Tương lai của website quản lý công việc dùng Vue3 và NestJS

Tương lai của việc xây dựng website quản lý công việc dùng Vue3 và NestJS hứa hẹn nhiều tiềm năng to lớn, đặc biệt trong bối cảnh công nghệ đang phát triển không ngừng. Sự kết hợp giữa hai framework này không chỉ mang lại một giải pháp hiện tại mạnh mẽ mà còn mở ra cánh cửa cho những cải tiến và mở rộng trong tương lai. Khả năng thích ứng với các công nghệ mới, tích hợp các tính năng tiên tiến và duy trì hiệu suất cao sẽ là những yếu tố then chốt giúp các hệ thống quản lý dự án dựa trên Vue3 và NestJS tiếp tục dẫn đầu. Việc không ngừng tối ưu hóa và đón đầu các xu hướng phát triển ứng dụng web sẽ củng cố vị thế của giải pháp này như một công cụ không thể thiếu cho các doanh nghiệp hiện đại.

6.1. Tối ưu hiệu suất và khả năng mở rộng của hệ thống quản lý dự án

Một trong những ưu điểm nổi bật của việc sử dụng Vue3 và NestJS là khả năng tối ưu hóa hiệu suất và mở rộng quy mô một cách linh hoạt. NestJS, với kiến trúc modular và việc tận dụng Event Loop của Node.js, cho phép hệ thống quản lý dự án xử lý lượng lớn yêu cầu đồng thời mà vẫn duy trì tốc độ phản hồi nhanh chóng. Vue3 góp phần vào hiệu suất thông qua việc tối ưu Virtual DOM và khả năng render nhanh. Khi nhu cầu của doanh nghiệp phát triển, hệ thống có thể dễ dàng mở rộng bằng cách thêm các module mới vào backend NestJS hoặc phát triển thêm các thành phần giao diện người dùng bằng Vue3. Điều này giúp đảm bảo rằng website quản lý công việc không chỉ đáp ứng các yêu cầu hiện tại mà còn có thể thích nghi và phát triển cùng với sự thay đổi của tổ chức, giảm thiểu chi phí và thời gian cho việc nâng cấp sau này.

6.2. Xu hướng mới trong phát triển ứng dụng web với Vue3 và NestJS

Vue3 và NestJS đang định hình nhiều xu hướng mới trong phát triển ứng dụng web. Việc tập trung vào hiệu suất, trải nghiệm người dùng và kiến trúc module hóa sẽ tiếp tục là trọng tâm. Các tính năng như hỗ trợ WebSockets để cập nhật theo thời gian thực (real-time updates), tích hợp công nghệ AI để dự đoán nhiệm vụ hoặc tối ưu hóa lịch trình, và khả năng hỗ trợ Progressive Web Apps (PWA) để mang lại trải nghiệm ứng dụng di động sẽ ngày càng phổ biến. Vue3 sẽ tiếp tục cải thiện khả năng tương thích với các công cụ phát triển khác, trong khi NestJS sẽ củng cố vai trò của mình trong việc xây dựng các dịch vụ microservices mạnh mẽ. Việc liên tục cập nhật và áp dụng những công nghệ này sẽ giúp website quản lý công việc dùng Vue3 và NestJS không chỉ hiện đại mà còn dẫn đầu trong việc đáp ứng các yêu cầu ngày càng cao của thị trường.

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.

15/04/2026
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 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 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 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ì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 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 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 đủ