NodeJS Xu hướng lập trình hiện nay. (PHP vs Nodejs)

11:16 HungPV7 Blog 1 Comments

Lịch sử Node.js tóm tắt
Node.js được Ryan Dahl giới thiệu 2009 cho phép lập trình JavaScript phía server. Trước đây JavaScript chỉ được coi là một ngôn ngữ đơn giản tạo hiệu ứng hoạt hình, tương tác phía trình duyệt. Cho đến khi Google Chrome sử dụng V8 engine, một bộ dịch, thực thi mã JavaScript nhanh nhất thế giới tính đến nay. V8 được viết bằng C/C++, mã nguồn mở, cho phép bên thứ 3 toàn quyền sử dụng, triển khai trên hệ điều hành khác nhau: Windows, Linux, Unix, MacOSX. Node.js được xây dựng trên V8 và thư viện LibUV cho phép lệnh thực thi hiện tại không ngăn các lệnh kế tiếp chạy luôn: cơ chế Non-Blocking I/O.

Cơ chế Non Blocking I/O giúp máy chủ tạo ít process (hoặc thread) hơn, ít phải luân chuyển giữa các thread để xử lý các tác vụ. Máy chủ web Nginx cũng là một ví dụ tốt Non Blocking I/O chạy tốc độ vượt trội, tốn ít bộ nhớ so với máy chủ Apache sử dụng thread switching và thread pool để hứng, xử lý các yêu cầu.
Khi tiến hành nhiều phép đo đạc tốc độ trên môi trường máy ảo giống hệt nhau về cấu hình, chúng tôi nhận thấy một thực tế không thể chối cãi, web site viết trên Node.js + Express luôn chạy nhanh hơn 1.5 - 2.5 lần web site PHP + Phalcon cùng cấu trúc, cùng hệ cơ sở dữ liệu, cùng cấu hình máy ảo. Trong nhóm các framework PHP, Phalcon luôn là đứng đầu bảng về tốc độ. Tốc độ xử lý của Phalcon trong vài trường hợp còn nhanh hơn cả HHVM. 
Có một số ý kiến cho rằng: hiện nay chi phí thuê máy chủ ngày càng rẻ. Chỉ với 20$/tháng, đã có thể thuê một máy chủ ảo hóa 2 core 3.4 GHz, 2 GRAM DDR3, 40 G ổ cứng SSD, rẻ hơn so với năm 2012 khoảng 4 lần. Vậy nếu PHP là một ngôn ngữ phổ biến dễ học, có rất nhiều framework tuyệt vời như WordPress, Joomla, Drupal, Magento, có sẵn các theme giao diện tuyệt đẹp chỉ mất khoảng 40 - 120 USD, người dùng có mọi thứ từ một bộ CMS ổn định đến giao diện đồ họa cấu hình là chạy. Tuy nhiên trang web load chậm không phải lúc nào cũng thiếu RAM hay CPU Core. Nếu xử lý không đúng chỗ thì việc bổ xung RAM, hay CPU Core không cải thiện được triệt để.
Thời gian tải trang (page load time) cốt tử cho sự thành bại của doanh nghiệp kinh doanh trên Internet
Thời gian tải trang (page load time) càng nhanh, trải nghiệm người dùng càng tốt, người dùng sẽ xem nhiều trang hơn, xác suất quyết định mua hàng dễ dàng hơn và ngược lại:
  • Hầu hết người duyệt web bỏ cuộc hoặc chuyển qua web site khác nếu phải chờ hơn 6-10 giây
  • Page load time từ 4 giây đã có 25% lượng người duyệt web bỏ đi
  • 1 giây chậm đi khi hiển thị trang, tỷ lệ chuyển đổi thành công từ xem sang đặt hàng (coversion rate) giảm 7%
Tham khảo thêm bài phân tích ở đây SEO 101: How Important is Site Speed in 2014? có thể tóm tắt thêm
  • 51% người mua hàng ở Mỹ phàn nàn web site quá chậm khiến họ không thể đặt hàng.
  • Năm 2010, một trang cần 6 giây để tải thì tỷ lệ chuyển đổi thành công giảm 40%, còn năm 2014, tỷ lệ này giảm sâu hơn còn 50%.
  • 47% người duyệt web muốn trang hiện ra trong vòng dưới 2 giây
  • Khi người dùng sử dụng di động, hành vi chuyển qua lại giữa các ứng dụng, web site càng gấp gáp và ngắn. Người dùng mất tập trung hơn, trang web chậm, giao diện kém thân thiện khiến người dùng nhanh chóng bỏ qua và không bao giờ quay lại lần 2.
PHP ngôn ngữ thống trị thế giới web
  • PHP được Ramus Lerdorf sáng tạo ra năm 1995, cách đây 20 năm. Phiên bản phổ biến hiện nay là 5.6. Bản 6.x gần như sẽ bị bỏ qua mặc dù đã được lên lộ trình và phát triển cách đây vài năm. PHP 7 đã ra mắt tháng 10  2015.
  • Thế mạnh của PHP đó là cộng đồng đông đảo, mã nguồn mở cực kỳ phong phú. Số lượng việc làm cho lập trình viên PHP lớn.
  • PHP dễ học và dễ viết: dev có thể chèn mã PHP cùng với mã HTML. Tư duy lập trình tuần tự, mã HTML của trang web có thể coi là một chuỗi được cộng lại rồi trả về trình duyệt
  • Web site PHP chạy tốt trong môi trường shared hosting. Một web server có thể  chứa nhiều web site con, có tên miền riêng biệt để giảm chi phí.
Điểm yếu của PHP có thể khiến PHP thoái trào hoặc ít nhất cho Node.js cơ hội vượt lên
  • PHP không hỗ trợ non blocking sẵn mà phải sử dụng một số thư viện như React đã rất cũ. Tư duy lập trình tuần tự blocking rất dễ với người mới học, dễ debug, nhưng rất tệ khi xử lý các tác vụ tốn thời gian, buộc các tác vụ kế tiếp phải đợi
  • PHP không hỗ trợ sẵn web socket mà phải sử dụng thư viện ngoài như Rachet không đảm bảo chạy trên tất cả các hệ điều hành. Việc không hỗ trợ lập trình Web Socket, real time notification, chat, khiến cho web site PHP buộc phải sử dụng công nghệ ngoài để hỗ trợ, và thường là Node.js, Socket.io hoặc mua dịch vụ ngoài như Zopim Chat
  • Callback được giới thiệu trong PHP 5.4 . Nhưng hầu hết lập trình PHP vẫn viết web site theo phương pháp cổ điển, tuần tự từ trên xuống dưới.
  • Rất nhiều lập trình phàn nàn về tốc độ thực thi của PHP. FaceBook sáng tạo ra HHVM để biên dịch mã PHP ra bytecode tương tự như Java - Java Virtual Machine. Phalcon viết thư viện framework bằng C biên dịch ra extension. Những cố gắng này rõ ràng được đền đáp trong một số trường hợp, nhưng nó không giải quyết hết gốc rễ của lập trình blocking. Trong công ty, có một nhân viên rất giỏi, xử lý công việc rất nhanh, ai cũng phải hỏi ý kiến anh ta, việc nào cũng đến tay anh ta, một ngày kia, nhân viên giỏi này bị ốm, hoặc có quá nhiều việc dồn dập đến, mọi nhân viên khác đều phải chờ đợi.
So sánh tốc độ PHP web site vs Node.js web site 
Hiện giờ chưa có nhiều benchmark nghiêm túc, công bằng để so sánh PHP vs JavaScript - Node.js. Vì trải nghiệm người dùng về tốc độ hiển thị trang web là quan trọng nhất, việc so sánh khập khiễng gây tranh cãi mất thời gian. Tôi cố gắng sử dụng các công nghệ hỗ trợ giống hết nhau, trên máy chủ giống hệt về cấu hình, tạo ra một lượng dữ liệu đủ lớn 50,000 bản ghi, một web site đủ độ phức tạp gồm khác với những các benchmark trước đây khá cẩu thả chỉ trả về một chuỗi Hello World đơn giản rồi dùng Apache Benchmark. Web site 2 đội cùng viết là gồm 100 category, mỗi category có 500 mặt hàng, có phân trang, có ảnh riêng cho từng mặt hàng.... Với Node.js site.

HungPV

You Might Also Like

1 nhận xét:

  1. 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.

    Trả lờiXóa