- Trang chủ
- Giới thiệu
- Du học
- Đào tạo ngắn hạn
- Đào tạo chuyên sâu
- Tin Tức
- Học viên
- Blog
- Tin THPT
- Liên hệ
Ngày hôm nay, hãy cùng Giám đốc kỹ thuật Apecsoft, anh Trương Hoàng Linh tìm hiểu về Node Js. Node Js là gì? Node Js có những tính năng và ưu nhược điểm gì? Khi học Node Js cần những lưu ý gì? Đọc bài dưới đây để giải đáp những thắc mắc của bạn nhé.
"Node.js thực sự tỏa sáng trong việc xây dựng RESTful API (json). Gần như không có ngôn ngữ nào xử lý JSON dễ dàng hơn Javascript, chưa kể các API server thường không phải thực hiện những xử lý nặng nề nhưng lượng concurrent request thì rất cao." - Trương Hoàng Linh - Giám đốc kỹ thuật Apecsoft |
1. Anh có thể giải đáp cho người đọc hiểu Node Js là gì không?
2. Những ứng dụng của Node Js là gì?
3. Những ưu điểm và nhược điểm của Node Js là gì?
a. Ưu điểm.
Ngoài ra, tận dụng ưu điểm non-blocking I/O của Javascript mà Node.js tận dụng tối đa tài nguyên của server mà không tạo ra độ trễ như PHP
Với cơ chế event-driven, non-blocking I/O(Input/Output) và mô hình kết hợp với Javascript là sự lựa chọn tuyệt vời cho các dịch vụ Webs làm bằng JSON.
Nếu bạn định viết 1 ứng dụng thể hiện trên 1 trang (Gmail?) NodeJS rất phù hợp để làm. Với khả năng xử lý nhiều Request/s đồng thời thời gian phản hồi nhanh. Các ứng dụng bạn định viết không muốn nó tải lại trang, gồm rất nhiều request từ người dùng cần sự hoạt động nhanh để thể hiện sự chuyên nghiệp thì NodeJS sẽ là sự lựa chọn của bạn.
NodeJS sẽ tận dụng tối đa Unix để hoạt động. Tức là NodeJS có thể xử lý hàng nghìn Process và trả ra 1 luồng khiến cho hiệu xuất hoạt động đạt mức tối đa nhất và tuyệt vời nhất.
Các web thông thường gửi HTTP request và nhận phản hồi lại (Luồng dữ liệu). Giả xử sẽ cần xử lý 1 luồng giữ liệu cực lớn, NodeJS sẽ xây dựng các Proxy phân vùng các luồng dữ liệu để đảm bảo tối đa hoạt động cho các luồng dữ liệu khác.
Với sự ra đời của các ứng dụng di động & HTML 5 nên Node.js rất hiệu quả khi xây dựng những ứng dụng thời gian thực (real-time applications) như ứng dụng chat, các dịch vụ mạng xã hội như Facebook, Twitter,…
b. Nhược điểm.
Nếu bạn cần xử lý các ứng dụng tốn tài nguyên CPU như encoding video, convert file, decoding encryption… hoặc các ứng dụng tương tự như vậy thì không nên dùng NodeJS (Lý do: NodeJS được viết bằng C++ & Javascript, nên phải thông qua thêm 1 trình biên dịch của NodeJS sẽ lâu hơn 1 chút ). Trường hợp này bạn hãy viết 1 Addon C++ để tích hợp với NodeJS để tăng hiệu suất tối đa !
NodeJS, PHP, Ruby, Python .NET …thì việc cuối cùng là phát triển các App Web. NodeJS mới sơ khai như các ngôn ngữ lập trình khác. Vậy nên bạn đừng hi vọng NodeJS sẽ không hơn PHP,Ruby,Python… ở thời điểm này. Nhưng với NodeJS bạn có thể có 1 ứng dụng như mong đợi, điều đó là chắc chắn !
4. Khi nào thì nên sử dụng Node Js?
Node.js rất hấp dẫn. Nhưng khi bạn quyết định bắt tay xây dựng một dự án bằng Node.js, hãy đặt câu hỏi: “Tôi có nên dùng Node.js hay không?”. Và dưới đây là một trong số những câu trả lời cho điều đó.
Bạn KHÔNG nên sử dụng Node.js khi:
Bạn đừng mơ mộng đến Node.js khi bạn đang muốn viết một chương trình convert video. Node.js hay bị rơi vào trường hợp thắt cổ chai khi làm việc với những file dung lượng lớn.
Node.js không nhanh hơn PHP khi bạn làm các tác vụ mang nặng tính I/O như vậy. Ngoài ra, với sự ổn định lâu dài của các webserver script khác, các tác vụ CRUD của nó đã được tối ưu hóa. Còn Node.js? Nó sẽ lòi ra những API cực cực kỳ ngớ ngẩn.
Chỉ với 4 năm phát triển của mình (2009-2013), version của Node.js đã là 0.10.15 (hiện tại tới thời điểm này là v0.10.35). Mọi API đều có thể thay đổi – một cách không tương thích ngược – hãy thật cẩn thận với những API mà bạn đang dùng, và luôn đặt câu hỏi: “Khi nó thay đổi, nó sẽ ảnh hưởng gì đến dự án của tôi?”
Node.js cực kỳ nguy hiểm trong trường hợp này, bạn sẽ rơi vào một thế giới đầy rẫy cạm bẫy, khó khăn. Với phần lớn các API hoạt động theo phương thức non-blocking/async việc không hiểu rõ vấn đề sẽ làm cho việc xuất hiện những error mà thậm chí bạn không biết nó xuất phát từ đâu? Và mệt mỏi hơn nữa: Khi cộng đồng Node.js chưa đủ lớn mạnh, và sẽ ít có sự support từ cộng đồng. Khi mà phần lớn cộng đồng cũng không khá hơn bạn là bao.
Vậy bạn nên dùng Node.js khi nào?
5. Quá trình học Node Js có khó không và bản thân anh đã học như thế nào?
Với những ai từng học lập trình hướng đối tượng thì nó sẽ quả là khá khó chịu với function programing hay đơn giản là kiểu dữ liệu không định kiểu.
Bản thân tiếp cận với Js từ năm 2011 do làm nhiều lập trình phía frontend. Thấy ngôn ngữ javascript khá hay và nó có gì đó khác biệt với các ngôn ngữ khác. Mà Node Js phát triển trên nền Js nên việc tiếp cận nó cũng không có gì nhiều khó khăn. Việc học Node Js thời kỳ 2013 gần như là tự học vì cũng ko có trường lớp nào dạy bạn. Bạn phải tự mày mò nghiên cứu và ứng dụng. Thời kỳ đó mình ứng dụng để làm những phần nhỏ nhỏ như chat, thông báo.
Có một chút khó khăn nho nhỏ: Đó là việc xử lý bất đồng bộ trong Node.js, nhưng cũng đã có thư viện hỗ trợ. Sau này cộng đồng Node.js lớn mạnh và có rất nhiều thư viện hỗ trợ. Đến năm 2016 thì được làm việc với Node.js để khai thác trên data có sẵn của hàng chục triệu người dùng thông qua ứng dụng mạng xã hội quốc gia về giáo dục cho phân khúc từ mầm non đến trung học phổ thông.
6. Cơ hội làm việc của ngành này tại công ty anh như thế nào và ở ngoài xã hội như thế nào theo đánh giá của anh?
Hiện tại công ty đang phát triển nhiều sản phẩm nâng cao trải nghiệm người dùng, phát triển nhiều app nên công ty cũng tuyển liên tục. Nhưng việc tuyển được lập trình viên Node.js kinh nghiệm cũng không phải điều dễ. Lương của lập trình viên Node.js có kinh nghiệm cũng tương đối cao. Lương thấp nhất cho một lập trình viên Node.js có kinh nghiệm cũng không dưới 20 triệu. Nhiều lúc công ty cũng tuyển những bạn có nền tảng về Javascript sau đấy sẽ đào tạo kiến thức và kinh nghiệm về Node.js cho nhân sự mới.
Các công ty bên ngoài cũng tuyển rất nhiều. Vì thời điểm công nghệ 4.0 các sản phẩm hướng đến trí tuệ nhân tạo, tối ưu trải nghiệm người dùng. Các ứng dụng trên di động phát triển mạnh mẽ, Node.js càng trở nên hot hơn bao giờ hết nên việc tuyển dụng các nhân sự có kinh nghiệm về Node.js cũng vô cùng khó khăn. Trong thời gian tới số lượng lập trình viên Node.js sẽ gia tăng hơn vì rất nhiều bạn đã và đang tham gia vào những dự án lập trình phía frontend như angular, vuejs, jeact,…mà những framework này lập trình trên nền tảng kiến thức về Js. Nên khi tiếp cận Node.js sẽ dề dàng hơn rất nhiều.
Khi bạn đã làm việc được với angular, vuejs, jeact phía frontend trên nên tảng Js, phía server bạn dùng Node.js thì sẽ vô cùng thuận lợi khi cả client và server được viết cùng một nền tảng Js. Do vậy việc kế thừa dùng lại giúp dự án của bạn tiết kiệm được rất nhiều thời gian.
7. Anh đã mắc phải sai lầm nào trong quá trình làm việc chưa? Và đã khắc phục nó như thế nào?
- Trước kia vào năm 2012 khi làm dựa án office(sản phẩm cho quản trị doanh nghiệp) trên nền PHP tôi và một bạn nữa nằm trong đội viết core. Tôi và bạn ấy thâu đêm để xây dựng lên một bộ core theo chuẩn MVC, tất cả dựa trên core thuần mà không dựa vào bên thứ 3. Chúng tôi cũng ko dùng thư viện sẵn Jquery và viết riêng môt thư viện dựa trên Javascript thuần để xây dựng các control, ứng dụng Node.js vào trong khi Node.js chưa thịnh hành...Mục đích của chúng tôi là tự động được càng nhiều càng tốt, control đến mọi ngõ ngách của framework nhưng lại khó cho các DEV tiếp cận trong giai đoạn đầu. Chúng tôi đã đập đi, chỉnh sửa để dễ tùy biến nhất, nhưng cũng control được mức độ sâu nhất rồi cũng phải thích ứng với sự thay đổi nhanh nhất.
Từ một sản phẩm năm 2012 - 2014 chỉ có 5 nhân sự và gần như không có khách hàng thì đến nay đã có trên 100 tính năng, trên 1000 khách hàng sử dụng, gần 100.000 tài khoản trả phí
Bài học rút ra ở đây tôi thấy: Chạy theo công nghệ quá cho một sản phẩm chưa chắc đã tốt, nó chỉ tốt khi bạn và những người trong team control thực sự được nó. Lựa chọn đúng và có giới hạn.
- Năm 2017 tôi lại làm một dữ án dữ liệu quốc gia. Dữ liệu lên tới hàng chục triệu bản ghi, chúng tôi dùng một thư viện của bên thứ 3 nhưng chỉ là bản crack team gồm 10 người làm trong 2 năm đang chạy ổn định, hacker dựa vào lỗ hổng của bản crack để tấn công. Nhưng rất may là phía đối tác đã kết nối công ty bảo mật để tìm lỗ hổng của hệ thống. Nếu phía đối thủ tìm ra và đánh thì thực sự nguy hiểm đến sự an nguy của công ty.
Sau vụ này chúng tôi đã không còn tiếc vài nghìn đô để xử lý việc tưởng chừng như vô cùng nhỏ. Nhưng khi bạn làm những dự án lớn thì một cái nhỏ thôi nó có thể giết chết cả môt hệ thống lớn.
8. 3 bài học nghề nghiệp quan trọng nhất mà anh đúc rút cho bản thân là gì?
9. Những kỹ năng nào cần thiết cho một Node Js Developer?
10. Anh có thể cho những bạn đang theo học Node Js một số lời khuyên được không?
- Thời gian đầu bạn nên học thật chắc kiến thức cơ bản của javascript như hằng, biến, mảng, đối tượng, biểu thức, vòng lặp,...
- Sau đó xây dựng các bài tập và ứng dụng nhỏ dựa trên kiến thức cơ bản trên.
- Sau đo bạn học và làm với những thứ nâng cao trong javascript như cấu trúc dom, xử lý dom.
- Rồi tìm kiểu các kiến thức nâng cao như javascript design patterns
- Hiểu về callback, try catch, cách xử lý chuyên sâu vơi class object trong javascript,...
- Dựa vào các kiến thức nâng cao để xử lý lại các bài toán cơ bản phía trên.
- Dựa vào các kiến thức nâng cao để xây dựng các bài toán phức tạp hơn phía client như viết các control multiselect, listcheckbox
table,...trên javascript thuần và các đối tượng html.
- Tiếp tục học thư viện jquery để biết cách sử dụng nó cũng như học trong lõi của nó để sâu hơn về kiến thức javascript nâng cao
- Sau đó bạn tiếp tục làm quen và thực hành với một trong các framework phía client: angularjs, vuejs, jeact,...Nhưng bạn cũng
có thể bỏ qua bước này để làm việc với nodejs luôn.
- Tiếp đến bạn nghiên cứu và làm việc vơi nodejs:
+ Hiểu và làm việc với NPM hoặc Yarn nó là công cụ để quản lý các thư viện lập trình Javascript cho Nodejs được cồng đồng
lập trình viên tạo ra hàng trăm nghìn những thư viện js giúp cho dự án phát triển nhanh chóng.
+ Làm việc với express framework
+ Làm việc với các thư viện xử lý với database dạng có quan hệ: thư viện mysql, sequelize,...
+ Làm việc với mongoDB(database không có quan hệ) các thư viện như mongoose,...
+ Làm những ứng dụng nhỏ như: chat, thông báo, hoạt động,....
+ Làm việc với các thư viện quan trọng: async, lodash, underscore, bower, moment, grunt, socket.io
+ Upload file, xử lý đơn luồng đa luồng.
- Bạn nên cố gắng để được tham gia vào những dự án bigdata nhiều người dùng cùng một lúc có thể dưới vài trò là một thực tập viên để học hỏi kinh nghiệm.
- Bạn cũng có thể tạo ra môi trường để mình thử nghiệm trong quá trình học.