Friday, 12 August 2016

Tạo một template cơ bản trên blogger.com

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title><data:blog.pageTitle/></title>
<script type='text/javascript'>

</script>
<b:skin>

</b:skin>

</head>
<body>
 <b:section id='bodypage' class='bodypage' maxwidgets='' showaddelement=''>

</b:section>
</body>
</html>

Xây dựng một API Sever dùng nodejs

var express = require('express');
var http = require("http");
var https = require("https");
var app = express();

app.get('/api', function(req, res) {
    getRequest(host, path, method, headers, function(data) {
        res.senddata(data);
    })
});

app.listen(3000, function() {
    console.log('app listening on port 3000!');
});

function getRequest(host, path, method, headers, callback) {
    if (typeof callback == 'undefined')
        callback = function() {};

    var options = {
        host: host,
        path: path,
        method: method,   /* { 'GET' or 'POST' }*/
        headers: headers /* { 'Content-Type': 'application/json' }*/
    };

    var req = https.request(options, function(res) {
        res.setEncoding('utf8');
        res.on('data', function(data) {
            callback(data);
        });
        req.on('error', function(e) {
            callback(e);
        });

    });
    req.end();
}

Node.js là gì và tại sao nên dùng Node.js ?

Javascript V8 Engine là gì ?
Javascript V8 Engine là một mã nguồn mở của "Javascript engine" được phát triển dành cho dự án Chromium (mã nguồn mở của trình duyệt Chrome). Sau này nhiều dự án được xây dựng dựa vào đó như MongoDB and Node.js....
Phiên bản đầu tiên ra mắt vào 02/09/2008 cùng với phiên bản đầu tiên của trình duyệt Chrome.
Node.js là gì ?
Node.js là một nền tảng chạy trên môi trường V8 JavaScript runtime - một trình thông dịch JavaScript cực nhanh chạy trên trình duyệt Chrome. Bình thường thì bạn cũng có thể tải bộ V8 và nhúng nó vào bất cứ thứ gì; Node.js làm điều đó đối với các web server. JavaScript suy cho cùng cũng chỉ là một ngôn ngữ - vậy thì không có lý do gì để nói nó không thể sử dụng trên môi trường server tốt như là trong trình duyệt của người dùng được.

Tại sao lại sử dụng Node.js?

Đầu tiên là ưu điểm về tốc độ thực thi và khả năng mở rộng. Node.js có tốc độ rất nhanh. Đó là một yêu cầu khá quan trọng khi bạn là một startup đang cố gắng tạo ra một sản phẩm lớn và muốn đảm bảo có thể mở rộng nhanh chóng, đáp ứng được một lượng lớn người dùng khi trang web của bạn phát triển lên.
Node.js có thể xử lý hàng ngàn kết nối đồng thời trong khi PHP sẽ chỉ có nước sụp đổ. Bên cạnh các lợi ích về tốc độ thực thi và khả năng mở rộng, có thể bạn cũng đã biết một chút về JavaScript, vì vậy tại sao lại phải phiền toái để học thêm về một ngôn ngữ lập trình hoàn toàn mới như PHP? Và sau đó bạn sẽ có một sự phấn khích khi học về một cái gì đó mới mẻ và gần như chưa được khám phá. Bạn còn nhớ cái cảm giác khi mà một cái gì đó mới xuất hiện và sau đó trở thành phổ biến khắp mọi nơi mà bạn hối tiếc đã không học về nó sớm hơn, và mãi mãi chỉ là người đến sau? Đừng phạm phải sai lầm như vậy lần này nữa. Node.js đang ngày càng trở nên lớn mạnh hơn.

Các đặc tính của NodeJS
Qua phần tìm hiểu NodeJS là gì mình có giới thiệu một đặc tính rất quan trọng đó là Realtime, tuy nhiên vẫn còn khá nhiều đặc tính mà bạn cần phải biết trước khi học NodeJS.

    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 Node.js 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 rất nhanh: NodeJ đượ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: Node.js 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 như trái ngược với các máy chủ truyền thống mà tạo đề hạn chế để xử lý yêu cầu. Node.js sử dụng một chương trình đơn luồng và các chương trình tương tự có thể cung cấp dịch vụ cho một số lượng lớn hơn nhiều so với yêu cầu máy chủ truyền thống như Apache HTTP Server.
    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.

Nhược điểm

Giống như hầu hết các công nghệ mới, việc triển khai Node.js trên host không phải là điều dễ dàng. Nếu bạn có một web hosting xài chung, bạn không thể đơn giản tải lên một ứng dụng Node.js và mong chờ nó hoạt động tốt. VPS và dedicated server là một sự lựa chọn tốt hơn - bạn có thể cài đặt Node.js trên chúng. Thậm chí dễ hơn là sử dụng một dịch vụ có khả năng mở rộng như là Heroku, và bạn có thể hoàn toàn an tâm để phát triển trang web của mình trên đó - bạn chỉ cần trả tiền khi cần thêm nhiều tài nguyên hơn.

Mặt khác, chúng ta rất dễ cài đặt Node.js chạy cục bộ trên máy tính của bạn sử dụng các hệ điều hành như Windows, Mac hoặc Linux và bắt đầu phát triển ứng dụng ngay lập tức - chỉ việc tải phiên bản Node.js tương ứng tại đây. Một điều quan trọng nên chú ý là Node.js không chỉ đơn giản là một sự thay thế cho Apache - các ứng dụng web đang tồn tại sẽ không có khả năng tương thích, và bạn sẽ làm việc hiệu quả với những ứng dụng phát triển từ đầu (mặc dù có rất nhiều framework ngoài kia để giúp đỡ bạn với nhiều đặc trưng phổ biến).

Một nhược điểm lớn khác của Node.js đó là nó vẫn đang trong giai đoạn phát triển ban đầu, điều này có nghĩa là một số đặc trưng sẽ thay đổi trong quá trình phát triển tiếp theo. Trong thực tế, nếu bạn đọc các tài liệu đi kèm, thì nó bao gồm một chỉ số ổn định (stability index), chỉ số này cho thấy mức độ rủi ro khi bạn sử dụng các đặc trưng hiện có.

Javascript V8 Engine là gì ?

Javascript V8 Engine là một mã nguồn mở của "Javascript engine" được phát triển dành cho dự án Chromium (mã nguồn mở của trình duyệt Chrome). Sau này nhiều dự án được xây dựng dựa vào đó như MongoDB and Node.js....
Phiên bản đầu tiên ra mắt vào 02/09/2008 cùng với phiên bản đầu tiên của trình duyệt Chrome.

Link : https://developers.google.com/v8/get_started

Thursday, 29 October 2015

Giới thiệu Hibernate Framework

1. Framework là gì?

Framework trong phát triển phần mềm là một khái niệm dùng để chỉ những "cấu trúc hỗ trợ được định nghĩa" mà trong đó những dự án phần mềm khác có thể được sắp xếp vào đó và phát triển. Thông thường, một framework bao gồm những program hỗ trợ, code libs và một ngôn ngữ scripting nằm giữa các chương trình phần mềm khác để giúp phát triển và gắn những thành phần khác nhau trong dự án phần mềm lại với nhau.

2. Khái niệm ORM Framework và Persistent layer

ORM (Object Relational Mapping) framework là một cơ chế cho phép người lập trình thao tác với database một cách hoàn toàn tự nhiên thông qua các đối tượng. Lập trình viên hoàn toàn không quan tâm đến loại database sử dụng, SQL…

Peristence layer: một ứng dụng có thể được chia làm 3 phần như sau: giao diện người dùng (presentation layer), phần xử lý nghiệp vụ (business layer) và phần chứa dữ liệu (data layer). Cụ thể ra, business layer có thể được chia nhỏ thành 2 layer con là business logic layer (các tính toán nhằm thỏa mãn yêu cầu người dùng) và persistence layer. Persistence layer chịu trách nhiệm giao tiếp với data layer (thường là một hệ quản trị cơ sở dữ liệu quan hệ – Relational DBMS). Persistence sẽ đảm nhiệm các nhiệm vụ mở kết nối, truy xuất và lưu trữ dữ liệu vào các Relational DBMS.

3. Giới thiệu Hibernate Framework.

Hibernate là một trong những ORM Framework. Hibernate framework là một framework cho persistence layer. Như vậy, nhờ có Hibernate framework mà giờ đây khi bạn phát triển ứng dụng bạn chỉ còn chú tâm vào những layer khác mà không phải bận tâm nhiều về persistence layer nữa. Hibernate giúp lưu trữ và truy vấn dữ liệu quan hệ mạnh mẽ và nhanh. Hibernate cho phép bạn truy vẫn dữ liệu bằng ngôn ngữ SQL mở rộng của Hibernate (HQL) hoặc bằng SQL thuần.

4. Kiến trúc Hibernate Framework

Mô tả chức năng các file cấu hình trong Hibernate:

A. Mỗi table trong database là một object trong Hibernate. Do đó, bạn cần có một java bean cho mỗi table trong database. Các java bean này sẽ có các getters/setters và một số ngoại lệ theo quy ước của Hibernate.

B. Mỗi file mapping (ánh xạ) có dạng ***.hbm.xml có nhiệm vụ đặc tả mỗi quan hệ giữa các thuộc tính của đối tượng và các trường trong bảng CSDL

C. File Hibernate.cfg.xml: Đây là tập tin được load đầu tiên khi khởi chạy ứng dụng Hibernate. Nó chứa các thông tin sau:

Connection JDBC (URL , Driver class, Username, password, pool_size,…).
SQL Dialect.
Hibernate configuration (show_sql, format_sql, use_sql_comment, default_schema, order_updates,…).
Hibernate cache configuration (class cache, collection cache).
Hibernate transaction configuration (factory_class, auto_close_sesion, manager_lookup_class)
Miscellaneous confguration (current_session_context_class, factory_class,…)
Mapping source configuration.

5. Các thành phần của Hibernate project (các thành phần thư viện Hibernate)

Hibernate Core: Cung cấp các chức năng cơ bản của persistent layer cho các ứng dụng java với các APIs và hỗ trợ XML Mapping metadata.
Hibernate Annotations: các map class với JDK 5.0 Anootations, bao gồm Hibernate Validator.
Hibernate EntityManager : sử dụng EJB 3.0 API trong JSE hoặc với bất kỳ JEE nào.
Hibernate Tools: các tool tích hợp với Eclipse và Ant giúp tạo ra các persistent object từ 1 schema có sẵn trong database(reverse-engineering) và từ các file hbm sinh ra các class java thực hiện các persistent object rồi Hibernate tự tạo tác object trong database (forward-engineering).
NHibernate: Hibernate cho .NET Framework.
Jboss Seam: Một Java EE 5.0 framework cho phát triển các ứng dụng JSF, Ajax và EJB 3.0 với sự hỗ trợ của Hibernate. Seam hiện rất mới và tỏ ra rất mạnh để phát triển các ứng dụng Web 2.0. Nó tích hợp đầy đủ tất cả các công nghệ "hot" nhất hiện nay.

6. Lợi ích khi sử dụng Hibernate cho persistent layer

Trước tiên cần kể tới những khó khăn khi triển khai ứng dụng business dùng ngôn ngữ SQL thuần túy:

Mã thì rải rác khắp nơi đến những nơi không quản lý nổi.
Nếu thiết kế bị thay đổi sau khi phát triển ứng dụng, phải trả giá rất đắt để nhận ra những nơi cần phải thay đổi.
Khó tìm và fix bug.
Quản lý các kết nối database là một nhiệm vụ cực kỳ khó khăn vì mã SQL nằm tùm lum, kết nối database cũng vậy.
Quản lý transaction là một nhiệm vụ phức tạp.

Lợi ích khi sử dụng Hibernate (với HQL – Hibernate Query Language):

Tìm kiếm và sắp xếp nhanh.
Làm việc được với dữ liệu lớn.
Làm việc trên nhóm dữ liệu.
Joining, aggregating.
Chia sẽ nhiều người dùng và nhiều vùng.
Giải quyết tương tranh (Transaction)
Hỗ trợ cho nhiều ứng dụng.
Bảo đảm toàn vẹn.
Ràng buộc nhiều cấp độ.
Tách biệt giao tác.

Để sử dụng Hibernate, sự cần thiết phải tạo ra các lớp Java biểu diễn cho bảng tương ứng trong cơ sở dữ liệu và sau đó ánh xạ các thuộc tính của lớp với các cột của bảng trong cơ sở dữ liệu. Sau đó, Hibernate có thể được sử dụng để thực hiện các thao tác trên cơ sở dữ liệu như chèn, chọn, cập nhật và xóa các bản ghi trong bảng. Hibernate tự động tạo ra các truy vấn để thực hiện các thao tác này.

Kiến trúc Hibernate có ba thành phần chính:

Quản lý kết nối

Hibernate cung cấp dịch vụ quản lý kết nối cơ sở dữ liệu hiệu quả. Kết nối cơ sở dữ liệu là phần tốn kém tài nguyên và hiệu năng nhất trong việc tương tác với cơ sở dữ liệu vì nó đòi hỏi nhiều tài nguyên phải mở và đóng kết nối cơ sở dữ liệu.

Quản lý giao dịch

Quản lý dịch vụ giao dịch cung cấp khả năng người sử dụng để thực hiện nhiều hơn một câu lệnh tại một thời điểm.

Đối tượng bản đồ quan hệ

Đối tượng bản đồ quan hệ là kỹ thuật lập ánh xạ biểu diễn dữ liệu từ một mô hình đối tượng cho đến một mô hình dữ liệu quan hệ. Đối tượng này được sử dụng đê thực hiện các thao tác như truy vấn ,thêm mới, cập nhật và xóa các bản ghi dạng bảng bên dưới.Hibernate là rất tốt công cụ như xa như là đối tượng bản đồ quan hệ là mối quan tâm, nhưng về mặt quản lý kết nối và quản lý giao dịch, đó là thiếu hiệu năng và khả năng. Vì vậy, thường Hibernate được sử dụng để quản lý kết nối khác và các công cụ quản lý giao dịch. Ví dụ apache DBCP được sử dụng để kết nối tổng hợp với Hibernate.

Hibernate cung cấp rất nhiều tính linh hoạt trong sử dụng. Nó được gọi là kiến trúc "Lite" khi chúng ta chỉ sử dụng các thành phần đối tượng bản đồ quan hệ. Trong khi kiến trúc "Full Cream" tất cả trong ba thành phần đối tượng quan hệ lập bản đồ, quản lý kết nối và Quản lý giao dịch được sử dụng.

Có lẽ bạn đã nghe nói nhiều về Hibernate framework? Thế Hibernate framework là gì? Hy vọng mình và bạn sẽ có trả lời câu hỏi đó khi đọc xong những dòng bên dưới.

Trước khi tìm hiểu Hibernate là gì, chúng ta cần chuẩn bị một số kiến thức để làm nền tảng. Đầu tiên, chúng ta cần tìm hiểu "framework" là gì? Framework ngày nay được "lạm dụng" rất nhiều. Nhiều người hay gán một vài thứ là "framework" nhưng gán gọi như vậy có đúng không lại là một chuyện khác. Theo cộng đồng wikipedia, từ framework dùng trong phát triển phần mềm là một khái niệm dùng để chỉ những "cấu trúc hỗ trợ được định nghĩa" mà trong đó những dự án phần mềm khác có thể được sắp xếp vào đó và phát triển. Thông thường, một framework bao gồm những program hỗ trợ, code libs và một ngôn ngữ scripting nằm giữa các chương trình phần mềm khác để giúp phát triển và gắn những thành phần khác nhau trong dự án phần mềm lại với nhau.

Tiếp theo, chúng ta cần tìm hiểu về "persistence layer". Từ này tạm thời mình chưa thể dịch sang tiếng Việt được mà chỉ giải thích để bạn hiểu nó là cái gì thôi. Như bạn đã biết, kiến trúc ứng dụng dụng phần mềm có nhiều loại. Có loại chỉ chạy trên một máy là đủ. Có chương trình muốn chạy được phải kết nối sang một máy khác (client-server). Một máy đóng vai trò như là người yêu cầu (client) và máy khác đóng vai trò kẻ phục vụ (server).

Người ta sử dụng thuật ngữ "tier" để chỉ mỗi loại máy có vai trò khác nhau đó. Tier client để chỉ các máy đóng vai trò client và tier server để chỉ các máy đóng vai trò server. Và loại ứng dụng client-server là ứng dụng 2-tier (vì chỉ có 2 tier thôi). Tương tự như vậy theo sự phát triển như vũ bão của công nghệ phần cứng và phần mềm cộng với nhu cầu của các người dùng, doanh nghiệp và xã hội ngày càng lớn, chúng ta thấy có các ứng dụng 3-tier và n-tier để khắc phục nhược điểm của ứng dụng 2-tier và nhằm tăng sức mạnh xử lý cho ứng dụng.

"Layer" là một khái niệm khác với "tier". Và chúng ta đừng lầm lẫn giữa "tier" và "layer". Tier thường gắn với phần cứng máy tính (về mặt physically) còn "layer" thì dính với vấn đề cách thức tổ chức bên trong của ứng dụng. Việc phân chia tier là "trong suốt" (transparent) đối với ứng dụng xét về mặt luận lý (logically). Điều này có nghĩa là khi chúng ta phát triển một ứng dụng, chúng ta không bận tâm đến các thành phần (component) sẽ triển khai (deploy) ra sao mà chỉ chú ý là chúng ta sẽ tổ chức ứng dụng thành những layer như thế nào. Ví dụ, một ứng dụng có thể chia làm 3 phần như sau: phần giao diện người dùng (UI layer), phần xử lý nghiệp vụ (business layer) và phần chứa dữ liệu (data layer). Cụ thể ra, business layer sẽ có thể chia nhỏ thành 2 layer con là business logic layer (chỉ quan tâm đến ý nghĩa của các nghiệp vụ, các tính toán mang nhằm thoả mãn yêu cầu của người dùng) và persitence layer. Persistence layer chịu trách nhiệm giao tiếp với data layer (thường là một hệ quản trị cơ sở dữ liệu quan hệ – Relational DBMS). Persistence layer sẽ đảm nhiệm các nhiệm vụ mở kết nối, truy xuất và lưu trữ dữ liệu vào các Relational DBMS.

Việc phân chia như vậy có lợi ích là công việc sẽ được tách bạch ra. Người nào lo thiết kế và xử lý UI thì chỉ việc chú tâm vào công việc đó. Người lo business layer thì chỉ cần tập trung vào thiết kế và phát triển làm sao thoả mãn các requirement của khách hàng mà không phải chú tâm đến các khía cạnh hiện thực bên dưới thông thường liên quan đến technical issues. Còn người lo persistence layer thì chỉ việc chú trọng đến các khía cạnh hiện thực và giải quyết các technical issues mà thôi. Cũng như sẽ có những DBA (DB Administrators) lo việc cài đặt và tạo các objects trong các relational database.

Như vậy, bạn đã hiểu ứng dụng được chia một cách logically thành các "layer" và bạn cũng hiểu được là persistence layer là một layer có nhiệm vụ kết nối Relational DBMSs và truy xuất, thao tác trên dữ liệu đã được lưu trữ cũng như lưu trữ dữ liệu mới vào chúng. Hibernate framework là một framework cho persistence layer. Và bạn có thể thấy rằng nhờ có Hibernate framework mà giờ đây khi bạn phát triển một ứng dụng bạn chỉ còn chú tâm vào những layer khác mà không phải bận tâm nhiều về persistence layer nữa. Tương tự như vậy nếu bạn có một UI framework, bạn sẽ không phải bận tâm nhiều về UI layer nữa. Và xét đến cùng, việc bạn quan tâm duy nhất là business logic layer của bạn có đáp ứng yêu cầu của khách hàng không hay thôi.

Và đây là thông tin về Hibernate framework từ website chính thức của Hibernate: Hibernate là một dịch vụ lưu trữ và truy vấn dữ liệu quan hệ mạnh mẽ và nhanh. Hibernate giúp bạn phát triển các class dùng để lưu trữ dữ liệu theo cách thức rất là hướng đối tượng: association, inheritance, polymorphism, composition và collections. Hibernate cho phép bạn thực hiện các câu truy vấn dữ liệu bằng cách sử dụng ngôn ngữ SQL mở rộng của Hibernate (HQL) hoặc là ngôn ngữ SQL nguyên thuỷ cũng như là sử dụng các API.

Không giống như các persistence layer khác, Hibernate không ẩn đi sức mạnh của ngôn ngữ SQL khỏi bạn mà Hibernate còn đảm bảo cho bạn việc bạn đầu tư vào công nghệ và tri thức cơ sở dữ liệu quan hệ là luôn luôn chính xác. Và điều quan trọng hơn nữa là Hibernate được license theo LGPL (Lesser GNU Public License). Theo đó, bạn có thể thoải mái sử dụng Hibernate trong các dự án open source hoặc các dự án thương mại (commercial).

Hibernate là một dự án open source chuyên nghiệp và là một thành phần cốt tuỷ của bộ sản phẩm JBoss Enterprise Middleware System (JEMS). JBoss, như chúng ta đã biết là một đơn vị của Red Hat, chuyên cung cấp các dịch vụ 24×7 về hỗ trợ chuyên nghiệp, tư vấn và huyấn luyện sẵn sàng hỗ trợ bạn trong việc dùng Hibernate.

Các thành phần của Hibernate project:

Hibernate Core: Cung cấp các chức năng cơ bản của một persistence layer cho các ứng dụng Java với các APIs và hỗ trợ XML mapping metadata.
Hibernate Annotations: Các map class với JDK 5.0 annotations, bao gồm Hibernate Validator.
Hibernate EntityManager: Sử dụng EJB 3.0 EntityManager API trong JSE hoặc với bất kỳ JEE server nào.
Hibernate Tools: Các tool tích hợp với Eclipse và Ant dùng cho việc sinh ra các persistence object từ một schema có sẵn trong database (reverse-engineering) và từ các file hbm sinh ra các class java để hiện thực các persistence object, rồi Hibernate tự tạo các object trong database (forward-engineering).
NHibernate: Hibernate cho .Net framework.
JBoss Seam: Một Java EE 5.0 framework cho phát triển các ứng dụng JSF, Ajax và EJB 3.0 với sự hỗ trợ của Hibernate. Seam hiện rất mới và tỏ ra rất mạnh để phát triển các ứng dụng Web 2.0. Nó tích hợp đầy đủ tất cả các công nghệ "hot" nhất hiện nay.

Tuesday, 20 October 2015

Single page application là gì?

Single-page application (SPA) là một trang web hay một ứng dụng web, mà tất cả những thao tác xử lý của trang web đều được diễn ra trên một trang duy nhất. Với mục đích chính là nâng cao trải nghiệm người dùng, giúp người dùng cảm thấy như đang sử dụng desktop application.
SPA thực hiện việc đó bằng cách nào?
Với một trang web truyền thống, khi người dùng yêu cầu một trang web, thì server sẽ tính toán và trả về trang web đó cho người dùng toàn bộ trang web dưới dạng mã html. Hầu như không có bất kỳ sự liên kết nào giữa 2 yêu cầu gần nhau. Do đó khi có nhiều yêu cầu được diễn ra thì sẽ làm quá trình tính toán diễn ra lâu hơn, bởi hệ thống phải tính toán nhiều thành phần trước khi trả về một trang web hoàn chỉnh.
Với SPA lại khác, ở lần request đầu tiên, hệ thống sẽ trả về tất cả code xử lý cũng như code hiển thị của toàn bộ trang web, ở những yêu cầu tiếp theo client chỉ phải requets những phần nào mình cần, và server sẽ trả về dữ liệu dưới dạng thô (json), giúp rút ngắn thời gian truyền tải, đồng thời client có cơ hội sử dụng những hiệu ứng được xây dựng sẵn, giúp nâng cao trải nghiệm của người dùng hơn, quá trình thao tác với dữ liệu không khác gì với desktop application.
SPA có thực sự dễ phát triển?
Cái gì cũng có cái khó riêng của nó, SPA không khó, nhưng nó mới nên cần một khoảng thời gian ban đầu để làm quen (~2 tuần), còn việc phát triển một ứng dụng SPA theo mình thì đơn giản hơn phát triển 1 website truyền thống. Vì mình không cần phải thiết kế một trang web hoàn chỉnh, thay vào đó, chỉ cần phát triển từng services tương ứng, đối với từng trạng thái cụ thể SPA sẽ gọi những servies tương ứng.
Phát triển ứng dụng SPA như thế nào?
Hiện tại có khá nhiều cách để phát triển SPA, trong đó thì phương pháp sử dụng framework javascript là cách đơn giản, hiệu quả và được nhiều người biết đến nhất
Hiện nay có khá nhiều framework giúp bạn làm được việc này:
- AngularJS (mình sử dụng cái này)
- BackboneJS
- SailJS
Nhưng điểm yếu của SPA?
Không thể tối ưu cho các bộ máy tìm kiếm
Không sử dụng được browser history
Nếu hai vấn đề trên không phải là điểm bận tâm trong sản phẩm của bạn, thì SPA là một lựa chọn sáng suốt cho việc phát triển ứng dụng web ở thời điểm hiện tại.

BackboneJS
Để bắt đầu series các bài học về BackboneJS, trước hết tôi muốn giới thiệu về một khái niệm mà ngày nay được nhắc đến rất nhiều trong việc phát triển ứng dụng web hiện đại. Đó là: “Single page web application” (viết tắt SPA). Khi đó các câu hỏi của các bạn như: Tại sao lại SPA ? Tại sao lại Backbone ? sẽ dễ dàng có câu trả lời thỏa đáng.

Trong cuốn sách “Single Page Web Applications” của tác giả Michael S. Mikowski & Josh C. Powell có một ví dụ rất hay mà tôi dịch đại ý là: Tại thời điểm bạn đang đọc những dòng này chúng ta đã tiêu tốn 35 triệu phút chỉ để chờ một trang web được load xong, thời gian này bằng 96 lần thời gian đi từ một nơi nào đó đến Sao Hỏa và quay trở lại.

Có thể mỗi chúng ta chỉ tốn một vài giây để chờ trang web load xong nhưng đằng sau đó là cả một sự hao phí lớn về tài nguyên do các máy chủ phải xử lý các request này. Do vậy người ta mới đặt một câu hỏi là: “Tại sao một máy chủ phải liên tục xử lý các yêu cầu nhàm chán này? Có thể nào một trang web chỉ cần load một lần không ?”. Để giảm bớt sự lãng phí tài nguyên này người ta mới nghĩ ra khái niệm bộ nhớ cache, để lưu lại các trang web mà chúng ta đã đọc một lần rồi thì lần sau không cần phải gửi yêu cầu đến máy chủ load lại trang đó nữa, đơn giản chỉ cần lấy trong bộ nhớ cache của trình duyệt web ra.


Sau một thời gian, có những yêu cầu phức tạp hơn trong cuộc sống nảy sinh, ví dụ bạn cần trình diễn một slideshow ảnh, thì hiện tượng chớp liên tục do phải load lại cả trang web khi bạn click xem các ảnh tiếp theo gây ra sự khó chịu không hề nhẹ. Khi đó người ta sử dụng javascript – ngôn ngữ của web để giải quyết bài toán này. Khi đó các máy chủ có thời gian nghỉ ngơi và đẩy trách nhiệm cho trình duyệt web. Từ thời điểm này, người ta đã nghiên cứu và phát triển ra một giải pháp đó là: Single page web applications – Mọi thao tác người dùng chỉ diễn ra trên một khung trang web được load sẵn một lần duy nhất, kể cả việc chuyển trang cũng không làm cả trang web phải load lại. Mỗi phần từ trên trang web làm việc một cách độc lập hoặc có liên kết với nhau. Nếu phần từ nào cần tương tác với máy chủ thì tự nó đứng ra làm việc với máy chủ, tự gửi yêu cầu, nhận kết quả và hiển thị lại mà không ảnh hưởng đến các phần từ khác trên cùng một page. Điều này quá đỗi tuyệt vời và ngày nay nó được ứng dụng rộng rãi trong việc phát triển ứng dụng web hiện đại.

BackboneJS ra đời để phục vụ việc xây dựng các ứng dụng SPA này, nhưng sức mạnh của Backbone không dừng lại ở những ứng dụng nhỏ, khi nó kết hợp với RequireJS thì nó thích hợp cho việc xây dựng các ứng dụng lớn – huge SPA. Mà trong series học về BackboneJS & RequireJS mình sẽ nói kỹ hơn về bộ đôi này.

Trên đây mình đã giới thiệu một cái nhìn tổng quan về Single Page Web Applications và tại sao lại Backbone. Cảm ơn các bạn đã bỏ thời gian đọc và hi vọng nhận được phản hồi từ các bạn. Hẹn gặp lại các bạn trong các bài viết sau.