CHƯƠNG 1: CƠ SỞ CỦA ĐỀ TÀI 1. ReactJS ReactJS là một thư viện UI phát triển tại Facebook để hỗ trợ việc xây dựng những thành phần (components) UI có tính tương tác cao, có trạng thái và có thể tái sử dụng lại được. Một trong những đặc điểm nổi bật của ReactJS là nó không chỉ hoạt động phía client, mà còn được render trên server và có thể kết nối với nhau. ReactJS so sánh sự thay đổi giữa các giá trị của lần render này với lần render trước và cập nhật ít thay đổi nhất trên DOM.
Virtual DOM: Công nghệ DOM ảo giúp tăng hiệu năng cho ứng dụng. Việc chỉ node gốc mới có trạng thái và khi nó thay đổi sẽ tái cấu trúc lại toàn bộ, đồng nghĩa với việc DOM tree cũng sẽ phải thay đổi một phần, điều này sẽ ảnh hưởng đến tốc độ xử lý của ứng dụng. ReactJS sử dụng Virtual DOM (DOM ảo) để cải thiện vấn đề này. Virtual DOM là một object, mỗi object chứa đầy đủ thông tin cần thiết để tạo ra một DOM, khi dữ liệu thay đổi nó sẽ tính toán sự thay đổi giữa object và cây layout hiện tại, điều này sẽ giúp tối ưu hoá việc re-render DOM tree thật.
ReactJS còn sử dụng cơ chế one-way data binding – luồng dữ liệu một chiều. Dữ liệu được truyền từ component cha đến component con thông qua props. Luồng dữ liệu đơn giản giúp lập trình viên dễ dàng hơn trong việc kiểm soát cũng như sửa lỗi. Với các đặc điểm ở trên, ReactJS dùng để xây dựng các ứng dụng lớn mà dữ liệu của chúng thay đổi liên tục theo thời gian.
Dữ liệu thay đổi thì hầu hết kèm theo sự thay đổi về giao diện. Ví dụ như trên Facebook: Newsfeed của bạn cùng lúc sẽ có các status khác nhau và mỗi status lại có số like, share, comment liên tục thay đổi. Khi đó ReactJS sẽ rất hữu ích để sử dụng. JSX: Là một dạng ngôn ngữ cho phép lập trình viên sử dụng các mã HTML trong Javascript.
JSX có các đặc điểm sau: - Nhanh hơn: JSX thực hiện tối ưu hóa trong khi biên dịch sang mã Javascript. Các mã này cho thời gian thực hiện nhanh hơn nhiều so với một mã tương đương viết trực tiếp bằng Javascript. 5 KHOÁ LUẬN TỐT NGHIỆP - An toàn hơn: Ngược với Javascript, JSX là kiểu statically-typed, nghĩa là nó được biên dịch trước khi chạy, giống như (Java, C++). Vì vậy các lỗi sẽ được phát hiện ngay trong quá trình biên dịch.
- Dễ dàng hơn: JSX kế thừa dựa trên Javascript, vì vậy rất dễ dàng để cho các lập trình viên Javascript có thể sử dụng. Components: ReactJS được xây dựng xung quanh các component, chứ không dùng template như các framework khác. Trong ReactJS, chúng ta xây dựng trang web sử dụng những thành phần (component) nhỏ. Chúng ta có thể tái sử dụng một component ở nhiều nơi, với các trạng thái hoặc các thuộc tính khác nhau, trong mỗi component lại có thể chứa thành phần khác.
Mỗi component trong ReactJS có một trạng thái riêng, có thể thay đổi và ReactJS sẽ thực hiện cập nhật component dựa trên những thay đổi của trạng thái. Mọi thứ trong ReactJS đều là component. Chúng sẽ giúp bảo trì mã code khi làm việc với các dự án lớn. Một react component đơn giản chỉ cần một phương thức render.
Có rất nhiều phương thức khả dụng khác, nhưng render là phương thức chủ đạo. Props và State: - Props: giúp các component tương tác với nhau, component nhận đầu vào gọi là props, và trả thuộc tính mô tả những gì child component sẽ render. Props là bất biến. - State: là trạng thái của giao diện, khi state thay đổi thì component sẽ render lại để cập nhật giao diện 1.
NodeJS NodeJS là một nền tảng dựa vào Chrome Javascript runtime để xây dựng các ứng dụng nhanh, có độ lớn. NodeJS sử dụng các phần phát sinh các sự kiện (event- driven), mô hình non-blocking I/O để tạo ra các ứng dụng nhẹ và hiệu quả cho các ứng dụng về dữ liệu thời gian thực chạy trên các thiết bị phân tán. NodeJS là một mã nguồn mở, đa nền tảng cho phát triển các ứng dụng phía Server và các ứng dụng liên quan đến mạng. Ứng dụng Node.js được viết bằng Javascript và có thể chạy trong môi trường NodeJS trên hệ điều hành Window, Linux,.
NodeJS cũng cung cấp cho chúng ta các module Javascript đa dạng, có thể đơn giản hóa sự phát triển của các ứng dụng web sử dụng NodeJS với các phần mở rộng. 6 KHOÁ LUẬN TỐT NGHIỆP NodeJS hoạt động với một luồng duy nhất và có khả năng asynchronous (bất đồng bộ). Không giống như server được viết bằng PHP thì mỗi ông request đến server thì server sẽ tạo ra một thread để xử lý trong khi đó server node xử lý mọi hành động trong một thread duy nhất. Với cách thiết kế như vậy NodeJS sẽ hỗ trợ trang web một số điều như: - Không đồng bộ: Tất cả các API của NodeJS đều không đồng bộ (none- blocking), nó chủ yếu dựa trên nền của NodeJS Server và chờ đợi Server trả dữ liệu về.
Việc di chuyển máy chủ đến các API tiếp theo sau khi gọi và cơ chế thông báo các sự kiện của NodeJS giúp máy chủ để có được một phản ứng từ các cuộc gọi API trước (Realtime). - Chạy nhanh: NodeJS được xây dựng dựa vào nền tảng V8 Javascript Engine nên việc thực thi chương trình rất nhanh. - Đơn luồng nhưng khả năng mở rộng cao: NodeJS sử dụng một mô hình luồng duy nhất với sự kiện lặp, cơ chế tổ chức sự kiện giúp các máy chủ để đáp ứng một cách không ngăn chặn và làm cho máy chủ cao khả năng mở rộng. - Không đệm: NodeJS không đệm bất kì một dữ liệu nào và các ứng dụng này chủ yếu là đầu ra dữ liệu.
- Có giấy phép: NodeJS đã được cấp giấy phép bởi MIT License. Cách hoạt động: NodeJS 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. ExpressJS Express là một web application framework for NodeJS, nó cung cấp cho chúng những rất nhiều tính năng mạnh mẽ trên nền tảng web. Express rất dễ dàng để phát triển các ứng dụng nhanh dựa trên NodeJS cho các ứng dụng web. Express hỗ trợ các phương thức HTTP 7 KHOÁ LUẬN TỐT NGHIỆP và middleware tạo ra 1 API rất mạnh mẽ và sử dụng dễ dàng hơn.
Các tính năng của Express framework phải kể đến như: - Cho phép thiết lập các lớp trung gian để trả về các HTTP request. - Định nghĩa routing có thể được sử dụng với các hành động khác nhau dựa trên phương thức HTTP và URL. - Cho phép trả về các trang HTML dựa vào các tham số truyền vào đến template. MongoDB MongoDB là một hệ quản trị cơ sở dữ liệu, sử dụng cơ sở dữ liệu phi quan hệ và được hàng triệu người sử dụng.
MongoDB là một cơ sở dữ liệu hướng tài liệu (document), các dữ liệu được lưu trữ trong document dưới dạng JSON thay vì dạng bảng như cơ sở dữ liệu quan hệ nên việc thực hiện truy vấn sẽ rất nhanh. Với cơ sở dữ liệu quan hệ chúng ta có khái niệm bảng, các cơ sở dữ liệu quan hệ sử dụng các bảng để lưu trữ thì với MongoDB chúng ta sẽ dùng khái niệm là collection. So với cơ sở dữ liệu có quan hệ thì trong MongoDB các collection tương ứng với các table, còn document sẽ tương ứng với hang (row). Các collection trong MongoDB được cấu trúc một cách tự do hơn, từ đó cho phép việc lưu trữ các dữ liệu không nhất thiết phải tuân theo một cấu trúc nhất định.
Một số câu lệnh cơ bản trên MongoDB: - Tạo cơ sở dữ liệu: use test - Tạo bảng: db.createCollection('students') - Insert dữ liệu: db.insert({name:'thanh', gender: 'male'}) - Cập nhật: db.update({_id:1},{$set: {name: 'thanh update'}}) - Xóa dữ liệu: db.remove({_id: 1}) - Tìm kiếm tất cả: db.find({}) - Tìm kiếm: db.find({name: 'thanh'}) Ưu điểm của MongoDB: - Do MongoDB lưu trữ dữ liệu dưới dạng Document JSON, vì vậy mỗi collection sẽ có các kích cỡ và document khác nhau, linh hoạt hơn trong việc lưu trữ dữ liệu. 8 KHOÁ LUẬN TỐT NGHIỆP - Vì là mô hình phi quan hệ nên dữ liệu trong MongoDB không có sự ràng buộc với nhau, không có toán tử join như trong mô hình quan hệ nên khi thêm, xóa hay cập nhật MongoDB không phải tốn quá nhiều thời gian vào việc kiểm tra ràng buộc - Trường dữ liệu _id luôn được tự động đánh chỉ mục để tối ưu tốc độ truy vấn - Hiệu năng cao: Tốc độ cửa các câu lệnh truy vấn trong MongoDB nhanh hơn hẳn so với các hệ quản trị cơ sở dữ liệu quan hệ khác. Với một lượng dữ liệu đủ lớn thì thử nghiệm cho thấy tốc độ thêm dữ liệu của MongoDB có thể nhanh tới gấp 100 lần so với MySQL. Nhược điểm của mongoDB: - Tốn nhiều không gian lưu trữ hơn do dữ liệu được lưu dưới dạng key-value, các collection chỉ có sự khác biết với nhau về value, vì vậy key sẽ bị lặp lại.
Không tồn tại toán tử join nên dẫn đến việc dễ bị dư thừa dữ lieu khi lưu trữ - Các collection trong MongoDB không có các tính chất ràng buộc như trong cơ sở dữ liệu quan hệ nên khi thao tác với MongoDB cần phải chú ý nhiều hơn về dữ liệu - Khi thêm/xoá/cập nhật dữ liệu, MongoDB sẽ chưa thực hiện ngay việc cập nhật xuống ổ cứng, mà phải sau 60 giây MongoDB mới thực hiện việc ghi toàn bộ dữ liệu đã thay đổi từ RAM xuống ổ cứng. Điều này vô tình trở thành nhược điểm của MongoDB vì tỉ lệ mất mát dữ liệu khi gặp phải các sự cố đột ngột như mất nguồn điện 1. Android SDK Android SDK (Software Development Kit) là bộ công cụ phát triển phần mềm được Google cung cấp để tạo ra các ứng dụng trên nền tảng Android. SDK bao gồm nhiều thành phần như thư viện, công cụ phát triển, trình biên dịch và các ví dụ mẫu, giúp các nhà phát triển dễ dàng xây dựng, kiểm thử và triển khai ứng dụng.
Các thành phần chính của Android SDK: - Trình giả lập Android: Công cụ này giúp kiểm tra ứng dụng trên nhiều phiên bản Android khác nhau mà không cần thiết bị vật lý.