2010-01-05 39 views
5

Theo this page, có vẻ như Perl, PHP, Python chậm hơn 50 lần so với C/C++/Java. Vì vậy, tôi nghĩ Perl, PHP, Python không thể xử lý ứng dụng quan trọng (chẳng hạn như> 100 triệu người dùng,> xx triệu yêu cầu mỗi giây). Ngoại lệ cũng tồn tại, ví dụ: facebook (người ta nói facebook được viết bằng PHP hoàn toàn), wikipeida. Hơn nữa, tôi nghe thấy google sử dụng Python rộng rãi.Ngôn ngữ lập trình nào phù hợp với phát triển ứng dụng quan trọng trên web?

Vậy tại sao? Phần cứng nhanh hơn có lấp đầy khoảng cách tốc độ lớn giữa C/C++/Java và Perl/PHP/Python không?

cảm ơn.

+3

Bước 1. Xác định các trường hợp bạn quan tâm. Bước 2. Xây dựng hệ thống để thu thập số cho những trường hợp này bằng nhiều ngôn ngữ khác nhau. Bước 3. So sánh, chọn một ngôn ngữ và thực hiện. –

+3

người ta thường nói rằng các lập trình viên vĩ đại có thể viết chương trình tuyệt vời bằng ngôn ngữ crappy, và một lập trình viên crappy có thể mã chương trình crappy bằng một ngôn ngữ tuyệt vời. vì vậy điều quan trọng hơn là cách bạn mã hóa nó, lựa chọn ngôn ngữ là thứ yếu. ;) – Lukman

+2

Nếu bạn cần chọn một ngôn ngữ nhanh để thực hiện một thuật toán đã biết, các tiêu chuẩn loạt đá luân lưu có ý nghĩa gì đó. Nếu bạn cần chọn một ngôn ngữ để viết một ứng dụng kinh doanh, các điểm chuẩn không có nghĩa là ngồi xổm. Vấn đề không phải là "ngôn ngữ nào có thể làm X nhanh hơn", bởi vì không có X đơn giản cho "doanh nghiệp của bạn". Hiệu suất và tính mạnh mẽ chủ yếu là do các lập trình viên của bạn giỏi như thế nào, không phải ngôn ngữ. – Schwern

Trả lời

5

Trang bạn đang liên kết chỉ nói một nửa sự thật. Tất nhiên các ngôn ngữ bản địa nhanh hơn các ngôn ngữ động, nhưng điều này rất quan trọng đối với các ứng dụng có yêu cầu tính toán cao. Đối với hầu hết các ứng dụng web, điều này không quan trọng lắm. Yêu cầu web thường được phân phát nhanh. Điều quan trọng hơn là phải có một khung công tác hiệu quả, quản lý tài nguyên đúng cách và bắt đầu các luồng mới để phục vụ các yêu cầu một cách nhanh chóng. Ngoài ra, hành vi thời gian không phải là khía cạnh quan trọng duy nhất. Ứng dụng đáng tin cậy và không có lỗi có thể đạt được tốt hơn với các ngôn ngữ động.

Và không, phần cứng nhanh hơn không phải là giải pháp. Trong thực tế, Google nổi tiếng với việc sử dụng một cụm máy móc rẻ tiền.

+0

Phần cứng nhanh hơn là giải pháp; Google đã quyết định sử dụng phần cứng hàng hóa hiệu quả hơn với khả năng chịu nhiệt cao. –

+0

Phần cứng nhanh hơn là giải pháp giúp ứng dụng được thiết kế phù hợp chạy nhanh hơn và có thể phục vụ nhiều người dùng hơn. Nó không phải là một giải pháp để làm cho một ứng dụng được thiết kế kém hoạt động tốt hơn. – kgiannakakis

+1

kgiannakakis + Robert Grant ergo, Google là ứng dụng được thiết kế kém –

2

không có trình biên dịch JIT trong php mà biên dịch mã thành mã máy

Một lý do khác là nhập động của PHP. Một ngôn ngữ kiểu động sẽ luôn luôn chậm hơn ..

nhấp chuột dưới đây và đọc thêm

What makes PHP slower than Java or C#?

+0

lý do bỏ phiếu xuống? !! – Hiyasat

+4

Khi downvoting, vui lòng thêm một bình luận giải thích lý do tại sao bạn downvoted, do đó, người dùng trả lời có thể có cơ hội sửa chữa chính mình, và cải thiện trong tương lai. –

+0

Câu hỏi không phải là tại sao một ngôn ngữ lại chậm hơn một ngôn ngữ khác, câu hỏi đó là tốt hơn cho phát triển web, do đó, nó trả lời sai câu hỏi. Hơn nữa, OP là nhầm lẫn rằng hiệu suất thô làm cho một ngôn ngữ tốt hơn và câu trả lời này chỉ cần nhiên liệu đó. – Schwern

3

(như> 100 triệu người dùng,> xx triệu yêu cầu mỗi giây)

Để đạt được điều đó loại hiệu suất, bạn sẽ phải thiết kế và thực hiện các trang web/ứng dụng như một hệ thống đa tầng có thể mở rộng với bản sao trên (có thể) tất cả các tầng. Tại thời điểm này, thực tế là một ngôn ngữ lập trình nhanh hơn/chậm hơn một ngôn ngữ khác có thể chỉ ảnh hưởng đến số lượng máy bạn cần trong trang trại xử lý của bạn. Thiết kế của kiến ​​trúc hệ thống là quan trọng hơn nhiều.

0

Google đang sử dụng Python cho GAE và Windows Azure đang cung cấp PHP. Kiến trúc LAMP là một kiến ​​trúc tuyệt vời cho ứng dụng.

Tôi cũng nghĩ rằng ngôn ngữ lập trình không quan trọng về hiệu suất. Điều quan trọng nhất là xem xét kiến ​​trúc của ứng dụng của bạn.

Tôi hy vọng nó giúp

0

Để phục vụ cho một trang web, bạn cần phải:

  1. Tiếp nhận và phân tích yêu cầu.
  2. Quyết định bạn muốn làm gì với yêu cầu.
  3. Đọc/ghi dữ liệu liên tục (cơ sở dữ liệu, bộ nhớ cache, hệ thống tệp)
  4. Dữ liệu HTML đầu ra.

"Tốc độ" của ngôn ngữ phía máy chủ chỉ áp dụng cho các bước hai và bốn. Do hầu hết các script cố gắng giữ bước 2 càng ngắn càng tốt và hầu hết các ngôn ngữ web (bao gồm PHP) tối ưu hóa bước 4 nhiều nhất có thể, trong bất kỳ trang web nghiêm trọng nào, phần lớn thời gian xử lý yêu cầu sẽ được chi trong bước 3.

Và thời gian dành cho bước 3 độc lập với ngôn ngữ phía máy chủ bạn sử dụng ... trừ khi bạn triển khai cơ sở dữ liệu và bộ nhớ cache được phân phối của riêng mình.

7

Mã tính toán là mối quan tâm ít nhất của tôi trong hầu hết các ứng dụng web sử dụng nhiều.

Các cổ chai trong một ứng dụng web điển hình tính khả dụng cao là (không nessecarility theo thứ tự này, nhưng nhiều khả năng nhất):

  1. Cơ sở dữ liệu (IO và CPU)
  2. file IO
  3. Mạng băng thông
  4. Bộ nhớ trên Máy chủ ứng dụng
  5. Mã Java/C++/PHP/Python

mối quan tâm chính của bạn để làm cho ứng dụng của bạn khả năng mở rộng là:

  1. Giảm quyền truy cập vào cơ sở dữ liệu (bộ nhớ đệm, với clustering trong tâm trí, quering thông minh)
  2. Distribute ứng dụng của bạn (clustering)
  3. Loại bỏ ổ khóa đồng bộ hóa vô dụng giữa các chủ đề (xem commons-pool 1.3)
  4. Tạo chỉ mục DB, mô hình dữ liệu và nhân rộng chính xác để hỗ trợ nhiều người dùng
  5. Giảm kích thước câu trả lời của bạn, sử dụng cập nhật gia tăng (AJAX)

Chỉ sau khi tất cả những điều trên được thực hiện, tối ưu hóa mã của bạn

Xin vui lòng bổ sung thêm vào danh sách nếu tôi bỏ lỡ một cái gì đó

1

C là dễ dàng ngôn ngữ nhanh nhất ra khỏi đó. Nhanh quá, chúng tôi viết các ngôn ngữ khác trong đó. Không ai nghiêm túc viết các trang web trong C. Tại sao? Nó rất dễ dàng để vít lên trong C theo cách rất khó phát hiện và nó hầu như không có gì để giúp bạn. Trong ngắn hạn, nó ăn lập trình và tạo ra lỗi.

Xây dựng ứng dụng mạnh mẽ, nhanh chóng không phải là về chọn ngôn ngữ nhanh nhất, khả năng bảo trì khoảng A) và khả năng mở rộng B).

Tính duy trì có nghĩa là nó không có nhiều lỗi. Nó có nghĩa là bạn có thể nhanh chóng thêm các tính năng mới và sửa đổi các tính năng hiện có. Bạn muốn một ngôn ngữ thực hiện càng nhiều công việc càng tốt cho bạn và không bị cản trở. Đây là lý do tại sao những thứ như Perl, Python, PHP và Ruby rất phổ biến. Tất cả đều được viết với sự tiện lợi của lập trình viên trong tâm trí về hiệu suất thô hoặc sự khéo léo. C được viết cho hiệu suất thô. Java đã được viết cho tidiness khái niệm.

Khả năng mở rộng có nghĩa là bạn có thể chuyển từ 10 người dùng thành 10.000 người dùng mà không cần viết lại toàn bộ nội dung. Điều đó có nghĩa là bạn đã viết mã chặt chẽ nhất mà bạn có thể quản lý, nhưng mã được tối ưu hóa cao thường khó bảo trì mã.Nó thường có nghĩa là làm việc vì lợi ích của máy tính, chứ không phải con người và doanh nghiệp. Đó là hy sinh bảo trì và bạn phải nói với ông chủ của bạn sẽ mất 3 tháng để thêm một tính năng mới.

Khả năng mở rộng những ngày này chủ yếu đạt được bằng cách ném phần cứng vào đó và song song. Có bao nhiêu quy trình và bộ vi xử lý và máy móc bạn có thể làm việc cho công việc của mình? Nếu bạn có thể đạt được điều đó, bạn chỉ có thể kích hoạt một máy tính đám mây giá rẻ khác khi bạn cần. Tất nhiên, bạn sẽ muốn tối ưu hóa một số, nhưng ở quy mô này, bạn nhận được nhiều hơn thế nữa trong việc thực hiện một thuật toán tốt hơn so với thắt chặt mã của bạn. Ví dụ, tôi đã dùng một ứng dụng PHP chậm chạp để xử lý 50 người dùng cùng một lúc, chuyển từ Apache với mod_php thành lighttpd với cân bằng tải, từ xa FastCGI quy trình cho phép song song với sự thay đổi mã tối thiểu. Một số hồ sơ cơ bản tiết lộ rằng khuôn khổ PHP họ sử dụng để nguyên mẫu là con chó chậm, vì vậy nó đã bị tước bỏ. Profiling cũng đề xuất một vài chỉ mục để làm cho các truy vấn cơ sở dữ liệu chạy nhanh hơn. Kết quả cuối cùng là một hệ thống có thể xử lý hàng ngàn người dùng và có thể thêm nhiều dung lượng hơn khi cần thiết trong khi hầu hết mã thực thi logic nghiệp vụ bị ảnh hưởng. Mất một vài tuần, và tôi thực sự không biết rõ về PHP.

Có thể có ích khi thực hiện lại các phần nhỏ, sắc nét bằng một ngôn ngữ rất nhanh, nhưng thông thường nó đã được thực hiện cho bạn dưới dạng một thư viện hoặc công cụ được tối ưu hóa. Ví dụ: máy chủ web của bạn. Đối với sự phức tạp và nhu cầu luôn thay đổi của logic kinh doanh, điều quan trọng là dễ bảo trì và mức độ hiệu quả của các lập trình viên của bạn. Bạn sẽ thấy rằng hầu hết các trang web được viết bằng PHP, Perl và Python vì chúng dễ viết, với các bit nhỏ, sắc nét được viết bằng những thứ như C, Java và exotics như Scala (ví dụ, Twitter) . Ví dụ: Wikia là một Mediawiki được sửa đổi được viết bằng PHP nhưng nó là biểu diễn (trong số các lý do khác) bằng cách thực hiện một heroic amount of caching.

+0

"Nhanh đến nỗi chúng tôi viết các ngôn ngữ khác trong đó" - đó là nhiều hơn nữa để làm với kỳ vọng rằng bất cứ phần cứng tồn tại một số trình biên dịch C sẽ hỗ trợ phần cứng đó. – igouy

0

Đối với php, có rất nhiều điều bạn có thể làm để tăng hiệu suất. Ví dụ

  • Php Accelerator
  • Caching Queries
  • Optimize Queries
  • Sử dụng một hồ sơ để tìm phần chậm hơn và tối ưu hóa

Những điều này chắc chắn sẽ giúp thu hẹp khoảng cách giữa các ngôn ngữ cấp thấp hơn. Vì vậy, để trả lời câu hỏi của bạn có những thứ khác bạn có thể làm bên trong mã để tối ưu hóa nó và làm cho nó chạy nhanh hơn

0

Tôi đồng ý với luc. Kiến trúc của nó thực sự quan trọng và không phải là ngôn ngữ lập trình.

Các vấn đề liên quan