Express, Koa, Meteor, Sails.js: Bốn framework của Apocalypse (phần cuối)

53

Meteor: Framework Cho Web, Mobile Và Desktop

Meteor là một JavaScript framework toàn diện. Khác với khuynh hướng đơn giản hóa của Express và Koa, Meteor hoàn toàn đi theo hướng ngược, tự khẳng định mình là full-stack framework, bao trùm cả server, mobile, destop và ứng dụng web.

Giải pháp toàn diện

Nếu bạn tìm hiểu kỹ hơn, bạn sẽ nhận thấy Meteor thực tế là Node.js+Blaze/AngularJS/React+Cordova+MongoDB. Node.js và MongoDB lần lượt đứng sau server side bussiness logic và data storage. Một trong số Blaze, AngularJS, hay React sẽ quản lý front-end UI. Và Cordova, giải pháp HTML nổi tiếng nhất cho ứng dụng lại mobile, kết đưa web page sang giao diện mobile.

Đồng bộ dữ liệu

Quy trình chủ đạo trong chia sẻ dữ liệu backend và front-end như sau:

  • client yêu cầu dữ liệu hoặc giao diện HTML cụ thể
  • Server nhận dữ liệu từ database, trộn dữ liệu với giao diện HTML sử dingj templating engine và gửi ngược lại front-end
  • Client render và thể hiện thân thiện dữ liệu/giao diện.

Một ứng dụng web modern single page sẽ tweak quá trình trên đôi chút. Xét ví dụ AngularJS, AngularJS sẽ đặt HTML template dưới dạng file tĩnh chung với những dữ liệu khác như file JavaScript, stylesheet và hình ảnh. AngularJS kế tiếp sẽ yêu cầu dữ liệu backend với Ajax RESTful API để lấp dữ liệu vào HTML template. Với tất cả trường hợp, lập trình viên back-end sẽ hoàn toàn chịu trách nhiệm xử lý yêu cầu thay đổi dữ liệu từ front-end và lưu thay đổi trong database.

Hơn nữa, Meteor còn có tính năng đặc biệt, đó là cơ chế đồng bộ dữ liệu giữa server và ứng dụng front-end/mobile.Trong Meteor, client sẽ giữ một shadow copy của mini-database (bản sao một phần nhỏ của server database, do client yêu cầu và được server ủy quyền). Khi client muốn thay đổi data, client sẽ dùng database API cố định như server để thực hiện chỉ thị CRUD, và rồi thay đổi trên dữ liệu sẽ được gửi tự động đến server và lưu trữ trong database thực. Nếu server phát hiện bất cứ thay đổi dữ liệu nào, server sẽ đẩy dữ liệu bị thay đổi đến client đứng tên những dữ liệu đó. Quá trình đồng bộ dữ liệu hai chiều này được thực hiện hoàn toàn tự động. Để có được “phép màu” này, Meteor sử dụng WebSocket để kết nối client và server, từ đó bất cứ thay đổi ở bên này, sẽ được đồng dạng áp dụng ngay đến bên kia.

Công cụ tự động

Không chỉ dừng lại ở ứng dụng web app và server, Meteor còn đơn giản hóa quá trình build ứng dụng iOS/Android với công cụ mang tên Isobuild và Cordova (thư viện giúp bundle HTML/JavaScript/CSS với chức năng native mobile). Ứng dụng mobile được tạo là ứng dụng lai, chạy JavaScript hoặc hiển thị trang HTML trong Webview. Tuy nhiên, vẫn có nguy cơ thay đổi UX so với native mobile apps. Với nhiều người, khả năng quản lý toàn bộ dưới cùng một code base với web apps là một điểm cộng to bự, giúp ta tiếm kiệm rất nhiều chi phí phát triển.

Nhìn chung, Meteor là framework tự động hóa cao. Tự động hóa cao sẽ giúp ích lập trình viên rất nhiều, tuy vậy, đổi lại hiệu suất sẽ thiếu ổn định và khả năng mở rộng bị giới hạn. Khi user base mở rộng, kỹ thuật đồng bộ dữ liệu tự động sẽ đi đến tắc nghẽn. Để đạt quy mô và hiệu suất như những công nghệ backend bằng tay khác, Meteor thường sử dụng nhiều tài nguyên băng thông và tài nguyên phần cứng hơn. Vì vậy, Meteor là điểm khởi đầu tuyệt vời, và một toolbox hoàn hảo cho những ai muốn chạy thử project trên mọi nền tảng chính, và tái thiết kế lại cấu trúc khi bản chạy thử đi vào production và client base mở rộng.

Sails.js: MVC Framework Mạnh Mẽ Cho Node.js

Sails.js có nhiều điểm tương đồng với Express. Sails.js là project generator, và engine middleware/templating. Trong thực tế, Sails.js được xây dựng dựa trên Express, cộng với các chức năng nâng cao giúp tăng tốc lập trình.

MVC

Sails.js kế thừa design pattern từ Model-View-Controller. Vỡi những ai chuyển từ Ruby trên Rails hay Laravel, bạn sẽ thấy cấu trúc của ứng dụng Salis.js rất quen thuộc. Model thể hiện model dữ liệu phản ánh sơ đồ table/collection của database, View là HTML view với dữ liệu đã điền, Controller là nơi bạn sẽ đặt tất cả business logic và là “keo dính” giữa dữ liệu và view.

Giao tiếp thời gian thực

Không như yêu cầu HTTP, người dùng phải liên tục truy vấn server data, hoặc kết nối polling rất lâu, từ đó đưa server vào idling mode, Socket.io thiết lập giao tiếp đa chiều dựa trên sự kiện giữa client và server. Sails.js tích hợp Socket.io và kết thúc với API có mức trừu tượng cao hơn. Từ đó có thể thấy, Sails.js cực kỳ thích hợp cho ứng dụng chat hoặc trò trơi trực tuyến.

Database ORM

Giữa vận dụng backend logic và database, có một layer ORM ở giữa (gọi là Waterline). Nói cách khác, công cụ ORM cung cấp cấp trúc cố định giúp truy cập nhiều database. Lập trình viên không phải lo lắng về nhiều loại ngôn ngữ truy vấn database khác nhau, SQL hay NoSQL, schema hay schema-less,…

Sails.js có mức tự động hóa thuộc tầm trung. Sails.js tập trung vào server side logic, và cung cấp tốc độ phát triển nhanh hơn Express, mà lại không có vấn dề về hiệu suất hay mở rộng trong tương lai.

Lời kết

Bài viết này không xếp hạng những framework Node.js trên, mà chỉ đơn thuần liệt kê những điểm mạnh yếu nổi bật của từng framework, từ đó giúp lập trình viên Node.js lựa chọn ra công cụ thích hợp nhất cho project của mình.

Nguồn: IDE Academy via Techtalk via Toptal (còn tiếp)