Đầu tiên khi tải một trang web bất kỳ, SPA sẽtải một trang HTML đơn, sau đó dựa trên request của người dùng, SPA sẽ tiếp tục tải cácHTML khác trong cùng một trang đó, SPA có thể sử dụng
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
XÂY DỰNG HỆ THỐNG HỖ TRỢ NGƯỜI DÙNG VIẾT BLOG VỀ CÔNG NGHỆ
NGÀNH: KHOA HỌC MÁY TÍNH
HỘI ĐỒNG: Khoa học máy tính 4 GVHD: ThS Nguyễn Đình Thành GVPB: TS Lê Hồng Trang
—o0o—
SVTH 1: Đinh Quang Trung (1814504) SVTH 2: Lê Quang Cảnh (1833011)
TP HỒ CHÍ MINH, 12/2022
Trang 5Chúng tôi xin cam đoan rằng, luận văn tốt nghiệp "Xây dựng hệ thống hỗ trợ ngườidùng viết blog về công nghệ" là công trình nghiên cứu của chúng tôi dưới sự hướng dẫncủa ThS Nguyễn Đình Thành, xuất phát từ nhu cầu thực tiễn và nguyện vọng tìm hiểucủa bản thân chúng tôi Ngoại trừ kết quả tham khảo từ các công trình khác đã ghi rõtrong luận văn, các nội dung trình bày trong luận văn này là kết quả nghiên cứu do chínhchúng tôi thực hiện và kết quả của luận văn chưa từng công bố trước đây dưới bất kỳhình thức nào.
Thành phố Hồ Chí Minh, 12/2022
Nhóm tác giả
Trang 6Đầu tiên, chúng tôi xin gửi lời cảm ơn chân thành nhất đến ThS Nguyễn Đình Thành,chính nhờ sự hướng dẫn tận tình cũng như những kiến thức khoa học mà thầy truyền đạt
đã giúp chúng tôi hoàn thành tốt nhất luận văn này
Chúng tôi cũng gửi lời cảm ơn đến các giảng viên trường Đại học Bách Khoa Thànhphố Hồ Chí Minh, đặc biệt là các thầy cô trong Khoa Khoa học và Kỹ thuật Máy tính,những người đã truyền đạt những kiến thức quý báu trong hơn bốn năm học qua
Cuối cùng, chúng tôi xin gửi lời cảm ơn tới gia đình, bạn bè, những người đã độngviên, hỗ trợ chúng tôi trong suốt thời gian hoàn thành chương trình bậc Đại học
Thành phố Hồ Chí Minh, 12/2022
Nhóm tác giả
Trang 7Xây dựng một hệ thống hỗ trợ người dùng viết và chia sẻ kiến thức về công nghệ.
Hệ thống sẽ tham khảo 1 số tính năng của các trang blog nổi tiếng như medium, noon, Hệ thống cho phép người dùng viết và chia sẻ những kiến thức của họ Các bàiviết được đăng và duyệt theo các quy trình được định nghĩa trước (có thể hỗ trợ tự độnghóa) Hệ thống có chức năng đánh giá như like, share, comment, thảo luận trên nội dungbài viết Hệ thống cần có cơ chế đánh giá, xếp hạng các bài viết theo đa dạng tiêu chí.Ngoài ra hệ thống còn có các tính năng khác như tạo chủ đề, bảng xếp hạng, xu hướng,phân loại bài theo tác giả, chủ đề, khoảng thời gian Giao diện người dùng thân thiện,
hacker-dễ thao tác với người mới sử dụng
Hy vọng với kết quả nghiên cứu này, chúng tôi sẽ đóng góp một phần vào trong cácnghiên cứu về chủ đề này về sau
Trang 81 Giới thiệu 1
1.1 Giới thiệu đề tài 1
1.1.1 Bối cảnh 1
1.1.2 Giải quyết vấn đề 1
1.2 Phạm vi đề tài 2
1.3 Mục tiêu 2
1.4 Bố cục dự kiến 2
2 Giải pháp liên quan 4 2.1 Giới thiệu một vài trang blog công nghệ 4
2.1.1 Trang Medium 4
2.1.2 Trang HackerNoon 4
2.1.3 Trang Viblo 4
2.1.4 Trang HubPages 5
2.1.5 Trang Dev.to 5
2.1.6 Trang Tinh tế 5
2.2 Phân tích chức năng chính của các trang 5
2.3 Đề xuất một số chức năng cho hệ thống 11
2.3.1 Chức năng cơ bản 11
2.3.2 Chức năng nâng cao 11
3 Cơ sở lý thuyết 13 3.1 Các công nghệ phía Client 13
3.1.1 Single Page Application 13
3.1.2 ReactJs 15
3.1.3 Framework NextJs 19
3.1.4 Trình soạn thảo văn bản với CkEditor 20
3.1.5 Thư viện Ant Design 20
3.2 Các công nghệ phía Server 21
3.2.1 Kiến trúc Restful API 21
3.2.2 Ngôn ngữ sử dụng NodeJS 23
iv
Trang 93.2.4 Cơ sở dữ liệu PostgreSQL 25
3.3 Redis 26
3.3.1 Các ứng dụng của Redis 26
3.3.2 Firebase 27
4 Bài toán và giải pháp 28 4.1 Hệ thống tự động duyệt bài 28
4.1.1 Bài toán phân loại hình ảnh 29
4.1.2 Bài toán phát hiện ngôn ngữ 31
4.1.3 Kiểm duyệt nội dung bản quyền 32
4.2 Xếp hạng bài viết 33
4.2.1 Tính điểm bài viết 33
4.2.2 Xếp hạng bài viết và tag dựa trên điểm của các bài viết 35
4.2.3 Xếp hạng bình luận 35
4.3 Hệ thống đề xuất bài viết 36
4.3.1 Giải thuật Neighborhood-based Collaborative Filtering 36
4.3.2 Áp dụng giải thuật Neighborhood-based Collaborative Filtering cho hệ thống 39
4.4 Cơ chế xếp hạng thành viên 40
5 Phân tích và thiết kế hệ thống 41 5.1 Các actor xuất hiện trong hệ thống 41
5.2 Phân tích yêu cầu nghiệp vụ 41
5.2.1 Người dùng chưa có tài khoản 41
5.2.2 Người dùng đã có tài khoản 41
5.2.3 Quản trị viên 43
5.2.4 Quản lý 43
5.3 Yêu cầu phi chức năng 44
5.4 Tổng quan usecase hệ thống 45
5.5 Đặc tả chi tiết usecase 46
5.5.1 Đăng nhập 46
5.5.2 Đăng xuất 46
5.5.3 Xem bài viết 47
5.5.4 Tìm kiếm thông tin 47
5.5.5 Xem trang cá nhân tác giả 48
5.5.6 Xem trang bảng tin 48
5.5.7 Tùy chỉnh bố cục danh sách bài viết 49
5.5.8 Tùy chỉnh chế độ tối sáng 49
Trang 105.5.10 Viết bài 50
5.5.11 Đăng bài 51
5.5.12 Lưu bản nháp 51
5.5.13 Xem dashboard 52
5.5.14 Xem/sửa thông tin cá nhân 52
5.5.15 Xem/Xóa danh sách tác giả đã theo dõi 53
5.5.16 Xem/Xóa Bookmark 53
5.5.17 Xem/xóa/sửa danh sách bài đã viết 54
5.5.18 Quản lý quy định duyệt bài 54
5.5.19 Xem bài viết 55
5.5.20 Bình luận về bài viết 55
5.5.21 Like bài viết 56
5.5.22 Báo cáo bài viết 56
5.5.23 Xem trang cá nhân của tác giả 57
5.5.24 Theo dõi tác giả 57
5.5.25 Báo cáo người dùng 57
5.5.26 Nhắn tin 58
5.5.27 Xem các báo cáo về nội dung và người dùng 58
5.5.28 Xem danh sách bài viết đã duyệt 59
5.5.29 Xem danh sách người dùng 59
5.5.30 Cấm đăng bài đối với tác giả 60
5.5.31 Xem tin nhắn của người dùng 60
5.5.32 Xem danh sách tác giả bị cấm đăng bài 61
5.5.33 Gỡ lệnh cấm đăng bài 61
5.6 Kiến trúc hệ thống 62
5.6.1 Client 62
5.6.2 Server 62
5.6.3 Database 63
5.7 Thiết kế cơ sở dữ liệu 64
5.7.1 ERD 64
5.7.2 Đặc tả bảng 65
5.8 Giao diện người dùng 71
5.8.1 Web app 71
5.8.2 Responesive 79
5.9 Quản lý mã nguồn 87
5.9.1 Github 87
5.9.2 Link github 87
5.9.3 Cấu trúc mã nguồn 88
Trang 116.1 Môi trường triển khai server backend 92
6.1.1 Triển khai database lên Neon 95
6.1.2 Triển khai redis trên Redis Enterprise Cloud 97
6.2 Kiểm thử 99
6.2.1 Phương thức kiểm thử 99
6.2.2 Công cụ kiểm thử 99
6.2.3 Đánh giá độ bao phủ của bộ testcase: 102
7 Tổng kết 105 7.1 Đánh giá kết quả đạt được 105
7.1.1 Đối với tìm hiểu quy trình nghiệp vụ 105
7.1.2 Đối với công nghệ 105
7.1.3 Đối với phân tích và thiết kế hệ thống 105
7.1.4 Kết quả hiện thực 106
7.1.5 Hạn chế 106
7.2 Hướng phát triển đề tài 107
Trang 124.1 So sánh hiệu quả giữa các mô hình trong việc phân loại hình ảnh khiêu
dâm 30
4.2 So sánh nhận diện hình ảnh bạo lực giữa các mô hình Deep learning 30
4.3 Tập dữ liệu của nhóm được sử dụng để phân loại hình ảnh 31
4.4 Bảng ví dụ ma trận Utility 37
4.5 Bảng ma trận Utility với các giá trị trung bình mỗi hàng 37
4.6 Bảng Normalized Utility Matrix 38
4.7 Bảng Similarity Matrix 38
4.8 Bảng Normalized Utility Matrix đầy đủ 39
5.1 Đặc tả quá trình đăng nhập 46
5.2 Đặc tả quá trình đăng xuất 46
5.3 Đặc tả quá trình xem bài viết 47
5.4 Đặc tả quá trình tìm kiếm thông tin 47
5.5 Đặc tả quá trình xem trang cá nhân tác giả 48
5.6 Đặc tả quá trình xem bảng tin 48
5.7 Đặc tả quá trình tùy chỉnh bố cục danh sách bài viết 49
5.8 Đặc tả quá trình tùy chỉnh chế độ tối sáng 49
5.9 Đặc tả quá trình chia sẻ bài viết 50
5.10 Đặc tả quá trình viết bài 50
5.11 Đặc tả quá trình đăng bài 51
5.12 Đặc tả quá trình lưu bản nháp 51
5.13 Đặc tả quá trình xem dashboard 52
5.14 Đặc tả quá trình Xem/sửa thông tin cá nhân 52
5.15 Đặc tả quá trình Xem/Xóa danh sách tác giả đã theo dõi 53
5.16 Đặc tả quá trình Xem/Xóa Bookmark 53
5.17 Đặc tả quá trình Xem/xóa/sửa danh sách bài đã viết 54
5.18 Đặc tả quá trình Quản lý duy định duyệt bài 54
5.19 Đặc tả quá trình Xem bài viết 55
5.20 Đặc tả quá trình Bình luận về bài viết 55
5.21 Đặc tả quá trình Like bài viết 56
5.22 Đặc tả quá trình báo cáo bài viết 56
viii
Trang 135.24 Đặc tả quá trình Theo dõi tác giả 57
5.25 Đặc tả quá trình Báo cáo người dùng 57
5.26 Đặc tả quá trình Nhắn tin 58
5.27 Đặc tả quá trình Xem các báo cáo về nội dung và người dùng 58
5.28 Đặc tả quá trình Xem danh sách bài viết đã duyệt 59
5.29 Đặc tả quá trình Xem danh sách người dùng 59
5.30 Đặc tả quá trình Cấm đăng bài đối với tác giả 60
5.31 Đặc tả quá trình Xem tin nhắn của người dùng 60
5.32 Đặc tả quá trình Xem danh sách tác giả bị cấm đăng bài 61
5.33 Đặc tả quá trình Gỡ lệnh cấm đăng bài 61
5.34 Bảng mô tả thực thể admins 65
5.35 Bảng mô tả thực thể users 65
5.36 Bảng mô tả thực thể topics 65
5.37 Bảng mô tả thực thể tags 66
5.38 Bảng mô tả thực thể articles 66
5.39 Bảng mô tả thực thể drafts 66
5.40 Bảng mô tả thực thể mediaFiles 66
5.41 Bảng mô tả thực thể tagDrafts 67
5.42 Bảng mô tả thực thể yếu reportArticles 67
5.43 Bảng mô tả thực thể yếu reportComment 67
5.44 Bảng mô tả thực thể yếu reportUsers 67
5.45 Bảng mô tả thực thể yếu comments 68
5.46 Bảng mô tả thực thể yếu AdminArticles 68
5.47 Bảng mô tả thực thể yếu feedacks 68
5.48 Bảng mô tả mối quan hệ (n:n) interactives 68
5.49 Bảng mô tả mối quan hệ (n:n) commmentLikes 69
5.50 Bảng mô tả mối quan hệ (n:n) tagArticles 69
5.51 Bảng mô tả mối quan hệ (n:n) mediaDraft 69
5.52 Bảng mô tả mối quan hệ (n:n) mediaArticles 69
5.53 Bảng mô tả mối quan hệ (n:n) recommends 69
5.54 Bảng mô tả mối quan hệ (n:n) messages 69
5.55 Bảng mô tả mối quan hệ (n:n) follows 69
5.56 Bảng mô tả thực thể notifications 70
5.57 Link repository github 87
6.1 Link các server triển khai trên Heroku 94
Trang 143.1 Hình ảnh ví dụ về single page application 14
3.2 Cấu trúc HTML DOM 16
3.3 Virtual Dom 17
4.1 Hình ảnh minh họa cho công số hạng thứ nhất 34
5.1 Sơ đồ usecase 45
5.2 Kiến trúc hệ thống 62
5.3 ERD - biểu đồ quan hệ thực thể 64
5.4 Trang chủ 71
5.5 Trang giới thiệu 72
5.6 Trang bảng tin 73
5.7 Trang tài khoản cá nhân 74
5.8 Trang quản lý tài khoản 75
5.9 Trang tạo bài viết 76
5.10 Trang danh mục 77
5.11 Trang chi tiết bài viết 78
5.12 Trang chủ responsive 79
5.13 Trang chi tiết danh mục responsive 80
5.14 Trang chi tiết bài viết responsive 81
5.15 Trang bảng tin responsive 82
5.16 Trang tài khoản cá nhân responsive 83
5.17 Trang quản lý tài khoản responsive 84
5.18 Trang tạo bài viết responsive 86
5.19 Cấu trúc mã nguồn Web app dành cho người dùng 88
5.20 Cấu trúc mã nguồn Web app dành cho admin 89
5.21 Cấu trúc mã nguồn Server chính 90
5.22 Cấu trúc mã nguồn Server xử lý bài viết 91
6.1 Bước 1 cấu hình Backend trên Heroku 92
6.2 Bước 2 cấu hình Backend trên Heroku 93
6.3 Bước 3 cấu hình Backend trên Heroku 93
6.4 Bước 4 cấu hình Backend trên Heroku 94
x
Trang 156.6 Bước 6 cấu hình Backend trên Heroku 94
6.7 Bước 1 triển khai database trên Neon 95
6.8 Bước 2 triển khai database trên Neon 95
6.9 Bước 3 triển khai database trên Neon 96
6.10 Bước 4 triển khai database trên Neon 96
6.11 Tạo 1 subscription mới bằng việc chọn New subcription 97
6.12 Bước 1 cấu hình Redis Enterprise Cloud 97
6.13 Bước 2 cấu hình Redis Enterprise Cloud 97
6.14 Bước 3 cấu hình Redis Enterprise Cloud 98
6.15 Ví dụ làm việc với postman 100
6.16 Kết quả kiểm thử với Jest 102
6.17 Kết quả độ bao phủ testcase với Jest 103
Trang 16đề tài “Xây dựng hệ thống hỗ trợ người dùng viết blog về công nghệ”.
1.1.2 Giải quyết vấn đề
Blog, gọi tắt của weblog, là một dạng nhật ký trực tuyến, bùng nổ từ cuối thập niên
1990 Các blogger (người viết blog), có thể là cá nhân hoặc nhóm, đưa thông tin lênmạng với mọi chủ đề, thông thường có liên quan tới kinh nghiệm hoặc ý kiến cá nhân1.Blog công nghệ là nơi chủ yếu cung cấp thông tin đề cập tới những chủ đề chọn lọc, liênquan đến công nghệ, dành cho đối tượng người đọc yêu thích công nghệ
Chính do blog được lập nên bởi cá nhân hoặc một nhóm người, nên đòi hỏi cá nhânhay nhóm người đó phải cập nhật xu hướng liên tục, phải nắm được các tag xu hướnghiện nay để có thể cung cấp cho người đọc cái nhìn đa chiều về thế giới công nghệ,nhưng thực tế số blog đáp ứng được điều này và còn tồn tại thì rất ít Do đó, đề tài “Xây
1 https://vi.wikipedia.org/wiki/Blog
1
Trang 17dựng hệ thống hỗ trợ người dùng viết blog về công nghệ” ra đời, cho các blogger và độcgiả có thêm sự lựa chọn, nhằm giải quyết các vấn đề mà các blog hiện nay còn thiếu:
• Blog được viết bởi bất kỳ ai đăng ký thành viên, giúp giải quyết vấn đề các nộidung luôn đảm bảo được cập nhật liên tục, và có góc nhìn đa chiều đối với cùngmột chủ đề
• Vì hoạt động như một mạng xã hội, nên vấn đề xu hướng hay các bình luận nổi bật
về các tag xu hướng hiện nay cũng sẽ được giải quyết
• Bên cạnh đó, trang còn có chức năng xếp hạng bài viết, đề xuất bài viết mới, giúpcho độc giả luôn được cung cấp thông tin kịp thời và đáng tin cậy
1.2 Phạm vi đề tài
Đối tượng sử dụng là người Việt Nam yêu thích công nghệ
Các chức năng về SEO chỉ thực hiện ở mức cơ bản, không đi quá sâu vào vấn đề này
được xử lý như thế nào, mục tiêu của luận văn là gì, mình cần làm gì để cải thiện so vớinhững giải pháp đã được đưa ra
động trên thị trường
Chương 3: Cơ sở lý thuyết, giới thiệu kiến thức cơ sở và công cụ để hiện thực các giảipháp để giải quyết vấn đề đặt ra
Trang 18Chương 4: Bài toán và giải pháp, nêu ra các bài toán trong hệ thống và cách giảiquyết.
Chương 5: Phân tích thiết kế hệ thống, tiến hành phân tích các yêu cầu nghiệp vụ vàxây dựng sơ đồ usecase, ERD, kiến trúc hệ thống cũng như cách hiện thực mã nguồn
Chương 6: Triển khai và kiểm thử, cách hệ thống được triển khai, quy trình kiểm thử
và kết quả
Chương 7: Tổng kết, đánh giá kết quả đạt được và hướng phát triển của đề tài
Trang 19Giải pháp liên quan
2.1 Giới thiệu một vài trang blog công nghệ
2.1.1 Trang Medium
Medium là một nền tảng mạng xã hội đơn giản, được xây dựng bởi nhà đồng sánglập Twitter là Evan Williams và Biz Stone Medium cho phép mọi người có thể tự đăngtải bài viết của mình trên tất cả những lĩnh vực ngành nghề và đời sống khác nhau
Ra đời vào tháng 2 năm 2012 và ngày càng thu hút cộng đồng người dùng, đặc biệt
ở nước ngoài rất nhiều người thích dùng Medium Tính đến tháng 5 năm 2017, Medium
đã có tới 60 triệu khách truy cập mỗi tháng
2.1.2 Trang HackerNoon
HackerNoon là một trong những blog công nghệ hàng đầu để tìm hiểu về lập trình,blockchain và khởi nghiệp Với hơn 7000 người viết và 200.000 người đọc hàng ngày,HackerNoon đã trở thành tiếng nói của giới công nghệ trên toàn thế giới
2.1.3 Trang Viblo
Viblo bắt đầu được tiến hành phát triển từ khoảng tháng 11/2014, từ một ý tưởngcủa anh Kobayashi Taihei, lúc đó còn đang là COO của Framgia Với phương châm "xâydựng một cộng đồng nơi mọi người có thể tự do chia sẻ kiến thức về IT, bằng tiếng Việt,cho người Việt" Viblo được biết đến là cộng đồng chia sẻ kiến thức về công nghệ thôngtin tại Việt Nam, một dịch vụ miễn phí - nơi mọi người có thể viết và đăng tải nội dungliên quan đến các vấn đề kỹ thuật
4
Trang 202.1.4 Trang HubPages
HubPages là một nền tảng blog đa trang được ra mắt vào năm 2006 Những ngườisáng lập là ba cựu nhân viên của Microsoft - Jay Reitz, Paul Deeds và Paul Edmondson.HubPages khởi đầu là một trang web duy nhất dành cho các nhà văn tự do nhưng đãđược mở rộng vào năm 2014 sau khi tiếp quản và sáp nhập với Squidoo
Là một nền tảng có nội dung do người dùng tạo ở cốt lõi của mô hình kinh doanh,HubPages cũng cho phép người dùng tham gia vào các diễn đàn về các chủ đề cụ thể,đăng câu hỏi và câu trả lời trong phần Hỏi & Đáp của nó, cũng như nhận xét về nội dungcủa người khác và theo dõi những người dùng khác Đến nay, nền tảng này tự hào cólượng người xem hàng tháng là 29 triệu lượt xem Hơn 700.000 bài báo đã được xuất bảntrên 46.000 trung tâm và có hơn 4,1 triệu bài đăng trên diễn đàn
2.1.5 Trang Dev.to
Dev Community là một cộng đồng với hơn 640.000 lập trình viên đang cùng nhauhọc tập và giúp đỡ lẫn nhau Ở đây bạn có thể tìm thấy nhiều bài viết hay được phân loạitheo tuần, tháng, năm dựa trên sự đánh giá của các lập trình viên khác
Trang 262.3 Đề xuất một số chức năng cho hệ thống
Vblog: cho phép đăng bài viết dưới dạng video
Đăng tin ngắn: cho phép đăng những video ngắn dưới 30 giây được hiển thị ở mộtmục riêng
Chế độ bài viết: riêng tư (chỉ tác giả thấy được), công khai (mọi người đều có thểthấy), người theo dõi (chỉ những người theo dõi mới thấy được)
Theo dõi: người dùng có thể theo dõi để xem thông tin bài viết của tác giả
Trang cá nhân: quản lý bài viết, theo dõi, cấp bậc người dùng
Báo cáo: báo cáo những bài viết hoặc người dùng xấu cho quản trị viên có thể xemxét
Trách nhiệm bài viết: bài viết sẽ được tác giả gắn mác và chịu trách nhiệm về bàiđăng của mình (có thể là quan điểm cá nhân, những thông tin hoàn toàn chính xác )Bảng tin: cá nhân hóa trải nghiệm người dùng khi những thông tin người dùng quantâm và người dùng theo dõi sẽ được hiển thị ở đây
2.3.2 Chức năng nâng cao
Lưu bản nháp: khi gặp sự cố khi soạn thảo hoặc tùy chọn vào lưu bản nháp thì bài viết
sẽ được lưu lại dưới dạng bản nháp Người dùng có thể xem bản nháp trong Dashboard
và tiếp tục hiệu chỉnh Bản nháp sẽ luôn được lưu lại trừ khi người dùng chọn không lưu.Phân loại người dùng: phân loại người dùng theo nhiều cấp bậc (sơ cấp, trung cấp,cao cấp, chuyên gia) Người dùng khi thỏa các điều kiện về lượt xem, theo dõi và đánhgiá sẽ được nâng cấp
Trang 27Phân loại bài viết theo nhiều tiêu chí:
• Chủ đề: chia thành nhiều chủ đề lớn và người dùng có thể gán thủ công trong lúcviết bài hoặc tự động gán dựa vào tag
• Tag: mỗi bài viết cho gán tối đa 4 tag và gán thủ công khi viết bài
• Theo cấp bậc tác giả: các bài viết của chuyên gia sẽ được phân loại riêng
Tự động hóa duyệt bài: đưa ra những quy định chặt chẽ cho bài viết và có hệ thốngkiểm tra bài viết để những bài viết đạt yêu cầu có thể tự động được đăng duyệt
Lịch đăng bài: những bài viết đã đạt tiêu chuẩn kiểm duyệt có thể đăng ngay lập tứchoặc được lên lịch đăng bài trong một khoảng thời gian được định trước Có thể cài đặtthời gian thông báo cho người theo dõi về khoảng thời gian bài viết được đăng
Tùy chỉnh bố cục: cho phép người dùng tùy chỉnh bố cục của trang web
Trang 28Cơ sở lý thuyết
3.1 Các công nghệ phía Client
3.1.1 Single page application
Single page application (SPA) là một ứng dụng web giúp nâng cao trải nghiệm ngườidùng bằng cách sử dụng HTML5 và AJAX Đầu tiên khi tải một trang web bất kỳ, SPA sẽtải một trang HTML đơn, sau đó dựa trên request của người dùng, SPA sẽ tiếp tục tải cácHTML khác trong cùng một trang đó, SPA có thể sử dụng một vài thư viện JavaScriptnhư AngularJS, Backbone.js, Durandal
Hiểu một cách đơn giản, thì toàn bộ resource của web bao gồm các file CSS, Javascript,master layout hay cấu trúc web page sẽ được tải lần đầu tiên khi chúng ta bắt đầu duyệtmột website nào đó Ở những lần sau, khi chuyển trang khác, client sẽ gửi những ajaxrequest để nhận dữ liệu cần thiết (thường là phần nội dung) Việc này mang đến trảinghiệm cho người dùng web tốt hơn, giảm thời gian phải tải lại toàn bộ trang web, tiếtkiệm băng thông cũng như thời gian chờ đợi Việc này là trái ngược hoàn toàn với trangweb truyền thống khi toàn bộ trang web phải tải lại mỗi khi chuyển trang
13
Trang 29Để có cái nhìn dễ hiểu hơn, bạn hãy nhìn hình minh họa bên dưới về SPA:
Hình 3.1: Hình ảnh ví dụ về single page application
Vùng màu xanh được coi là khung hay master page của 1 website, vùng màu đỏ làcontent của web page sẽ hiển thị và thay thế mỗi khi chuyển trang
Ưu điểm
• Web SPA có backend và frontend rõ ràng
• Web SPA sẽ đẩy mạnh xử lý ở frontend
• SPA nhanh, tất cả (HTML + CSS + JS) chỉ phải tải một lần trong quá trình sửdụng, chỉ có dữ liệu là được chuyển qua lại, tăng tính tương tác giữa người dùng,tìm kiếm, tính toán, xử lý nhanh hơn
Nhược điểm
• Không thể sử dụng các thủ thuật SEO cao cấp
• Không phù hợp với các lập trình viên thiếu kinh nghiệm frontend
• Chia tách 2 team frontend và backend sẽ làm tăng chi phí (quản lý, giao tiếp, xử lýxung đột )
• Gia tăng khối lượng công việc
Trang 303.1.2 ReactJS
ReactJS là một opensource được phát triển bởi Facebook, ra mắt vào năm 2013, bảnthân nó là một thư viện Javascript được dùng để xây dựng các tương tác với các thànhphần trên website Một trong những điểm nổi bật nhất của ReactJS đó là việc render dữliệu không chỉ thực hiện được trên tầng Server mà còn ở dưới Client nữa
ReactJS là một thư viện JavaScript chuyên giúp các nhà phát triển xây dựng giao diệnngười dùng hay UI Trong lập trình ứng dụng front-end, lập trình viên thường sẽ phảilàm việc chính trên 2 thành phần sau: UI và xử lý tương tác của người dùng UI là tậphợp những thành phần mà bạn nhìn thấy được trên bất kỳ một ứng dụng nào, ví dụ cóthể kể đến bao gồm: menu, thanh tìm kiếm, những nút nhấn, card, Giả sử bạn đanglập trình một website thương mại điện tử, sau khi người dùng chọn được sản phẩm ưng
ý và nhấn vào nút “Thêm vào giỏ hàng”, thì việc tiếp theo mà bạn phải làm đó là thêmsản phẩm được chọn vào giỏ hàng và hiển thị lại sản phẩm đó khi người dùng vào xem
=> xử lý tương tác
Trước khi có ReactJS, lập trình viên thường gặp rất nhiều khó khăn trong việc sửdụng “Vanilla JavaScript”(JavaScript thuần) và JQuery để xây dựng UI Điều đó đồngnghĩa với việc quá trình phát triển ứng dụng sẽ lâu hơn và xuất hiện nhiều bug, rủi rohơn Vì vậy vào năm 2011, Jordan Walke – một nhân viên của Facebook đã khởi tạoReactJS với mục đích chính là cải thiện quá trình phát triển UI
Hơn nữa, để tăng tốc quá trình phát triển và giảm thiểu những rủi ro có thể xảy ratrong khi coding, React còn cung cấp cho chúng ta khả năng Reusable Code (tái sử dụngcode) bằng cách đưa ra 2 khái niệm quan trọng bao gồm: JSX và Virtual DOM
Trang 31Hình 3.2: Cấu trúc HTML DOM
Trọng tâm chính của bất kỳ website cơ bản nào đó là những HTML documents Trìnhduyệt đọc những document này để hiển thị nội dung của website trên máy tính, tablet,điện thoại của bạn Trong suốt quá trình đó, trình duyệt sẽ tạo ra một thứ gọi là DocumentObject Model (DOM) – một tree đại diện cho cấu trúc website được hiển thị như thế nào.Lập trình viên có thể thêm bất kỳ dynamic content nào vào những dự án của họ bằngcách sử dụng ngôn ngữ JavaScript để thay đổi cây DOM
JSX (JavaScript extension) là một React extension giúp chúng ta dễ dàng thay đổi câyDOM bằng các HTML-style code đơn giản Và kể từ lúc ReactJS browser hỗ trợ toàn bộnhững trình duyệt hiện đại, bạn có thể tự tin sử dụng JSX trên bất kỳ trình duyệt nào màbạn đang làm việc
Trang 32Virtual DOM
Hình 3.3: Virtual Dom
Nếu bạn không sử dụng ReactJS (và JSX), website của bạn sẽ sử dụng HTML để cậpnhật lại cây DOM cho chính bản nó (quá trình thay đổi diễn ra tự nhiên trên trang màngười dùng không cần phải tải lại trang), cách làm này sẽ ổn cho các website nhỏ, đơngiản, website tĩnh Nhưng đối với các website lớn, đặc biệt là những website thiên về xử
lý các tương tác của người dùng nhiều, điều này sẽ làm ảnh hưởng cực kỳ nghiêm trọngbởi vì toàn bộ cây DOM phải tải lại mỗi lần người dùng nhấn vào tính năng yêu cầu phảitải lại trang
Tuy nhiên, nếu bạn sử dụng JSX thì bạn sẽ giúp cây DOM cập nhật cho chính DOM
đó, ReactJS đã khởi tạo một thứ gọi là Virtual DOM (DOM ảo) Virtual DOM (bản chấtcủa nó theo đúng tên gọi) là bản copy của DOM thật trên trang đó, và ReactJS sử dụngbản copy đó để tìm kiếm đúng phần mà DOM thật cần cập nhật khi bất kỳ một sự kiệnnào đó khiến thành phần trong nó thay đổi (chẳng hạn như user nhấn vào một nút bấtkỳ)
Ví dụ, khi người dùng bình luận vào bất kỳ bài Blog nào trên website của bạn và nhấn
“Enter” Dĩ nhiên, người dùng của bạn sẽ cần phải thấy được bình luận của mình đã đượcthêm vào danh sách bình luận Giả sử trong trường hợp không sử dụng ReactJS, toàn bộcây DOM sẽ phải cập nhật để báo hiệu sự thay đổi mới này Còn khi bạn sử dụng React,
nó sẽ giúp bạn duyệt qua Virtual DOM để xem những gì đã thay đổi sau khi người dùngthực hiện hành động trên (trong trường hợp này, thêm mới bình luận) và lựa chọn đúngnơi đúng chỗ cần cập nhật sự thay đổi mà thôi
Với việc cập nhật đúng chỗ như vậy, tiết kiệm cho chúng ta rất nhiều tài nguyên cũngnhư thời gian xử lý Ở các website lớn và phức tạp như thương mại điện tử, đặt mónăn, bạn sẽ thấy việc này là vô cùng cần thiết và quan trọng để làm tăng trải nghiệm củakhách hàng và performance được cải thiện đáng kể
Trang 33Ưu điểm
• Phù hợp với đa dạng thể loại website: ReactJS khiến cho việc khởi tạo website dễdàng hơn bởi vì bạn không cần phải lập trình nhiều như khi tạo trang web thuầnchỉ dùng JavaScript, HTML và nó đã cung cấp cho bạn đủ loại “đồ chơi” để bạn
có thể dùng cho nhiều trường hợp
• Tái sử dụng các component: Nếu bạn xây dựng các component đủ tốt, đủ linh hoạt
để có thể thoả các “yêu cầu” của nhiều dự án khác nhau, bạn chỉ tốn thời gian xâydựng ban đầu và sử dụng lại hầu như toàn bộ ở các dự án sau Không chỉ riêng mỗiReactJS mà các framework hiện nay cũng đều cho phép chúng ta thực hiện điều
đó, ví dụ Flutter chẳng hạn
• Có thể sử dụng cho cả ứng dụng Mobile: hầu hết chúng ta đều biết rằng ReactJSđược sử dụng cho việc lập trình website, nhưng thực chất nó được sinh ra khôngchỉ làm mỗi đều đó Nếu bạn cần phát triển thêm ứng dụng Mobile, thì hãy sử dụngthêm React Native – một framework khác được phát triển cũng chính Facebook,bạn có thể dễ dàng “chia sẻ” các component hoặc sử dung lại các business logictrong ứng dụng
• Debug dễ dàng: Facebook đã phát hành 1 Chrome extension dùng trong việc debugtrong quá trình phát triển ứng dụng Điều đó giúp tăng tốc quá trình release sảnphẩm cũng như quá trình lập trình của bạn
• Thân thiện với SEO: SEO là một phần không thể thiếu để đưa thông tin website củabạn lên top đầu tìm kiếm của Google Bản chất ReactJS là một thư viện JavaScript,Google Search Engine hiện nay đã crawl và index được code JavaScript, tuy nhiênbạn cũng cần thêm một vài thư viện khác để hỗ trợ điều này nhé!
• Công cụ phát triển web nổi nhất hiện nay: nếu bạn nhìn vào số liệu thống kê từGoogle Trend ở Việt Nam ở hình bên dưới, dạo lướt qua các trang tuyển dụng hàngđầu ở Việt Nam như Topdev, Itviec, v.v bạn sẽ thấy số lượng tuyển dụng cho vị tríReact Developer là cực kỳ lớn cùng với mức lương vô cùng hấp dẫn và độ phổ biếnhiện tại của ReactJS trên thị trường Việt Nam là như thế nào
Nhược điểm
• ReactJS chỉ phục vụ cho tầng View React chỉ là view library nó không phải là mộtMVC framework như những framework khác Đây chỉ là thư viện của Facebookgiúp render ra phần View Vì thế React sẽ không có phần Model và Controller, màphải kết hợp với các thư viện khác React cũng sẽ không có 2-way binding hay làAjax
Trang 34• Tích hợp ReactJS vào các framework MVC truyền thống, yêu cầu cần phải cấuhình lại.
• React khá nặng nếu so với các framework khác, React có kích thước tương tươngvới Angular (Khoảng 35KB so với 39KB của Angular) Trong khi đó Angular làmột framework hoàn chỉnh
• Khó tiếp cận cho người mới học web
3.1.3 Framework NextJS
NextJS là một framework dùng để phát triển các ứng dụng React theo tư tưởng mophic (Universal), được phát triển bởi Zeit Nhờ NextJS chúng ta có thể dễ dàng tạođược một ứng dụng React theo tư tưởng Isomophic, có bao gồm chức năng Server SideRedering (SSR)
Iso-Về cơ bản thì với việc SSR thì NextJS giới thiệu là sẽ cung cấp cho chúng ta một sốthứ như:
• Hiệu năng tốt hơn so với ứng dụng CSR
• Mang lại khả năng SEO tốt hơn mà CSR không có như là việc chia sẻ bài viết
Serverside rendering (SSR) và Clientside rendering (CSR)
Điểm khác biệt chính ở đây là với SSR, server sẽ trả về cho browser file HTML củapage đã được rendered, trong khi CSR sẽ trả về file HTML gần như empty cùng với linkstới file JS
Trong cả 2 trường hợp, React sẽ đều cần được tải về và trải qua các tiến trình tương tựnhau để xây dựng Virtual DOM và gắn các events để khiến page có thể tương tác được –tuy nhiên với SSR, người dùng có thể bắt đầu nhìn thấy trang web ngay trong khi tất cảquá trình đó đang diễn ra
Đối với CSR, ta sẽ cần chờ tới khi tất cả các quá trình trên hoàn thành đến khi VirtualDOM được chuyển vào browser DOM để website có thể xem được
Ưu điểm
• Ưu điểm chính của NextJS là hỗ trợ SSR tích hợp để tăng hiệu suất và SEO Với tất
cả thông tin trên server, nó sẽ xử lý để generate ra thông tin HTML của trang Sau
đó Client có thể gửi một yêu cầu đến Server và nhận toàn bộ trang HTML thay vìyêu cầu từng thành phần riêng lẻ với Client Render
• Ứng dụng NextJS tải nhanh hơn đáng kể so với ứng dụng React do được renderphía Server
Trang 35• Hỗ trợ các tính năng cho static web.
• Tự động code splitting cho các page nhằm tối ưu hoá performance khi load trang
• Dễ dàng xây dựng các API internal thông qua các API routes tích hợp sẵn và tạocác endpoit API
• Hỗ trợ tích hợp route cho page, CSS, JSX và TypeScript Nhanh chóng thêm cácplugin để tùy chỉnh NextJS theo nhu cầu của trang cụ thể của bạn
Nhược điểm
Nhược điểm thực sự duy nhất của NextJS, là một framework được cố định, có nghĩa
là nó có một phương pháp và bộ công cụ cụ thể mà nó muốn bạn sử dụng để xây dựngcác ứng dụng của mình Tuy nhiên, các tùy chọn của NextJS sẽ phù hợp với phạm vi củahầu hết các dự án
3.1.4 Trình soạn thảo văn bản với CkEditor
CKEditor (còn gọi là FCKeditor) là một trình soạn thảo mã nguồn mở theo kiểuWYSIWYG (tay làm - mắt thấy) của CKSource Chương trình này có thể tích hợp vàocác website mà không cần cài đặt Phiên bản đầu tiên được phát hành năm 2003 và đếnnay được rất nhiều người sử dụng
Nền tảng của Ckeditor là javascript và là mã nguồn mở nên bạn có thể chỉnh sửa bất
kì những gì theo ý của bạn
CKEditor tương thích được với hầu hết các trình duyệt Internet
Ưu điểm
Ngoài chức năng soạn thảo thì Ckeditor cung cấp bộ plugin lớn và đa dạng giúp tối
ưu trải nghiệm người dùng
Nhược điểm
Do có quá nhiều chức năng nên sẽ rất nặng, giảm tốc độ trang web
3.1.5 Thư viện Ant Design
Ant là tập hợp các components của React được xây dựng theo chuẩn thiết kế củaAnt UED Team Tương tự như chuẩn Material Design, Ant cung cấp hầu hết các com-ponent thông dụng trong ứng dụng web hiện đại, như Layout, Button, Icon, DatePicket,v.v Bên cạnh đó Ant cũng có những component riêng thú vị, như LocaleProvider chophép bạn thay đổi ngôn ngữ trên toàn ứng dụng
Trang 36Có thể coi Ant Design cho React là tập hợp của hầu hết các thư viện về React Nóđáp ứng được hầu hết các yêu cầu của project của bạn mà bạn không phải cài thêm bất
cứ thư viện nào nữa Dưới đây là danh sách các component mà nó cung cấp:
• General: Button, Icon
• Layout: Grid, Layout
• Navigation: Affix, Breadcrumb, Dropdown, Menu, Pagination, Steps
• Data Entry: AutoComplete, Checkbox, Cascader, DatePicker, Form, InputNumber,Input, Mention, Rate, Radio, Switch, Slider, Select, TreeSelect, Transfer, TimePicker,Upload
• Data Display: Avatar, Badge, Collapse, Carousel, Card, Calendar, List, Popover,Tree, Tooltip, Timeline, Tag, Tabs, Table
• Feedback: Alert, Drawer, Modal, Message, Notification, Progress, Popconfirm,Spin, Skeleton
• Other: Anchor, BackTop, Divider, LocaleProvider
Ưu điểm
• Cung cấp 1 bộ công cụ lớn và mạnh mẽ hỗ trợ tuyệt vời cho hiện thực giao diện
• Đa dạng component dễ dàng sử dụng và tùy chỉnh
Nhược điểm
• Là một thư viện khá nặng không thích hợp cho những trang web nhỏ
• Cộng đồng không lớn
3.2.1 Kiến trúc Restful API
RESTful API là một tiêu chuẩn dùng trong việc thiết kế các API cho ứng dựng web
để quản lí resource RESTful là một trong những kiểu thiết kế API được sử dụng phổbiến ngày nay để cho các ứng dụng (web, mobile, webservice ) khác nhau có thể giaotiếp với nhau
Trang 37Cấu trúc của RESTful API:
• API là viết tắt của Application Programming Interface (Giao diện lập trình ứngdụng) là một tập hợp các định nghĩa, giao thức, và công cụ chương trình con đểxây dựng phần mềm và ứng dụng Hiểu đơn giản API là một trung gian phần mềmcho phép hai ứng dụng giao tiếp với nhau API có thể trả về dữ liệu mà bạn cầncho ứng dụng của mình ở những kiểu dữ liệu phổ biến như JSON hay XML VớiAPI, bạn có thể tiếp cận, truy xuất dữ liệu từ máy chủ thể hiện chúng trên ứng dụngphần mềm hoặc website của mình một cách dễ dàng hơn Tính tới nay, API đã pháttriển với nhiều loại ứng dụng và phần mềm khác nhau Thế hệ mới nhất của web/app API có thể ứng dụng được ở mọi hệ thống từ cơ sở dữ liệu, hệ điều hành, hệthống nền web, thư viện hay thậm chí là phần cứng máy tính
• REST hay ReST (REpresentational State Transfer) là một dạng chuyển đổi cấutrúc dữ liệu được đề xuất bởi nhà khoa học máy tính Roy Thomas Fielding vàonăm 2012 REST là một kiểu kiến trúc được sử dụng trong việc giao tiếp giữacác máy tính (máy tính cá nhân và máy chủ của trang web) trong việc quản lý cáctài nguyên trên internet REST được sử dụng rất nhiều trong việc phát triển cácứng dụng Web Services sử dụng giao thức HTTP trong giao tiếp thông qua mạnginternet Các ứng dụng sử dụng kiến trúc REST này thì sẽ được gọi là ứng dụngphát triển theo kiểu RESTful Một RESTful API đơn giản là một API tuân thủ cácnguyên tắc và ràng buộc của REST REST bao gồm 3 bộ phận cơ bản như: bộ máychủ ngoài chứa dữ liệu (external server), máy chủ API và máy chủ khách (client).Trong đó, máy khách có thể là bất cứ thứ gì, ứng dụng trên nền web, thư viện hoặcthậm chí là các phần mềm khác nhau của một phần mềm máy tính REST cho phépcác máy khách truy cập máy chủ API và thực hiện các lệnh lấy về, chỉnh sửa hayxóa dữ liệu từ external server Các lập trình viên có thể thoải mái truy xuất, chỉnhsửa dữ liệu từ máy chủ mà không cần biết hệ thống hoạt động như thế nào
Ưu điểm
• REST cũng có ưu điểm khi sử dụng giao thức stateless (không trạng thái) Hệ thốngnày không sử dụng session, cookie, không cần biết những thông tin đó trong mỗilần request đến máy chủ ngoài Điều này giúp REST giảm tải cho máy chủ ngoài,nâng cao hiệu suất làm việc
• Tính khả biến: với các hệ thống cần thay đổi các tài nguyên liên tục, sử dụng RESTvới việc tạo request đơn giản sẽ giúp mọi chuyện trở nên đơn giản hơn
• Tính mở rộng: các hệ thống REST có khả năng mở rộng rất cao nhờ sự tách biệtgiữa các thành phần và các quy ước giao tiếp được quy định sẵn
Trang 38• Tính linh hoạt: việc chuẩn hoá interface giúp hệ thống trở nên linh hoạt hơn, có thể
sử dụng cho nhiều nền tảng khác nhau, mobile, web,
• Trong sáng: trong giao tiếp giữa các thành phần, các request trở nên rất rõ ràng, dễhiểu
Nhược điểm
• REST Chỉ hoạt động trên các giao thức HTTP
• Ưu điểm của việc sử dụng các cấu trúc HTTP lại cũng chính là một hạn chế Bởicác hạn chế của HTTP cũng trở thành các hạn chế của kiến trúc REST Ví dụ:HTTP không lưu trữ thông tin về trạng thái giữa các chu kỳ khi phản hồi yêu cầu,
và như vậy các ứng dụng dựa trên REST rơi vào tình trạng không rõ trạng thái vàmọi tác vụ quản lý trạng thái phải được máy khách thực hiện
3.2.2 Ngôn ngữ sử dụng NodeJS
NodeJS là một mã nguồn mở, một môi trường cho các máy chủ và ứng dụng mạng.NodeJS sử dụng Google V8 JavaScript engine để thực thi mã, và một tỷ lệ lớn cácmô-đun cơ bản được viết bằng JavaScript Các ứng dụng NodeJS thì được viết bằngJavaScript
NodeJS chứa một thư viện built-in cho phép các ứng dụng hoạt động như một server mà không cần phần mềm như Nginx, Apache HTTP Server hoặc IIS
Web-NodeJS cung cấp kiến trúc hướng sự kiện (event-driven) và non-blocking I/O API,tối ưu hóa thông lượng của ứng dụng và có khả năng mở rộng cao
Mọi hàm trong NodeJS là không đồng bộ (asynchronous) Do đó, các tác vụ đềuđược xử lý và thực thi ở chế độ nền (background processing)
Ưu điểm
• Đặc điểm nổi bật của NodeJS là nó nhận và xử lý nhiều kết nối chỉ với một thread Điều này giúp hệ thống tốn ít RAM nhất và chạy nhanh nhất khi khôngphải tạo thread mới cho mỗi truy vấn giống PHP Ngoài ra, tận dụng ưu điểm non-blocking I/O của Javascript mà NodeJS tận dụng tối đa tài nguyên của server màkhông tạo ra độ trễ như PHP
single-• JSON APIs Với cơ chế event-driven, non-blocking I/O(Input/Output) và mô hìnhkết hợp với Javascript là sự lựa chọn tuyệt vời cho các dịch vụ Webs làm bằngJSON
Trang 39• Ứng dụng trên 1 trang( Single page Application) Nếu bạn định viết 1 ứng dụng thểhiện trên 1 trang (Gmail?) NodeJS rất phù hợp để làm Với khả năng xử lý nhiềurequests đồng thời thời gian phản hồi nhanh Các ứng dụng bạn định viết khôngmuốn nó tải lại trang, gồm rất nhiều request từ người dùng cần sự hoạt động nhanh
để thể hiện sự chuyên nghiệp thì NodeJS sẽ là sự lựa chọn của bạn
• Shelling tools unix NodeJS sẽ tận dụng tối đa Unix để hoạt động Tức là NodeJS
có thể xử lý hàng nghìn process và trả ra 1 luồng khiến cho hiệu xuất hoạt độngđạt mức tối đa nhất và tuyệt vời nhất
• Streamming Data (Luồng dữ liệu) Các web thông thường gửi HTTP request vànhận phản hồi lại (Luồng dữ liệu) Giả xử sẽ cần xử lý 1 luồng giữ liệu cực lớn,NodeJS sẽ xây dựng các Proxy phân vùng các luồng dữ liệu để đảm bảo tối đa hoạtđộng cho các luồng dữ liệu khác
• Ứng dụng Web thời gian thực, với sự ra đời của các ứng dụng di động & HTML
5 nên NodeJS rất hiệu quả khi xây dựng những ứng dụng thời gian thực time applications) như ứng dụng chat, các dịch vụ mạng xã hội như Facebook,Twitter,
(real-Nhược điểm
• Ứng dụng nặng tốn tài nguyên, nếu bạn cần xử lý các ứng dụng tốn tài nguyênCPU như encoding video, convert file, decoding encryption hoặc các ứng dụngtương tự như vậy thì không nên dùng NodeJS (Lý do: NodeJS được viết bằng C++Javascript, nên phải thông qua thêm 1 trình biên dịch của NodeJS sẽ lâu hơn 1 chút) Trường hợp này bạn hãy viết 1 Addon C++ để tích hợp với NodeJS để tăng hiệusuất tối đa !
• NodeJS và ngôn ngữ khác NodeJS, PHP, Ruby, Python NET thì việc cuối cùng
là phát triển các App Web NodeJS mới sơ khai như các ngôn ngữ lập trình khác.Vậy nên bạn đừng hi vọng NodeJS sẽ không hơn PHP,Ruby,Python ở thời điểmnày Nhưng với NodeJS bạn có thể có 1 ứng dụng như mong đợi, điều đó là chắcchắn !
3.2.3 Framework Express.Js
ExpressJS là một framework được xây dựng trên nền tảng của NodeJS Nó cung cấpcác tính năng mạnh mẽ để phát triển web hoặc mobile ExpressJS hỗ trợ các methodHTTP và midleware tạo ra API vô cùng mạnh mẽ và dễ sử dụng
Trang 40Ưu điểm
• ExpressJS có thể giảm một nửa thời gian viết mã mà vẫn giúp nhà phát triển xâydựng các ứng dụng web hiệu quả ExpressJS còn cung cấp các tính năng khác nhaugiúp tiết kiệm công sức rất nhiều
• ExpressJS được sử dụng tương đối dễ dàng vì có hỗ trợ JavaScript Javascript rất
dễ học đối với bất kỳ ai Do đó, ExpressJS là một công cụ tuyệt vời cho nhữngngười mới bắt đầu tham gia vào lĩnh vực phát triển ứng dụng web và gặt hái đượcthành công
• Bên cạnh đó, ExpressJS được phát triển dựa trên nền tảng NodeJS Đây là một kiếntrúc hướng sự kiện và có khả năng xử lý hàng nghìn yêu cầu của khách hàng cùngmột lúc, điều mà PHP không thể thực hiện được NodeJS được thiết kế dành riêng
để hỗ trợ các ứng dụng web thực
• Điều quan trọng kế tiếp của doanh nghiệp là việc sử dụng tiền sao cho hiệu quả
để tối đa hóa lợi nhuận ExpressJS lại là một ứng dụng web miễn phí và mã nguồn
mở, do đó không có lý do gì để không sử dụng framework này
3.2.4 Cơ sở dữ liệu PostgreSQL
PostgreSQL là một hệ thống quản trị cơ sở dữ liệu quan hệ và đối tượng relational database management system) miễn phí và nguồn mở (RDBMS) tiên tiến nhấthiện nay khả năng mở rộng cao và tuân thủ các tiêu chuẩn kỹ thuật Nó được thiết kế
(object-để xử lý một loạt các khối lượng công việc lớn, từ các máy tính cá nhân đến kho dữ liệuhoặc dịch vụ Web có nhiều người dùng đồng thời
Ưu điểm
• Được sử dụng để chạy trang web và ứng dụng web động
• Cho phép lưu lại nhật ký và hình thành cơ sở dữ liệu hỗ trợ sửa lỗi
• Mã nguồn mở để người dùng chỉnh sửa, nâng cấp
• Hỗ trợ khách hàng dựa trên vùng địa lý
• Cách sử dụng đơn giản