Điều gì khiến Meteor Js 1.3 trở nên đặc biệt?
Nội dung chính
Meteor Js là gì?
Meteor Js là nền tảng phát triển ứng dụng web thời gian thực fullstack, được viết cho cả client và server chỉ bằng ngôn ngữ Javascript. Được ra mắt từ năm 2012 và hiện tại đã đạt 33k stars trên Github, quá đỉnh đó chứ!
Giá mà…
Mình viết bài viết này chỉ dựa sau khi có kinh nghiệm nghiên cứu Meteor 1 thời gian, và đã quyết định chọn Meteor bắt đầu dự án lớn chỉ sau 1/2 ngày làm Todo app theo hướng dẫn! Giá mà mình có thể biết Meteor sớm hơn, đây là câu nói mình thốt ra sau khi biết Meteor :). Vậy Meteor 1.3 có gì thú vị?
Meteor Js 1.3 và những điều thú vị
Được viết hoàn toàn bằng ES2015(ES6)
ES2015 giúp cho việc viết code Javascript trở nên rõ ràng, có cấu trúc (class, let, const, arrow function, object destructing…), mặc dù chỉ mới ra mắt từ giữa 2015, nhưng với những tính năng mạnh mẽ khiến Meteor viết toàn bộ code lại qua ES2015, mang đến một hệ thống rõ ràng, uyển chuyển hơn. (Xem thêm ES2015 là gì)
Sử dụng NPM để cài đặt các thư viện
Meteor sử dụng hệ thống quản lý thư viện, thành phần mở rộng riêng của Meteor. Thật ra bản chất bên trong cũng đã có sử dụng NPM rồi, nhưng cần bọc thêm một lớp của Meteor bên ngoài để cài đặt phù hợp với cấu trúc của Meteor. Việc Meteor hỗ trợ cài NPM một cách riêng lẻ không phải mục đích để thay thế hệ thống quản lý gói này. Tuy nhiên, việc hỗ trợ NPM một cách riêng lẻ khiến cho việc viết code trở nên linh hoạt hơn vì NPM có số lượng package vô cùng phong phú. Nhưng bạn cũng cần chú ý là việc sử dụng NPM khiến việc bảo trì tính tương thích với các gói của Meteor cũng trở nên vất vả hơn nhé.
React
Thật ra điều này không mới, Meteor hỗ trợ AngularJs và ReactJs thì có từ 1.2 rồi nhưng từ 1.3 sẽ khác, một cách không chính thức bộ template engine Blaze sẽ bị thay thế bằng ReactJs. Rõ ràng ReactJs sẽ có ngôi vương cho việc thay thế phần View trong mọi framework, nên việc sử dụng chính React sẽ giúp cho ứng dụng của bạn linh hoạt hơn vì có tính tái sử dụng rất cao, sau này bạn có thể dùng component React cho một dự án khác một cách độc lập không phụ thuộc vào Meteor, đó là một ý tưởng rất tốt đúng không nào? (Blaze nay đã trở thành 1 gói riêng chứ không còn gắn kèm chung với Meteor nữa)
Application testing
Không phải tới 1.3 mới có test đâu, nhưng bản 1.3 hỗ trợ cả unit test và integration. Unit test (meteor test) thì test cho từng thành phần riêng lẻ, còn integration test (meteor test –full-app) sẽ nạp toàn bộ code của ứng dụng và giúp cho bạn test từng tiến trình để chắc chắn các thành phần (đã test unit) tích hợp ngon lành với nhau.
Cải thiện Cordova
Cập nhật các gói Cordova lên phiên bản mới nhất (Cordova 6.0.0, Cordova iOS 4.1.0, Android 5.1.1). Meteor đã viết lại lớp Cordova giúp dễ dàng kiểm soát lỗi trong ứng dụng iOS và Android hơn, hơn nữa còn có chế độ Hot Code Push có thể quay lại phiên bản trước nếu phiên bản hiện tại bị lỗi (Việc này không cần thông qua App Store hoặc PlayStore, bạn có thể xem thêm Microsoft CodePush)
Cải thiện minimongo
Do tính năng cần đồng bộ dữ liệu giữa server và client nên việc cải thiện minimongo sẽ giúp cho tốc độ của ứng dụng tăng lên đáng kể.
Kết luận
Để viết ứng dụng có tính chất Realtime thì React + Meteor Js 1.3 quả là một sự kết hợp hoàn hảo hơn bất kỳ bộ nào khác khi React quản lý phần view và phần còn lại là Meteor đảm bảo fullstack! Ngoài ra, vì AngularJs là một framework hoàn chỉnh nên việc sử dụng chung với Meteor cũng là một framework sẽ khiến một lượng code không cần thiết cùng tồn tại. Nếu bạn vẫn chưa biết tí gì về Meteor, hãy bỏ ra 2 giờ để ngâm cứu cái Todo Example (React) bạn sẽ thấy thích thú với tốc độ viết ra ứng dụng web realtime.
Cập nhật 2017: sau một số dự án sử dụng Meteor + React, mình nhận thấy Meteor không còn phù hợp vì quá trình phát triển gặp vấn đề về tốc độ build, thiếu hỗ trợ HMR (Hot module replacement). Mặc dù một số tính năng tuyệt vời của Meteor là không thể bàn cãi, nhưng đối với những dự án lớn, tốc độ build làm cho lập trình viên cảm thấy mệt mỏi, mình khuyến nghị sử dụng hệ sinh thái mới dựa trên Graphql và Next.js để đạt nhiều mục đích, hiệu quả hơn.
Khanh Nguyen
Bạn ơi cho mình hỏi giờ nếu bắt đầu học để làm app mobile thì nên học Meteor + Reactjs hay học luôn ReactNative vậy bạn. Mình biết ReactNative chỉ là view client thôi nhưng mình có thể tự do kết hợp với server khác ví dụ Firebase chẳng hạn.
Cái nào sẽ dễ và tiện hơn
Nguyễn Nhân
Chào bạn, theo mình thì nên dùng ReactNative + Firebase trước. Điểm yếu của Firebase là vấn đề chi phí, do vậy khi phát triển ứng dụng tận dụng hết gói miễn phí thì cân nhắc học Meteor. Vì với Meteor làm ứng dụng realtime cũng khá dễ, đáp ứng như Firebase. Điểm yếu của Meteor là phần deploy khá phức tạp, vì phải quản lý server, nodejs, cache, …, hoặc lại phải phụ thuộc nền tảng Galaxy của MDG(Meteor). Nên bạn không nên sử dụng Meteor nếu không có người hỗ trợ. Ngoài ra, về mặt công nghệ thì mình cũng đang theo dõi Apollo, tương tự Meteor nhưng sử dụng GraphQL, sẽ làm cho ứng dụng rất linh hoạt, không phụ thuộc vào mỗi MongoDB nữa. Mình sẽ có bài viết giới thiệu Apollo sắp tới, bạn đón đọc nhé :).
Khanh Nguyen
Cám ơn Ad đã trả lời chi tiết nhe
Ad cho mình hỏi thêm là: mình đọc tài liệu Meteor họ bảo có thể build ứng dụng sang hybrid app bằng cordova, thật là tiện lợi, nên mình muốn hỏi nếu chỉ dùng reactjs(ví dụ material-ui) + firebase thì có thể build sang app mobile như meteor không vậy. Ad có bài hướng dẫn nào không, cho mình đọc với
Nguyễn Nhân
Không những được mà là hoàn hảo đó, nhất là nếu lỡ kết Material-UI thì dùng Reactjs sẽ hay hơn là dùng React Native, vì đặc điểm của React Native là xây dựng ứng dụng có giao diện đồng nhất với hệ điều hành, nếu đem giao diện Material lên iOS thì khả năng bị choải là khá cao, cũng có nhiều thảo luận về vấn đề này rồi, đa phần là không thích. Về backend, người ta sử dụng Meteor là bởi vì muốn chủ động phát triển (mã nguồn mở), và không phải lo về các chi phí, dùng Meteor giống như “lấy công làm lời” đó, cá nhân mình thích Reactjs + Meteor hơn cũng vì lý do đó.
Khanh Nguyen
Ad ơi, ý mình muốn hỏi là làm sao để build được hybrid app từ reactjs ấy ạ, vì nếu làm bình thường thì reactjs chỉ ra ứng dụng web app thôi ạ. Mình đoán lò mò là sau khi build được web app bằng reactjs thì dùng phonegap hoặc cordova nhưng coi tài liệu thì vẫn không hiểu.
Ad có bài biết nào cụ thể không cho mình xem với
Nguyễn Nhân
Build hybrid khá đơn giản, ban đầu mình viết web bình thường dạng Single Page Application, có thể responsive để vừa web vừa mobile, SPA thì nó cần 1 file index.html chẳng hạn. Sau khi code xong, thì dùng cordova cấu hình trỏ vào file index.html là xong ah, ở đây có bài viết hướng dẫn từng bước khá hay, các bước đầu tiên chỉ là Reactjs, bước cuối cùng mới dùng Cordova để build: http://coenraets.org/blog/2014/12/sample-mobile-application-with-react-and-cordova/ . Hiện tại mình chưa có bài nào về cái này cả, nhưng có thể cũng sẽ viết bài, thấy chủ đề này hay đó chứ :).