So sánh Nodejs với PHP: Nên chọn công nghệ web nào?

836

Bài viết được sự cho phép bởi tác giả Sơn Dương

Khi bạn là một tech leader được giao nhiệm vụ lựa chọn một công nghệ cho dự án tiếp theo của team. Có nhiều yếu tố để bạn lựa chọn một công nghệ hay một ngôn ngữ lập trình ví dụ như dùng Nodejs và PHP. Có thể liệt kê một số yếu tố như:

  • Khách hàng yêu cầu sử dụng công nghệ gì? Ngôn ngữ lập trình nào?
  • Bài toán mà dự án cần giải quyết là gì? Ví dụ: ứng dụng cần xử lý tác vụ nặng? Hay ứng dụng real time không?
  • Team của bạn có member giỏi về ngôn ngữ nào? Nodejs hay PHP là điểm mạnh của team.

Như bạn thấy đấy, để chọn được công nghệ phù hợp phụ thuộc rất nhiều yếu tố chứ không chỉ có yếu tố kỹ thuật.

Bài viết này mình sẽ so sánh Nodejs và PHP – hai công nghệ web nổi tiếng. Cùng xem ưu điểm và nhược điểm của chúng là gì?

#Nodejs là gì?

Phần tìm hiểu định nghĩa về Nodejs là gì thì mình đã có nói đến trong bài viết giới thiệu NodeJS. Bạn có thể đọc lại, mình đã giải thích rất chi tiết về Nodejs.

Tuy nhiên, ở đây mình chỉ nhấn mạnh một điều thôi. Đó là NodeJS không phải là một ngôn ngữ lập trình. Nodejs là một nền tảng sử dụng Javascript làm ngôn ngữ để xây dựng ứng dụng.

#PHP là gì?

PHP (viết tắt của Hypertext Preprocessor) là một ngôn ngữ lập trình kịch bản dành cho server. Mã nguồn PHP có thể nhúng vào HTML nhờ cặp thẻ <?php>.

PHP kết hợp với MySQL trở thành bộ đôi “song sát” của thế giới web. Với rất nhiều ứng dụng nổi tiếng sử dụng PHP như WordPress, Facebook…

Hiện PHP có rất nhiều framework như: Lavarel, Zend Framework, Yii PHP Framework… hoặc CMS mạnh mẽ: WordPress, Joomla… giúp bạn xây dựng ứng dụng web nhanh chóng và đơn giản.

Có lẽ nhiều bạn thắc mắc tại sao mình lại đi so sánh một nền tảng (nodejs) với một ngôn ngữ lập trình (PHP). Có phải quá khập khiễng không?

Thực ra, vì cả hai đều dùng để xây dựng ứng dụng web trên server. Nếu ghi đúng tiêu đề thì phải là so sánh hệ sinh thái giữa Nodejs và PHP.

Mà mọi sự so sánh đều khập khiễng. Chúng ta cứ thử tìm hiểu xem hai “ông trùm” này có thế mạnh và yếu như nào nhé!

#So sánh Nodejs và PHP – Cuộc chiến cân sức

Mặc dù cả PHP và Nodejs đều có thể xây dựng được những ứng dụng rất phức tạp. Rất nhiều hệ thống lớn sử dụng PHP hay Nodejs. Tất nhiên là PHP và Nodejs khác nhau hoàn toàn về tư tưởng và cả kiến trúc thiết kế.

Chúng ta cùng điểm qua một số chỉ số về PHP và Nodejs xem thế nào.

Đầu tiên là điểm qua 10 website lớn sử dụng hai công nghệ web này:

So sánh Nodejs và PHP

Về cơ bản thì những website lớn đều sử dụng qua lại hai công nghệ này. Nên ở điểm tin cậy thì hai công nghệ này coi như bằng nhau.

Nếu xét về mặt thuần ngôn ngữ thì sao? Xu hướng và cộng đồng sử dụng PHP và Javascript cũng tương đương.

So sánh Nodejs và PHP

Thử kiểm tra trên Google trend xem xu hướng sử dụng hai ngôn ngữ này:

So sánh Nodejs và PHP

Phần tiếp theo mình sẽ so sánh Nodejs và PHP với những ưu và nhược điểm của từng công nghệ này.

#Ưu điểm của Node.js

Ưu điểm của Node.js

1. Hiệu năng cực nhanh

Nodejs là nền tảng được xây dựng trên ngôn ngữ Javascript vì vậy Nodejs hỗ trợ kiến trúc hướng sự kiện (event-driven) và non-blocking I/O.

Do đó ứng dụng Nodejs có thể thể dễ dàng xử lý nhiều kết nối một cách dễ dàng.

Nhờ Nodejs xử lý bất đồng bộ các tác vụ nên chúng ta dễ dàng tạo các giải pháp phía máy chủ có khả năng tận dụng CPU khi phục vụ đồng thời nhiều yêu cầu cực tốt so với ngôn ngữ đa luồng như PHP.

Nhờ ưu điểm này mà Nodejs phù hợp với các ứng dụng kiểu không đồng bộ, dựa trên dữ liệu và các luồng công việc không ràng buộc I/O như RTA( Ứng dụng thời gian thực), SPA( Single page application)… Những ứng dụng kiểu như vậy, Nodejs luôn đảm bảo với hiệu năng tuyệt vời.

2. Sử dụng Javascript – một ngôn ngữ cho cả Server và client

Có rất nhiều frameworks dành cho client như Ember, React hay Angular được viết bằng ngôn ngữ Javascript.

Khi bạn sử dụng Nodejs cho server, bạn có thể sử dụng toàn bộ kiến thức về Javascript mà bạn biết cho server.

Đây là ưu điểm mà lập trình viên Javascript cảm thấy tự hào nhất so với các ngôn ngữ khác.

Sử dụng cùng một ngôn ngữ cho cả front-end và back-end là một lợi thế cho khả năng maintaince ứng dụng cũng như sự phối hợp giữa các thành viên trong team.

Bời vì lúc này, các thành viên trong team của bạn sẽ cùng sử dụng một ngôn ngữ Javascript, sử dụng cùng cấu trúc dữ liệu Javascript, syntax ngôn ngữ hay style convention… Tất cả góp phần đẩy nhanh tốc độ phát triển ứng dụng, sửa lỗi và co-work giữa các members.

3. Nodejs cực mềm dẻo

Nodejs không có nhiều quy tắc bắt buộc các lập trình viên phải tuân theo như Java. Bạn sẽ còn phải biết OOP là gì, không còn phải quan tâm SOLID là gì nữa…

Vì vậy, khi bạn sử dụng Nodejs, bạn sẽ tha hồ sáng tạo với nhiều cách viết code khác nhau.

Bản chất Nodejs là các module, chính các module là bộ phận xây dựng nên các tính năng hay ho cho ứng dụng Nodejs. Như ở bài viết trước: Bắt đầu học lập trình Nodejs, mình cũng có về NPM. Với NPM, bạn sẽ thoải mái sử dụng hàng trăm ngàn module miễn phí.

  So sánh Golang và NodeJS: Nên chọn nền tảng nào cho dự án của bạn?

  So sánh RDBMS và NoSQL. Nên sử dụng loại CSDL nào cho dự án của bạn?

#Nhược điểm của Node.js

1. Ít hiệu quả trong việc xử lý tác vụ cần nhiều CPU

Như các bạn cũng biết, Nodejs là môi trường xử lý đơn luồng và hướng sự kiện( event- driven) nên nó không thích hợp với các ứng dụng cần nhiều CPU. Những ứng dụng kiểu như xử lý ảnh, video… không nên sử dụng Nodejs để xây dựng.

Khi xử lý các tệp lớn hay thực hiện thao tác với đồ họa thì Nodejs có thể không phản hồi hoặc bị treo máy. Khi bạn xây dựng các ứng dụng kiểu như vậy thì nên nghĩ tới các công nghệ hỗ trợ đa luồng như PHP.

2. Thiếu sự kiểm duyệt chất lượng các module Nodejs

Mình cũng không biết cái này là ưu điểm hay nhược điểm nữa. Như ở trên mình có nói Nodejs được xây dựng dựa trên module. Thông qua NPM, bạn được phép sử dụng hàng ngàn module miễn phí.

Tuy nhiên, ngoài những core module như http, crypto… thì phần lớn module là do các bên 3rd-party phát triển. Mà hiện tại thì cộng đồng phát triển các module vẫn còn sơ khai, chất lượng các module thì “thượng vàng hạ cám”…

Ngay cả đến bạn cũng có thể dễ dàng tự tạo một module và publish lên NPM repository. Hệ sinh thái Nodejs vẫn chưa có một cơ chế kiểm duyệt chất lượng tốt.

Thế nên khi bạn sử dụng các module của Nodejs, bạn cần phải tỉnh táo mà lựa chọn cho mình module tốt nhất có thể.

Tuyển NodeJS lương cao hấp dẫn cho bạn

#Ưu điểm của PHP

Ưu điểm của PHP

1. Có nhiều frameworks tốt

PHP có rất nhiều platform tốt phục vụ việc xây dựng website như: WordPress, Joomla, Drupal… hay framework để tạo web app nhanh như Laravel, Symfony, ZendFramework…

Với sự hỗ trợ của các CMS như WordPress, bạn dễ dàng triển khai một blog hay một trang thương mại điện tử với đầy đủ chức năng.

PHP có lịch sử ra đời sớm nên cộng đồng cũng cực đông, có nhiều giải pháp mã nguồn mở được viết bằng PHP.

Ngoài ra, nếu bạn chọn PHP thì khả năng deploy cũng dễ hơn vì trên thị trường có nhiều nhà cung cấp hosting hỗ trợ PHP. Có thể kể đến các tên tuổi như: Hawkhost, A2 Hosting… Đây là ưu điểm dành cho nhà phát triển nhỏ lẻ với chi phí đầu tư ít.

Còn với Nodejs, bạn có rất ít lựa chọn hosting hỗ trợ, hoặc bạn chỉ có thể mua VPS và tự deploy mà thôi.

2. PHP là dành cho web

Không giống như Java hay Python hay những ngôn ngữ đa năng khác, ngay từ đầu PHP được thiết kế dành riêng cho thế giới web. Đó là lý do tại sao PHP có đầy đủ những tính năng để xử lý HTML, server và database (MYSQL nói riêng).

Với một giải pháp toàn diện cho máy chủ như PHP thì bạn không cần phải bận tâm về javascript trên trình duyệt vì tất cả các trang có thể được tạo và render trên máy chủ.

Điều này rất hữu ích nếu bạn muốn xử lý tập trung và tránh quá tải cho trình duyệt người dùng.

Tuy nhiên, việc render các trang phía máy chủ sẽ không phù hợp với các ứng dụng kiểu single page(Single Page Applications).

>>>Dành cho bạn muốn tìm hiểu lập trình web: Lập trình Front-end và những kinh nghiệm để đời

#Nhược điểm của PHP

1. Bị trộn lẫn giữa PHP và HTML

Cái đặc điểm này là thứ mình ghét nhất của PHP. Các bạn có để ý là chúng ta cứ phải mix code giữa PHP và HTML khi tạo trang web không?

Cá nhân mình thì muốn sự rạch ròi giữa PHP và các ngôn ngữ front-end (CSS, HTML, Javascript). Sự rạch ròi sẽ làm mình cảm thấy code thông thoáng và dễ debug hơn nhiều.

Chính vì đặc điểm này mà người ta nói PHP là ngôn ngữ không hỗ trợ tốt mô hình MVC. MVC là mô hình chuẩn của thế giới web rồi. Vì sự mix giữa PHP và HTML nên trong mô hình MVC, chúng ta sẽ khó phân tách rạch ròi giữa View và Controller.

Khi đó ứng dụng web sẽ khó mở rộng và thêm các tính năng mới sau này.

  Tìm hiểu về lập trình hướng đối tượng trong PHP

2. Sử dụng mô hình Client-Server cũ kĩ

PHP tuân theo mô hình client-server cổ điển. Tức là mọi request tới ứng dụng sẽ lần lượt thực hiện các bước như: khởi tạo ứng dụng, kết nối tới database, xử lý tác vụ, sau đó cấu hình thông số và render trang HTML để trả về cho browser.

Chính vì việc thực hiện tuần tự như vậy mà ứng dụng PHP sẽ chậm hơn đôi chút so với Nodejs. Khi mà Nodejs chỉ khởi tạo ứng dụng một lần và chạy mãi mãi.

Nhờ tính năng này mà Nodejs phù hợp hơn với các tính năng của HTML5 , AJAX  và websocket.

Mặc dù nhược điểm này của PHP có thể được giải quyết bằng Memcached. Tuy nhiên, Memcached không phải là một tiêu chuẩn của ngôn ngữ PHP.

Vậy giữa Nodejs và PHP thì đâu là lựa chọn đúng?

So sánh Nodejs và PHP

Để các bạn có thể trả lời những câu hỏi trên thì mình sẽ liệt kê một số câu hỏi phụ khác. Khi bạn trả lời được những câu hỏi đó tức là bạn sẽ câu trả lời cho câu hỏi chính: Chọn PHP hay Nodejs?

1. Điều khác biệt lớn nhất giữa Node.js và PHP là gì?

Là xử lý bất đồng bộ.

Trong khi Nodejs xử lý các tác vụ theo kiểu bất đồng bộ. Còn PHP thì tuần tự.

Trong lập trình, việc giao tiếp với các thiết bị ngoại vi như ổ cứng( HDD, SSD), network… hay thao tác với database gần như lúc nào cũng có.

Tuy nhiên chính các tác vụ này lại cần nhiều khoảng thời gian để thực hiện. Nếu trong khoảng thời gian nhàn rõi chờ đợi mà CPU không biết làm gì thì thật là lãng phí. Có thể mỗi khoảng thời gian đợi đó chỉ tính bằng ms (miliseconds) thôi nhưng đó là khoảng thời gian lớn đối với máy tính.

Nodejs đã tận dụng được thời gian nhàn rỗi đó của CPU, chính vì lẽ đó mà người ta bảo Nodejs nhanh là vậy.

PHP có cách tiếp cận khác đó là xử lý đa luồng (cũng là để tăng tốc độ ứng dụng). Tuy nhiên, đây không phải là tính năng chủ yếu của PHP nên ít người dùng.

2. Mình không có thời gian cho việc học code. Mình còn phải xem phim, lướt facebook, đi chơi với bạn gái… nền tảng nào sẽ dễ dàng hơn?

Câu trả lời là PHP, vì PHP có rất nhiều framework, cộng đồng developer lớn sẽ giúp đỡ bạn khi cần thiết.

3. Sử dụng Nodejs hay PHP thì chi phí phát triển ứng dụng web cao hơn?

Câu trả lời sẽ nêu tên chàng trai trẻ Node.js

Chân dài hơn, đẹp hơn nên bạn cũng sẽ phải tốn nhiều tiền hơn để nuôi em ấy. Chi phí cho nhân sự cũng như môi trường triển khai ứng dụng thì Nodejs có nhỉnh hơn PHP một chút.

Tuy nhiên nếu bạn còn lăn tăn về điều này hãy chú ý đến các ưu điểm của Node.js

#Kết luận

Như vậy, qua bài viết này chúng ta đã cùng nhau so sánh nodejs và PHP. Mỗi ngôn ngữ, mỗi nền tảng đều có ưu và nhược điểm riêng.

Để quyết định sử dụng công nghệ nào phụ thuộc vào mục đích và tình hình nhân sự của bạn.

Minh hi vọng bài viết sẽ có ích cho bạn. Đừng quên để lại comment ý kiến của bạn về vấn đề này nhé.

Hẹn gặp lại ở bài viết sau!

Bài viết gốc được đăng tải tại vntalking.com

Xem thêm:

Xem thêm Việc làm IT hấp dẫn trên TopDev