Home » Đánh giá điểm mạnh và điểm yếu của PHP

Đánh giá điểm mạnh và điểm yếu của PHP

by Tan Nguyen
13 minutes read

Có quá nhiều ý kiến chê PHP, thế nên dựa trên những kinh nghiệm làm việc với ngôn ngữ này. Mình sẽ đánh giá những điểm mạnh và điểm yếu của PHP thông qua bài viết sau. Những đánh giá bên dưới so sánh với những thứ khác trên quan điểm PHP là Web Programing. Không so sánh với các mảng khác, và bài viết sẽ gồm có bốn phần. Phần đầu nói qua về cách thiết kế và thực thi của PHP, hai phần sau sẽ đánh giá điểm mạnh và điểm yếu của PHP dựa trên thiết kế đó, phần cuối mình viết khi nào nên sử dụng PHP, khi nào không:

Cách thức thực thi của PHP

Như đã nói ở trên, mình chỉ nói về PHP Web (ko tính đến PHP chạy dưới dạng Command Line, thực thế PHP CLI có khác một chút nhưng không quá nhiều).

Kết nối với Web Server

PHP không được thiết kế để trực tiếp handle request mà thông qua Web Server (Thông thường là Apache hoặc Nginx). Khi client (Web Browser/HTTP Client) gửi request lên Web Server. Web Server sẽ kết nối với PHP và tạo ra một tiến trình độc lập để xử lý request đó. Những tiến trình đó có thể là Process (với apache) hoặc thread (với Nginx/PHP-FPM). Đặc điểm là những tiến trình này không chia sẻ tài nguyên với nhau. Hai request của hai client gửi lên thì tạo hai tiến trình hoàn toàn tách biệt tài nguyên xử lý. Tài nguyên tách biệt bao gồm: RAM, CPU, kết nối… Sau khi request hoàn thành, kết quả trả về cho Web Server và client thì tiến trình đó kết thúc. Những tài nguyên đã được cấp phát (Bộ nhớ, CPU, kết nối I/O khác…) được giải phóng.
Kết nối với PHP Extension

Kết nối với PHP Extension

PHP không thiết kế dưới máy ảo như JAVA, PHP chạy trên nền Zend Engine. Zend Engine đảm nhận việc thông dịch mã PHP thành mã máy và thực thi nó. Toàn bộ việc quản lý tài nguyên của PHP được Zend Engine đảm nhận. Bản thân Zend Engine cung cấp sẵn một số thư viện để PHP có thể chạy trực tiếp mà không cần thư viện ngoài, tuy nhiên phần lớn những thư viện đó là những thư viện xử lý Text. Những thư viện khác của PHP được viết dưới dạng extension, những thư viện này chủ làm việc với PHP thông qua Zend Engine. Đa số những những xử lý I/O của PHP là thông qua thư viện ngoài chứ không phải hỗ trợ từ core: ví dụ kết nối DB, làm việc với HTTP, xử lý ảnh…

Kết nối với PHP Extension

Điểm mạnh

Đơn giản, linh động: 

Từ thiết kế của PHP, cộng với việc PHP là ngôn ngữ Script và cú pháp khá thoải mái nên nó rất linh động. Cú pháp PHP cũng rất dễ học nên rất nhiều người biết PHP. Với một người chưa biết gì về lập trình chỉ cần một khóa học vài ba tháng có thể bắt đầu với PHP và thậm chí có thể bắt đầu… kiếm tiền được rồi. Chính vì sự dễ dàng đó nên số lượng developer rất đông.

Support bởi cộng đồng lớn:

PHP sở hữu một trong những cộng đồng developer lớn nhất. Số lượng job về PHP cũng luôn thuộc hàng top. Hầu như vấn đề kỹ thuật nào bạn gặp phải cũng có thể có người hỗ trợ ngay lập tức. Nếu bạn đã từng sử dụng những ngôn ngữ lập trình ít phổ biến thì sẽ thấy tầm quan trọng của cộng đồng lớn đến thế nào.

Hỗ trợ xử lý text rất tốt:

PHP có rất nhiều phần xử lý liên quan đến text cực tốt. Được viết dựa trên Perl, một ngôn ngữ lập trình sinh ra để làm việc với Text.  PHP cực tốt để giải quyết các bài toán liên quan đến Text, mà HTML hay Web lại là bài toán xử lý text. Do vậy thật dễ hiểu tại sao PHP lại là ngôn ngữ phổ biến nhất để xây dựng các Website.

Có rất nhiều Framework, thư viện:

Cùng với việc sở hữu cộng đồng lớn, PHP cũng sở hữu vô số bộ thư viện, extension, rất nhiều Framework. Do vậy PHP có thể giải quyết rất nhiều bài toán khác nhau. Hầu như nói đến vấn đề gì cũng có thể có những thư viện liên quan để PHP. Do vậy đôi khi người ta còn tưởng PHP là lời giải cho mọi vấn đề.

Điểm yếu

Mặc dù có nhiều điểm mạnh nhưng PHP cũng sở hữu những điểm yếu chết người. Những điểm yếu khiến cho ở một số bài toán PHP rất khó giải quyết thậm chí không thể giải quyết.

Không chia sẻ tài nguyên

Vấn đề đầu tiên mình cũng nghĩ là vấn đề hạn chế lớn nhất của PHP chính là việc không chia sẻ tài nguyên giữa các tiến trình. Việc đóng khung các tiến trình giúp PHP không phải đối mặt với những vấn đề. Chủ yếu là: quản lý bộ nhớ (chả mấy khi PHP Developer quan tâm đến vấn đề này), crash hệ thống (một hai tiến trình chết thì chả ảnh hưởng gì đến hệ thống). Tuy nhiên việc này lại dẫn đến rất nhiều hạn chế khác. Điển hình là việc không chia sẻ tài nguyên khiến cho tài nguyên sử dụng (RAM, CPU,…) tăng rất nhanh. Bạn tưởng tượng cùng lúc có 100 request được xử lý, tương đương 100 tiến trình được chạy. Nếu một biến cùng được sử dụng thì số lượng RAM sử dụng sẽ là 100 lần.

Điều này hoàn toàn khác xa so với những ngôn ngữ như JAVA, .NET, Node JS…. Do vậy khi sử dụng PHP cho hệ thống lớn thì cực khó để scale hệ thống, ngưỡng của PHP.

Quá linh động

Đây được nêu ra như một điểm mạnh của PHP, nhưng cũng là điểm chết người của nó. PHP quá dễ, quá linh động, điều này khiến cho Developer có vô số cách để đạt được kết quả. Cùng với việc nó quá dễ để học khiến cho chất lượng của PHP developer thấp hơn khá nhiều so với đa số các ngôn ngữ lập trình khác. Chuyên môn kém lại gặp ngôn ngữ quá linh động, kết quả thường thấy là chất lượng code rất tệ.

Điều này khiến cho việc maintain một dự án PHP trở lên quá kinh khủng (Đấy là còn chưa kể đến tính tương thích ngược của những framework và một vài yếu tố bên ngoài nữa). PHP cũng có quá nhiều thư viện bên ngoài, đôi khi chất lượng cũng rất tệ khiến cho tình trạng càng trở nên tồi tệ hơn.

Phụ thuộc quá nhiều vào extension:

Những xử lý hỗ trợ từ Core của PHP rất hạn chế do vậy PHP phải phụ thuộc nhiều vào các thư viện Extension ngoài. Những Extension ngoài không tương tác trực tiếp mà làm việc với PHP thông qua Zend Engine. Cơ chế này cũng khiến cho mọi thứ trở lên chậm hơn. Do vậy nhiều khi Extension không giúp cải thiện quá nhiều. Mình lấy ví dụ điển hình rất hay xảy ra là kết nối Database. Trong khi các ngôn ngữ lập trình khác thường sử dụng Connection Pool để quản lý kết nối với DB. PHP sử dụng cơ chế khác là persistent Connection để tăng tốc kết nối. Persistent Connection giúp cho việc khi một request được hoàn thành thì kết nối DB tạo ra bởi Request đó không được “đóng” mà lại được tiếp tục sử dụng ở request tiếp theo.
Điều này giúp giảm thời gian kết nối với DB. Tuy nhiên khi Request chưa dừng thì kết nối này không được share với một request khác (cho dù ở thời điểm hiện tại, request đó không thao tác DB đi nữa). Nếu PHP phải xử lý 100 request đồng thời thì cần có 100 kết nối đến Database. Điều này hoàn toàn khác với cơ chế connection pool của các ngôn ngữ như JAVA. Connection Pool đảm bảo chỉ có tối đa x Connection đến DB được tạo ra (x do Developer set được). Kể cả có 100 request, hay 1000 request đồng thời đến Web Server ở thời điểm đó thì con số x không đổi. Điều này giúp JAVA kiểm soát được số kết nối đến DB, qua đó đảm bảo được performace của DB. Còn PHP thì không thể.

Vậy thì khi nào nên sử dụng PHP, khi nào không:

PHP phù hợp với những dự án:

  • Không quá phức tạp về mặt xử lý tính toán.
  • Số lượng truy cập ít hoặc trung bình, hoặc số lượng truy cập lớn nhưng logic không quá phức tạp.
  • Đặc biệt phù hợp với các bài toán liên quan nhiều đến giao diện Web.
  • Chất lượng Developer ở mức trung bình khá trở lên (Chất lượng dev kém qua thì khó làm việc).

PHP không phù hợp để phát triển các dự án:

  • Yêu cầu realtime, cực kỳ nhiều kết nối với thời gian xử lý cực nhanh
  • Sử lý số lượng rất lớn request với logic rất phức tạp
  • Cần xử lý Data lớn, các bài toán Big Data.

Tóm lại PHP tuy không thiết kế để giải quyết các bài toán cực kỳ phức tạp nhưng thực tế nó vẫn dùng tốt để handle lượng lớn request và vẫn là một ngôn ngữ lập trình mạnh. Ngoài ra PHP rất tốt cho những bài toán Web-base nói chung, nhất là những bài toán liên quan đến quản lý hoặc bán hàng. Mình đánh giá những điểm mạnh và điểm yếu của PHP trong bài viết dựa trên những gì mà mình đã biết. các bạn có gì bổ sung cứ cmt dưới bài viết nha.
P/S: Nếu tối ưu tốt PHP vẫn có thể Handle được lượng request rất lớn, lên đến khoảng vài chục ngàn req/ phút.
Xem thêm:

via topdev– source medium

5/5 - (2 votes)

Related Posts

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More

0
Would love your thoughts, please comment.x
()
x