Hướng dẫn strength and weakness of php - sức mạnh và điểm yếu của php

Có quá nhiều lời chỉ trích về PHP. Dựa trên kinh nghiệm cá nhân của tôi khi làm việc với PHP, tôi muốn một số đánh giá về ngôn ngữ lập trình này. Các giá trị sau đây có thể so sánh với những thứ khác từ quan điểm PHP của lập trình web chứ không phải những người khác. Bài viết sẽ bao gồm 4 phần, phần đầu tiên sẽ nói về thiết kế và triển khai PHP.

Việc thực hiện của PHP

Như đã đề cập ở trên, tôi chỉ nói về PHP Web (không tính PHP chạy là dòng lệnh, thực sự CLI là một chút khác biệt nhưng không quá nhiều).

Kết nối với máy chủ web

PHP không được thiết kế để xử lý các yêu cầu trực tiếp nhưng thông qua máy chủ web (thường là Apache hoặc Nginx). Khi máy khách (Trình duyệt web / máy khách HTTP) gửi yêu cầu đến máy chủ web. Máy chủ web sẽ kết nối với PHP và tạo một quy trình độc lập để xử lý yêu cầu đó. Một tính năng là các quy trình đó không chia sẻ tài nguyên với nhau. Điều này có nghĩa là hai yêu cầu được gửi bởi hai máy khách tạo ra hai quy trình hoàn toàn riêng biệt để xử lý tài nguyên. Các tài nguyên riêng biệt bao gồm: RAM, CPU, kết nối ... Sau khi hoàn thành yêu cầu, kết quả được trả lại cho máy chủ web và máy khách, quá trình kết thúc. Tài nguyên được phân bổ (bộ nhớ, CPU, các kết nối I / O khác, v.v.) được phát hành.

Kết nối với tiện ích mở rộng PHP

PHP không được thiết kế dưới máy ảo như Java, PHP chạy trên Zend Engine. Zend Engine dịch mã PHP thành mã máy và thực thi nó. Tất cả các quản lý tài nguyên PHP được thực hiện bởi Zend Engine. Bản thân Zend Engine cung cấp một số thư viện để PHP được chạy trực tiếp mà không cần thư viện bên ngoài, nhưng hầu hết các thư viện đó là thư viện xử lý văn bản. Các thư viện PHP khác được viết dưới dạng các phần mở rộng, các thư viện này chủ yếu hoạt động với PHP thông qua Zend Engine. Nhiều quy trình I / O của PHP thông qua các thư viện bên ngoài, không hỗ trợ cốt lõi. Ví dụ: Kết nối DB, làm việc với HTTP, xử lý hình ảnh, v.v.

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

Hỗ trợ của cộng đồng vĩ đại: PHP sở hữu một trong những cộng đồng phát triển lớn nhất. Số lượng công việc trong PHP luôn nằm trong số hàng đầu. Vì một cộng đồng lớn như vậy, hầu như bất kỳ vấn đề kỹ thuật nào bạn gặp phải có thể có sự hỗ trợ ngay lập tức. Nếu bạn đã sử dụng các ngôn ngữ lập trình ít phổ biến hơn, bạn sẽ thấy cộng đồng quan trọng như thế nào.

Hỗ trợ rất tốt cho xử lý văn bản: PHP có rất nhiều xử lý văn bản liên quan đến văn bản tuyệt vời. PHP dựa trên Perl, một ngôn ngữ lập trình sinh ra để làm việc với văn bản. PHP là tuyệt vời để giải quyết các vấn đề liên quan đến văn bản, nhưng HTML hoặc Web là một vấn đề xử lý văn bản. Do đó, thật dễ hiểu tại sao PHP là ngôn ngữ phổ biến nhất để xây dựng các trang web.

Có nhiều phần mở rộng, khung, thư viện: cùng với việc sở hữu một cộng đồng lớn, PHP cũng sở hữu vô số thư viện, tiện ích mở rộng và rất nhiều khung. Do đó, PHP có thể giải quyết nhiều vấn đề khác nhau. Gần như đề cập đến bất cứ điều gì cũng có thể có các thư viện liên quan đến PHP. Do đó, mọi người đôi khi nghĩ về PHP là giải pháp cho tất cả các vấn đề.

Những điểm yếu

Mặc dù có điểm mạnh, PHP cũng có những điểm yếu chết người. Điểm yếu làm cho một số vấn đề PHP rất khó khăn hoặc thậm chí không thể giải quyết được.

Không chia sẻ tài nguyên: Vấn đề đầu tiên mà tôi cũng xem xét là giới hạn lớn nhất của PHP không phải là chia sẻ tài nguyên giữa các quy trình. Việc đóng khung quy trình là sự trợ giúp lớn cho PHP mà không phải giải quyết các vấn đề như quản lý bộ nhớ (nhà phát triển PHP không quan tâm nhiều đến việc này), sự cố hệ thống (một hoặc hai quy trình chết). Nó không có tác dụng đối với hệ thống). Tuy nhiên, điều này đã dẫn đến nhiều hạn chế khác.

Đầu tiên là việc không chia sẻ tài nguyên làm cho việc sử dụng tài nguyên (RAM, CPU, kết nối I / O) tăng rất nhanh. Hãy tưởng tượng có 100 yêu cầu được xử lý cùng một lúc, tương đương với 100 quy trình đang được chạy. Nếu cùng một biến được sử dụng, lượng RAM được sử dụng sẽ là 100 lần (các ngôn ngữ khác sử dụng cùng một RAM nên bộ nhớ đệm bộ nhớ rất đơn giản), số lượng kết nối DB phải là 100 kết nối cùng một lúc. . Khó mở rộng quy mô hệ thống, ngưỡng của PHP.

Thứ hai là nó có vẻ quá linh hoạt: điều này được nâng lên 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 rất dễ dàng, rất linh hoạt, làm cho nhà phát triển vô số cách để có được kết quả. Ngoài ra, thật dễ dàng để học rằng chất lượng của các nhà phát triển PHP thấp hơn nhiều so với hầu hết các ngôn ngữ lập trình khác. Chuyên môn kém đáp ứng một ngôn ngữ quá linh hoạt, kết quả thông thường là chất lượng mã kém, quá nhiều nợ kỹ thuật được tạo ra. Điều này làm cho việc duy trì một dự án PHP trở nên khủng khiếp (không đề cập đến khả năng tương thích ngược của các khung và một số yếu tố bên ngoài). PHP cũng có quá nhiều thư viện bên ngoài, đôi khi chất lượng là xấu, làm cho tình hình tồi tệ hơn.

Vấn đề thứ ba là nó phụ thuộc quá nhiều vào phần mở rộng: xử lý hỗ trợ từ cốt lõi của PHP rất hạn chế nên PHP phải phụ thuộc rất nhiều vào các thư viện mở rộng bên ngoài. Các tiện ích mở rộng bên ngoài không tương tác trực tiếp, nhưng làm việc với PHP thông qua Zend Engine. Cơ chế này cũng làm cho mọi thứ chậm hơn. Vì vậy, đôi khi các phần mở rộng không giúp cải thiện quá nhiều. Tôi lấy một ví dụ điển hình rất thường được kết nối với cơ sở dữ liệu. Trong khi các ngôn ngữ lập trình khác thường sử dụng nhóm kết nối để quản lý kết nối với DB. PHP sử dụng một cơ chế khác gọi là kết nối liên tục để tăng tốc kết nối.

Kết nối liên tục giúp khi hoàn thành yêu cầu, kết nối DB được tạo bởi yêu cầu đó không phải là "đóng" nhưng tiếp tục được sử dụng ở yêu cầu 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 yêu cầu chưa dừng lại, kết nối này không thể được chia sẻ với một yêu cầu khác (ngay cả tại thời điểm hiện tại, yêu cầu đó không thao túng DB). Điều này dẫn đến nếu PHP phải xử lý 100 yêu cầu đồng thời, sẽ có 100 kết nối với cơ sở dữ liệu (nếu tăng lên 1000, con số đó là 1000). Điều này hoàn toàn khác với cơ chế nhóm kết nối của các ngôn ngữ như Java. Nhóm kết nối đảm bảo rằng chỉ có tối đa kết nối X với DB được tạo (X được đặt bởi nhà phát triển). Ngay cả khi có 100 yêu cầu hoặc 1000 yêu cầu đồng thời đến máy chủ web tại thời điểm đó, số x không thay đổi (nếu có nhiều yêu cầu x cần kết nối cùng một lúc, sẽ có một số yêu cầu Để chờ đợi, xin lưu ý ở đây. Nó có thể có 1000 yêu cầu đồng thời nhưng đồng thời chỉ có 100 kết nối db và 900 yêu cầu khác đang xử lý một số dữ liệu khác). Điều này giúp Java kiểm soát số lượng kết nối với DB, do đó đảm bảo hiệu suất của DB, trong khi không thể thực hiện PHP.

Sau khi nhận được phản hồi từ nhiều bạn bè của tôi, tôi muốn cập nhật để xóa đánh giá liên quan đến I / O. không chặn trên thực tế, PHP có nhiều tùy chọn để hỗ trợ phần này. Phần hiệu suất của ngôn ngữ thực sự không phải là một vấn đề quá lớn, chủ yếu liên quan đến các vấn đề xử lý dữ liệu lớn hoặc hình ảnh và video.

Cuối cùng, nó không hỗ trợ I / O không chặn, hiệu suất kém: một trong những điểm yếu khác của PHP là nó không hỗ trợ I / O. , Quá trình đó sẽ "chờ" cho đến khi xử lý I / O được thực hiện. Trong quá trình chờ đợi đó, tất cả các tài nguyên của quá trình đó vẫn bị chiếm (đặc biệt là CPU). Một quy trình PHP mất ít tài nguyên hơn đáng kể so với các ngôn ngữ khác (ví dụ: Java Web). Nhưng 1.000 quá trình chạy cùng một lúc có giá cao hơn rất nhiều so với những người khác. Một điểm khác cần đề cập là các chức năng xử lý trong lõi của PHP cũng chạy chậm hơn nhiều khi so sánh với các ngôn ngữ lập trình khác. Nếu so với Java, nếu vòng lặp lớn có thể thấy PHP tệ hơn gấp trăm lần, so với C ++, thậm chí còn tệ hơn gấp ngàn lần.

Khi nào nên sử dụng PHP & NBSP; và khi không

PHP phù hợp cho các dự án:

  • Không quá phức tạp về mặt xử lý tính toán
  • Số lượng lượt truy cập là nhỏ hoặc trung bình, hoặc số lần truy cập là lớn, nhưng logic không quá phức tạp.
  • Đặc biệt phù hợp với các vấn đề liên quan đến giao diện web
  • Chất lượng nhà phát triển ở mức trung bình hoặc cao hơn (chất lượng Dev kém, sau đó khó làm việc)

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

  • Yêu cầu thời gian thực, cực kỳ kết nối với thời gian xử lý cực nhanh
  • Xử lý số lượng rất lớn các yêu cầu với logic rất phức tạp.
  • Cần xử lý dữ liệu lớn, các vấn đề dữ liệu lớn.

Kết luận

Mặc dù PHP không được thiết kế để giải quyết các vấn đề cực kỳ phức tạp, nhưng thực sự vẫn tốt để xử lý một lượng lớn yêu cầu và vẫn là ngôn ngữ lập trình mạnh mẽ. Ngoài PHP, nó rất tốt cho các vấn đề dựa trên web nói chung, đặc biệt là đối với các vấn đề liên quan đến bán hàng hoặc quản lý.

Các điểm mạnh của PHP là gì?

Tại sao sử dụng PHP ?..
Lựa chọn lớn của các chuyên gia có sẵn ..
Tài liệu dồi dào ..
Tốc độ tải được cải thiện ..
Lựa chọn nhiều cơ sở dữ liệu ..
Phần mềm nguồn mở rẻ tiền ..
Dịch vụ lưu trữ rẻ hơn ..
Khả năng kết hợp tuyệt vời với HTML ..
Linh hoạt tốt ..

Điểm yếu của PHP là gì?

Nó không an toàn do nguồn mở của nó, bởi vì tệp văn bản ASCII thường dễ dàng có sẵn.Nó không phù hợp cho các ứng dụng web dựa trên nội dung khổng lồ.Nó có một loại yếu, có thể gây ra dữ liệu và kiến thức không chính xác cho người dùng., because the ASCII text file is often easily available. It is not suitable for giant content-based web applications. It has a weak type, which can cause incorrect data and knowledge to users.

Tại sao ngôn ngữ PHP lại yếu như vậy?

Là một ngôn ngữ được đánh máy một cách lỏng lẻo, PHP tạo ra một số khả năng chính của lỗi.Ví dụ, ví dụ, mã của bạn cần đầu vào số nguyên và biến của bạn nằm trong một chuỗi.Là đầu ra không mong muốn nhất, toàn bộ chức năng sẽ bị phá vỡ.

Những lợi thế của các chức năng PHP là gì?

Ưu điểm của khả năng tái sử dụng chức năng PHP của mã: Không giống như các ngôn ngữ lập trình khác, các hàm PHP chỉ được chỉ định một lần và có thể được gọi là nhiều lần.Ít mã hơn: Nó tiết kiệm rất nhiều mã vì logic không phải viết nhiều lần.Bạn chỉ có thể viết logic một lần và sử dụng lại nó bằng cách sử dụng các chức năng.Reusability of Code: Unlike other programming languages, PHP Functions are specified only once and can be called multiple times. Less Code: It saves a lot of code because the logic doesn't have to be written several times. You can write the logic only once and reuse it by using functions.