Chào các bạn, sau một thời gian không post bài mới về công nghệ thì hôm nay mình quay lại với Meteor và Angular 2. Và bài viết đầu tiên trong series, mình sẽ trình bày tổng quan về Meteor, sự kết hợp của meteor và một số công nghệ khác để hình thành nên những ưu điểm của Meteor, và cùng với đó là xu hướng lập trình ứng dụng web hiện tại, những thách thức và cơ hội cho các lập trình viên có hướng theo hướng lập trình web.

Bắt đầu bài viết mình sẽ trình bày về tổng quan của Meteor, các đặc trưng trong Meteor, khi nào thì sử dụng Meteor và khi nào thì không. Kế đến sẽ là những chia sẻ nhỏ về xu hướng, thách thức và cơ hội của Javascript nói chung và của Meteor nói riêng.
Tổng quan về Meteor:
Là một framework lập trình ứng dụng web mã nguồn mở sử dụng ngôn ngữ Javascript, xây dựng trên nền NodeJS với ưu điểm là xây dựng ứng dụng web cả 2 side, client-side và cả server-side. Bên cạnh đó, Meteor còn cho phép người dùng có thể xây dựng apps cross-platform code, build trên các nền tảng mobile như iOS, android và thậm chí là cả Desktop. Dưới đây mình sẽ trình bày cụ thể hơn về những lý do tại sao lại là Meteor, trường hợp nào nên dùng và trường hợp không nên dùng.
Tại sao lại là Meteor?
- Javascript được cho là một tương lai trong lập trình web, với những ưu điểm về phạm vi sử dụng, cài đặt đơn giản, không yêu cầu các ứng dụng đặc biệt, và có thể viết nhanh được một ứng dụng. Cụ thể hơn về số liệu minh chứng cho sự phát triển của Javascript các bạn có thể xem thêm tại đây.
- Một ngôn ngữ, dùng cho tất cả. (Lập trình viên front-end cũng có thể làm tốt phần back-end – lập trình viên full-stack).
- Có các gói thư viện có sẵn, giải quyết các vấn đề về bảo mật chi tiết hơn về các lỗi bảo mật có thể gặp phải mà Meteor đã hỗ trợ các bạn có thể xem tại đây.
- Xây dựng được các ứng dụng đa nền tảng như web, moible (iOS, android) khi kết hợp sử dụng Cordova.
- Có nguồn các gói thư viện phong phú, bản thân meteor đã có 1 repository để chứa các package của Meteor, tuy nhiên sau khi phiên bản Meteor 1.3 ra mắt, thì các package NodeJS cũng có thể được thêm vào và sử dụng như trên NodeJS.
- Sử dụng NoSQL để lưu trữ và trao đổi dữ liệu giữa client và server (2 database, 1 ở server và 1 ở client sử dụng MiniMongo), gọi là trao đổi vì Meteor sử dụng một giao thức truyền nhận dữ liệu gọi là Distributed Data Protocol (DDP) và công nghệ WebSocket để đồng bộ cơ sở dữ liệu giữa client và server. Việc sử dụng 2 cơ sở dữ liệu ở 2 phía giúp cho client có 1 trải nghiệm tốt hơn khi dữ liệu tương tác được lưu ngay tại client và sau đó sẽ cập nhật phía server và các client khác.
- Về các ứng dụng cross-platform, Javascript cũng có thể truy cập tới để sử dụng phần cứng thiết bị như Camera… và cụ thể hơn Google đã phát triển một dự án WebRTC cho phép chúng ta có thể sử dụng camera trên thiết bị đang sử dụng.
Khi nào thì dùng Meteor?
Được xây dựng để phục vụ cho các ứng dụng Single-Page, Meteor kết hợp với các front-end framework có thể xây dựng nhanh các ứng dụng Single-Page mà không cần tốn nhiều thời gian. Ngoài ra, với việc sử dụng giao thức DDP và Websocket, Meteor có thể xây dựng được các ứng dụng Real-time phục vụ cho việc cập nhật dữ liệu liên tục và các ứng dụng đòi hỏi push notifications cho người dùng.
Ngoài ra, với sự kết hợp của các công cụ trên, cho phép Meteor tận dụng tối đa ưu điểm của các công cụ đó để phát triển các ứng dụng một cách nhanh chóng (Rapid Software Development).
Khi nào không nên dùng Meteor?
Các bạn không nên sử dụng Meteor trong những trường hợp dưới đây và mình cũng sẽ trả lời tại sao lại như vậy.
- Khi chỉ xây dựng 1 trang web (website) mà không phải là 1 ứng dụng web (web application). Chắc hẳn việc Meteor kết hợp Websocket và DDP không để cho người dùng sử dụng giao thức HTTP chỉ để load 1 trang web tĩnh và không làm gì với Websocket và DDP. Thay vào đó có rất nhiều lựa chọn khác như là xây dựng 1 trang web tĩnh từ html/css/js, hoặc là sử dụng 1 front-end framework để xây dựng một trang web nói trên.
- Khi xây dựng 1 ứng dụng đã có sẵn phía backend và không muốn viết lại bằng Javascript, câu giải thích của mình cũng tương tự như việc chỉ xây dựng một trang web (website).
- Khi xây dựng web service / REST API và không có client. Nguyên nhân không sử dụng là vì Meteor sử dụng MongoDB trong việc quản lý dữ liệu, và với số lượng người dùng cực lớn thì đòi hỏi bộ nhớ phải dư dả, và bên cạnh đó, Meteor xây dựng với mục đích kéo frontend và backend xích lại gần nhau hơn, nên việc chỉ xây dựng 1 trong 2 sẽ ko tận dụng tối đa được những gì mà Meteor mang lại.
- Khi yêu cầu core MySQL trong ứng dụng, vì mongodb là một DBM xây dựng sẵn nên việc sử dụng có nhiều ưu thế hơn, tuy nhiên MySQL cũng đang trong quá trình xây dựng package cho Meteor, và PostgreSQL cũng đã có một package trong Meteor đó là: numtel:pg.
- Khi ứng dụng đòi hỏi hiệu suất cao:
- Ứng dụng game mobile có đồ họa nặng, thay vào đó thì NativeApp sẽ là lựa chọn tốt hơn.
- Ứng dụng có số lượng kết nối đồng thời cực lớn (nhiều người dùng), ở trường hợp này nếu sử dụng Meteor sẽ phải đòi hỏi bộ nhớ RAM lớn để có thế giải quyết vấn đề.
Chi tiết các bạn có thể xem thêm tại đây.
Cơ bản về Meteor chỉ có vậy, và trong series bài viết Meteor-Angular 2, chúng ta sẽ tìm hiểu kỹ hơn về các khái niệm sử dụng trong Meteor cũng như cú pháp sử dụng Meteor khi kết hợp với Angular 2.
Một điều quan trọng mình cũng muốn đề cập tới ở đây là việc sử dụng ngôn ngữ lập trình nào trong series bài viết, thì như mình đã trình bày ở trên là Meteor sử dụng Javascript, nhưng với Angular 2 thì team phát triển Angular 2 đề xuất sử dụng Typescript thay cho Javascript, về Typescript thì Typescript được phát triển bởi Microsoft dựa trên cú pháp của ES6 (Javascript 2015), với mục đích phát triển ứng dụng với các design pattern chuẩn, và nhất là tính chất hướng đối tượng trong lập trình để từ code Typescript có thể transpile sang Javascript để chạy. Và thêm vào đó thì việc kiểm tra kiểu dữ liệu của biến cũng được Microsoft mang vào trong Typescript, với các kiểu dữ liệu cơ bản như Int, String, … Cụ thể hơn trong quá trình học chúng ta sẽ tìm hiểu kỹ hơn về việc cài đặt môi trường làm việc với Typescript và làm quen với cú pháp của Typescript.
Đôi lời về Angular 2:

Về Angular thì vừa qua group cũng đã trải qua 1 khóa học Angular 2 từ codeschool.com các bạn có thể xem thêm để biết được Angular có thể làm gì và ý tưởng của nó như thế nào. Trong khuôn khổ bài viết mình sẽ chỉ đề cập tới những khái niệm chính và liên quan tới việc kết hợp giữa Meteor và Angular 2 và khi có thời gian thì mình sẽ cố gắng tổng kết lại và viết 1 bài riêng về Angular 2, mặc dù là riêng nhưng trong series này các bạn cũng sẽ được học rất nhiều thứ trong Angular 2, chỉ thiếu một số thành phần vụn vặt và mình sẽ bổ sung sớm nhất có thể sau khi hoàn thành series này.
Tổng kết

Tổng kết lại thì việc Meteor Development Group xây dựng nên framework này nhằm mục đích mang 2 khái niệm back-end và front-end lại gần nhau hơn và việc phát triển ứng dụng web cũng giống như một ứng dụng Desktop mô hình 3 tầng, tầng GUI (front-end developt), tầng DAO và BUS (back-end developt) và hơn nữa là ngôn ngữ sử dụng chính là Javascript cho cả front-end và back-end, thực ra trong quá trình học thì chúng ta không sử dụng Javascript mà thay vào đó là Typescript.
Trước khi bắt đầu vào Series nội dung chính thì một số thứ các bạn nên xem trước để khi đọc code các bạn chưa biết sẽ bớt phải gặp nhiều thắc mắc cùng lúc, vừa thắc mắc về nội dung, vừa thắc mắc về cú pháp, mà không phải chỉ thắc mắc mà quá trình đọc và hiểu của các bạn cũng sẽ giảm đi rất nhiều. 2 thứ mình muốn các bạn xem trước đó là ES6 và Typescript, về ES6 thì codeschool cũng có 1 course cho nó, tuy nhiên các bạn cũng có thể google và theo dõi những tính năng mới trong ES6, và Typescript cũng tương tự vậy, các bạn cũng chỉ cần quan tâm sơ về phần cú pháp, và mình không yêu cầu các bạn thuộc, chỉ cần biết nó làm gì và hiểu được ngay khi nhìn thấy, vì trong quá trình tự làm thì các bạn sẽ tự thuộc thôi, 😀 :D.. Không bắt buộc các bạn phải học những cái đó trước, nhưng nếu xem trước thì sẽ tiết kiệm thời gian nhiều hơn cho các bạn.
Tới đây mình hy vọng các bạn đã có thể biết được những thứ Meteor có thể làm, có một chút liên tưởng xem Meteor là gì và cụ thể hơn mình sẽ trình bày về vai trò của Meteor và Angular 2 nằm ở đâu trong ứng dụng của bạn, kết hợp như thế nào, và vì mình không có nhiều thời gian để có thể xây dựng 1 tutorial riêng, nên mình dùng tutorial này (Socially App) xuyên suốt quá trình viết bài, và mình sẽ trình bày lại theo quan điểm của mình cũng như theo những vấn đề mà mình đã gặp phải trong lúc làm việc. Bắt đầu thôi nào…
Tài liệu tham khảo
[1]. https://www.sitepoint.com/why-javascript-is-the-future-of-programming/
[2]. https://www.quora.com/Is-meteor-js-secure
[3]. https://wiki.dandascalescu.com/essays/why_meteor
[4]. https://www.angular-meteor.com/tutorials/socially/angular2/bootstrapping
Hồ Quốc Toản