27/10/2018, 23:46

Express và Sails? Cái nào tốt hơn (Phần 2)

Chào mừng các bạn tới với phần 2. Trong phần này mình sẽ so sánh về xây dựng một Web App chung trong một source code. Webapp chung trong một bộ source code Trong bài viết hôm trước , mình đã chứng minh cho các bác thấy là Express thắng thế nếu các bác muốn xây dựng server ...

Chào mừng các bạn tới với phần 2. Trong phần này mình sẽ so sánh về xây dựng một Web App chung trong một source code.

Webapp chung trong một bộ source code

Trong bài viết hôm trước, mình đã chứng minh cho các bác thấy là Express thắng thế nếu các bác muốn xây dựng server và client tách biệt. Vậy nếu xây dựng cả 2 trong một bộ source code thì sao, tức là server của chúng ta không chỉ cung cấp api mà cả client file nữa.

Phương thức xây dựng

Cách 1: Ta sẽ serve file tĩnh (static) trong một folder (Y chang như nginx đấy các bác).

Cách này thì chả khác gì tách biệt so với mình nói trong phần 1 nhưng lại dùng Nodejs để serve static file. WTF, Nodejs đâu có sinh ra để làm việc đấy đâu, việc đấy là của Nginx, Apache,… cơ mà . Nodejs có thể serve static file nhưng chắc chắn, chắc chắn không thể nào tối ưu bằng Nginx hay Apache được.

Mời các bạn đọc bài phân tích ở đây http://kipalog.com/posts/Cai-thien-toc-do-load-trang-cua-Express—Dung-serve-static-file-bang-nodejs

Cách 2: Dùng template engines, nếu dùng theo cách này thì chúng ta sài nodejs giống như kiểu php cổ điển.

  • Lấy data từ DB
  • Xử lý
  • Gửi cho template
  • Render template rồi gửi về cho trình duyệt

Đối với mình, Nodejs là dùng ngôn ngữ JavaScript và nó hoàn toàn có lợi thế rất rất lơn nếu sử lý data thông qua JSON.

JSON (JavaScript Object Noattion) là 1 định dạng hoán vị dữ liệu nhanh. Chúng dễ dàng cho chúng ta đọc và viết. Dễ dàng cho thiết bị phân tích và phát sinh. Chúng là cơ sở dựa trên tập hợp của Ngôn Ngữ Lập Trình JavaScript, tiêu chuẩn ECMA-262 phiên bản 3 – tháng 12 năm 1999. JSON là 1 định dạng kiểu text mà hoàn toàn độc lập với các ngôn ngữ hoàn chỉnh, thuộc họ hàng với các ngôn ngữ họ hàng C, gồm có C, C++, C#, Java, JavaScript, Perl, Python, và nhiều ngôn ngữ khác. Những đặc tính đó đã tạo nên JSON 1 ngôn ngữ hoán vị dữ liệu lý tưởng.

Vậy tại sao ta không xây dựng API server, xuất ra JSON không đẹp trai hơn là phải render ra html thả về ah .

Mình đã nói lên cả 2 cách và đã nêu ra nhược điểm của cả 2. Tuy nhiên nếu bác nào “Tao thích code như vậy đấy, còn ngon hơn của mày chán ” thì đọc tiếp nhé!

Express

Nếu muốn làm điều này ở Express thì các bác phải cài thêm middleware express.static (cái này có tích hợp sẵn trong core của Express). Vậy là có thể serve static file trong folder mà các bác cấu hình.

Còn nếu muốn dùng template engines thì cài đặt về, thêm vào express rồi chạy. VD với template engines pug nhé(trước đây nó tên là Jade)

Load nó vào express

Tạo file template mẫu ./view/index.pug

Render chạy thử xem sao nào 

node app.js xem thử đi nhé, em lười lắm .

Cũng không đến nỗi khó khăn, hay dài lắm ha.

Sails

Sails thì còn nhanh hơn nữa, nó cài đặt hết cả folder serve static file, cả template engines luôn (Mặc định là EJX).

Muốn serve static file? Thả file vào trong folder ./assets

Muốn sài template? Thả file template vào folder ./views

Ez life huh? Sails cũng hỗ trợ grunt nên các bác cũng có thể cài đặt, thêm task nào đó,.. Tuy nhiên càng nhiều thì mỗi lần sails lift lại càng rùa bò thêm  như trong phần 1 mình đã nói.

Nói đến Web app thì không thể thiếu một phần rất quan trọng đó là Socket

Socket là một giao thức kết nối giữa 2 thằng server và client. Kết nối này là xuyên suốt, kiểu như thằng này nói cái gì thì thằng kia nghe được vậy. Không như http là client gửi request thì server mới được trả response về. Kết nối socket là hai chiều.

Socket thì ứng dụng nhiều thứ lắm game nè, chat nè,.. nói chung là tất cả các thứ dùng realtime thì đều nên nghĩ tới tới socket đầu tiên hết. Và đối với Nodejs thì hãy nghĩ tới socket.io

Socket.IO enables real-time bidirectional event-based communication.

It works on every platform, browser or device, focusing equally on reliability and speed.

Express

Đối với express thì cũng khá là lăng nhằng. Bạn cài đặt socket.io, load vào Express, config Express, config Client kết nối với socket.io

Chi tiết

  • http://www.programwitherik.com/socket-io-tutorial-with-node-js-and-express/
  • http://socket.io/docs/

Sails

Sails thì nó soạn sẵn cho các bác rồi, include sails.io.js vào client, đọc xíu document là quẩy thôi 

Chi tiết http://sailsjs.org/documentation/concepts/realtime

Qua đấy bạn thấy, nếu muốn xây dựng một webapp all-in-source thì sails là Number 1

Kết luận

Qua 2 bài viết, chắc các bạn cũng thấy ExpressSails khác nhau ở chỗ nào.

Nếu muốn xây dựng server và client tách biệt thì hãy dùng Express viết api, đơn giản, nhanh gọn, nhẹ.

Nếu muốn xây dựng web app chung vào một bộ source, phức tạp, yêu cầu nhiều chức năng như session, cookie, socket, template,… thì hãy nghĩ ngay tới sails.

0