2008-12-04 46 views

Trả lời

25

Một lý do khác là trên một máy chủ lớn tốc độ thực thi không phải là vấn đề lớn như tốc độ kết nối. Hầu hết thời gian là dành cho việc gửi và nhận dữ liệu, chứ không phải là số crunching. Và trên thực tế trong các dịch vụ web nhất định mà làm rất nhiều tính toán, việc bẻ khóa cứng có thể chạy dưới dạng chương trình được biên dịch.

Cộng với ngôn ngữ thông dịch không cần biên dịch (mà trên một dự án lớn có thể mất thời gian), do đó nó phù hợp hơn cho việc phát triển nhanh các giải pháp web thông thường.

+0

Bạn biên dịch lại bao nhiêu và bạn cần biên dịch lại những phụ thuộc nào sau đó là thời gian biên dịch. Các khía cạnh biên dịch động của một ngôn ngữ kịch bản không phải là duy nhất cho mỗi gia nhập, nó chỉ là một thực hiện rất tốt hạt của quá trình biên dịch. –

9

Ít nhất ban đầu, rất nhiều công việc được thực hiện bởi mã phụ trợ (mà tôi giả định là những gì bạn đang nói về) là văn bản theo định hướng. Họ tạo trang trực tiếp từ đầu hoặc bằng cách kết hợp dữ liệu từ cơ sở dữ liệu với mẫu.

C không phải ... luôn phù hợp để xử lý văn bản. Các chuỗi C rất cơ bản, và trong khi xử lý văn bản trong C tất nhiên có thể thực thi nhanh, nó thường mất nhiều thời gian hơn để phát triển và yêu cầu các kỹ năng sâu hơn để có được quyền, hơn các ngôn ngữ giúp bạn nhiều hơn một chút.

+0

+1 cho euphemism "C không phải ... luôn phù hợp để xử lý văn bản" – MauganRa

10

C đã được sử dụng cho các ứng dụng web sớm - tôi đã viết nhiều tập lệnh CGI khác nhau trong đó. Tuy nhiên, theo thời gian, các ngôn ngữ hiệu quả hơn (C# và Java chẳng hạn - nhưng không chỉ dành riêng cho những ngôn ngữ đó) đã được chứng minh là "đủ hiệu quả" cho các ứng dụng web. Lưu ý rằng cả C# và Java đều được biên dịch thành mã trung gian và sau đó được biên dịch JIT, đạt được hiệu suất mã nguyên bản "gần đúng". Tại sao chúng ta muốn sử dụng C thay vào đó?

Ngay cả các ngôn ngữ truyền thống "thực sự hiểu" như PHP thường được biên dịch vào thời gian thực hiện những ngày này, theo như tôi biết. (Kiến thức của tôi về PHP nói riêng là tất cả là thứ hai. Có lẽ nó luôn luôn được biên dịch ... Và tương tự như vậy tôi chắc chắn có những nền tảng web vẫn luôn được giải thích.)

-9

Ngôn ngữ viết kịch bản là tùy chọn duy nhất để phát triển web từ lâu. Bây giờ chúng tôi có các lựa chọn thay thế khác (Java, .NET ..) nên tình hình không quá tệ.

C làm nền tảng không thành công để phát triển web vì khó xây dựng mô-đun có thể được tải và thực thi từ máy chủ web/ứng dụng, nhưng một trong những khung đầu tiên để xây dựng ứng dụng web động là mô-đun ISAPI cho IIS của Microsoft mà chủ yếu phát triển trong C++ và nơi biên dịch.

+1

Bạn có thể phát triển web bằng bất kỳ ngôn ngữ nào. Bạn có thể nhúng máy chủ web của riêng bạn để phục vụ http. Hoặc, bạn có thể làm điều đó bằng CGI cổ điển. –

7

Chủ yếu là vì việc thay đổi nhanh chóng và đơn giản là nhanh chóng và đơn giản. Các ngôn ngữ biên dịch yêu cầu một môi trường phát triển phải phù hợp với máy chủ. Với một kịch bản bạn có thể sử dụng một công cụ ftp và chỉnh sửa văn bản trực tiếp và sau đó lưu nó. Khả năng này để làm điều này từ bất kỳ máy tính của bất kỳ hệ điều hành hoặc loại đã tiết kiệm cuộc sống của tôi (hoặc chính xác cuộc sống trang web của tôi) nhiều lần.

13

ngôn ngữ Scripting có những ưu điểm sau trên C:

  1. Nhanh phát triển
  2. Hôm nay, tất cả những người có liên quan đến câu hỏi này được biên dịch tại thời gian chạy. Trong một số trường hợp, điều này có thể làm cho chúng nhanh hơn một chương trình C tương đương, do đó hiệu năng không còn là vấn đề nữa.
  3. Chi phí bảo trì ít hơn nhiều
  4. Bạn có thể phát triển bằng cách sử dụng các phương thức Agile (như kiểm tra đơn vị) dẫn đến mã tốt hơn nhiều. Vâng, bạn cũng có thể làm điều đó trong C, nhưng đó là nỗ lực nhiều hơn nữa.
  5. Khi bạn đang phát triển web, bạn có các khung công tác lớn làm hầu hết công việc cho bạn.
  6. Chúng cởi mở hơn nhiều để thay đổi. Một tính năng mới có thể mất đến vài phút để triển khai.
  7. Nếu có điều gì đó bị hỏng, bạn có thể đăng nhập vào máy chủ, bắt đầu trình soạn thảo văn bản trong bảng điều khiển và khắc phục sự cố, đôi khi không phải khởi động lại.
+3

"* Phát triển nhanh hơn nhiều *"? Tôi có ý kiến ​​khác. Nó thực sự phụ thuộc vào ** ai **. Với tôi, việc phát triển trong C++, Java hoặc thậm chí C nhanh hơn nhiều so với phát triển trong bất kỳ ngôn ngữ kịch bản nào. –

+4

Tôi đang nói về hai nhà phát triển với một bộ kỹ năng tương đương. Tất nhiên, một nhà phát triển C++ dày dạn nhanh hơn so với một newbie script nhưng bắt đầu một quá trình với chuyển hướng IO trong BASH là một lớp lót; trong C, nó có thể mất 10 đến 100 dòng, tùy thuộc vào các thư viện mà bạn có thể có. –

9

Câu hỏi hay. Lý do cơ bản là do sự phát triển của web. Hãy suy nghĩ về nó trong các bước:

1) Văn bản cơ bản trên 'net' -> 2) Một số 'đánh dấu' được thêm vào văn bản -> 3) thẻ "center" và "marquee" được tạo thành !!! những gì tiến bộ !!! -> 4) tập lệnh trên máy khách !!! 5) -> hmm ... scripting trên máy chủ !!!

Trong khi tôi hình thành câu trả lời này là một chút ngốc nghếch, điều đó thực sự đúng. Các interenet, và đặc biệt là "web", đã là một quá trình tiến hóa tuyệt vời. Thực tế, các yêu cầu cho các ngôn ngữ mạnh hơn (và nhiều ngôn ngữ trình diễn khác) chỉ là một điều gần đây hơn.

Ngoài ra, hãy xem các công cụ. Tôi đã làm PHP của tôi trong notepad (và một số ứng dụng đơn giản khác). Khi tôi lần đầu tiên phát triển web, máy tính của tôi không có đủ không gian đĩa cứng để hỗ trợ Visual Studio 2008 :)

Điểm phụ Tuy nhiên: Đã có các ứng dụng ".exe" ở đó (Tôi nghĩ "SunBiz" bài đăng lên một 'exe') và một số ứng dụng cgi đã biên dịch trong một thời gian, nhưng chúng ít hơn nhiều.

21

Hầu hết các ứng dụng web nói chuyện với cơ sở dữ liệu. Phần lớn các ứng dụng này dành phần lớn thời gian của họ để giao tiếp với cơ sở dữ liệu. Vì vậy, đối với bất kỳ yêu cầu nào cho ứng dụng, có một số lượng nhỏ xử lý trong máy chủ ứng dụng và sau đó là tạm dừng dài trong khi chờ cơ sở dữ liệu. Do phần trăm nhỏ của thời gian yêu cầu được sử dụng trong mã máy chủ ứng dụng thực tế, việc tối ưu hóa mã đó bằng cách viết nó trong C/C++ sẽ chỉ thu được một chút, có thể không đáng chú ý, cải thiện thời gian phản hồi.

Vì vậy, thay vì tập trung vào C/C++ và lưu mọi chu kỳ CPU cuối cùng, điều này có ý nghĩa hơn khi lo lắng về năng suất của nhà phát triển. Các nhà phát triển rất tốn kém. Và, chúng thường hiệu quả hơn nhiều trong một ngôn ngữ kịch bản hoặc thậm chí trong Java hơn là trong C/C++.

Tất nhiên, có những ngoại lệ đối với điều này. Và nếu một số yêu cầu cho ứng dụng của bạn là CPU hoặc bộ nhớ chuyên sâu, chúng sẽ được viết bằng C/C++. Tuy nhiên, đối với phần còn lại của ứng dụng, bạn nên tập trung vào tối ưu hóa thuật toán, cấu trúc dữ liệu, giao tiếp với cơ sở dữ liệu và năng suất của nhà phát triển hơn là tối ưu hóa ngôn ngữ của bạn.

+1

Câu trả lời hay, đặc biệt là giới thiệu đến các trường hợp ngoại lệ. –

7

Hãy thử thực hiện một số phân tích chuỗi/thao tác trong C một trong Perl/PHP và bạn sẽ biết.

BTW: Tại sao nhiều người nói rằng hiệu suất không còn là vấn đề nữa? Tôi có thể không phải là một vấn đề cho trang chủ nhỏ/blog, nhưng các ứng dụng web quy mô lớn vẫn cần phải được điều chỉnh để thực hiện (cpu/mạng/bộ nhớ) không có vấn đề nếu chúng được viết bằng java, php hoặc ruby.

+0

Bạn cần phải là một hoạt động khá lớn để tối ưu hóa mã nặng để trả hết - khi thay thế chỉ là để thêm một máy chủ khác vào cụm. Nếu bạn là Google hoặc Amazon, thì chắc chắn, 10% mã nhanh hơn sẽ giải phóng hàng nghìn CPU. – slim

+0

Một người bạn của tôi có công cụ tìm kiếm danh bạ và các chuỗi ngắn khác. Ông sử dụng các chỉ lệnh SSE3 để sức mạnh vũ phu so sánh các chuỗi 16 tại một thời điểm trên mỗi lõi. 3 triệu chuỗi được thực hiện trong thời gian giây trên máy tính để bàn. Kết quả bảng với dB thể dục! Nó không thể được thực hiện trong PHP. Đó là một trong hai C, hoặc noware! – Guge

+0

Ví dụ: Bạn có thể phát triển toàn bộ ứng dụng máy chủ trong PHP và sau đó sử dụng/tạo một số thư viện C cho các chức năng hiệu năng cụ thể. Đây không phải là màu đen hoặc trắng. Thao tác chuỗi và xác thực là một trong những tính năng quan trọng nhất trong phát triển web. Ra khỏi hộp làm việc, dễ dàng hơn và sạch hơn. – Heroselohim

1

Dưới đây là suy nghĩ của tôi về vấn đề này:

  • ứng dụng CGI gốc đòi hỏi một quá trình hệ điều hành của riêng mình, đó là tất nhiên một con heo tài nguyên. Việc cố gắng sắp xếp mọi thứ vào một quy trình đơn lẻ cũng không dễ dàng với mã gốc, vì nếu có sự cố trong ứng dụng có thể dễ dàng hạ toàn bộ máy chủ. Những điều này được xử lý dễ dàng hơn nhiều với một phiên dịch hoặc một máy ảo. Tất nhiên bạn có thể làm điều tương tự với mã gốc, nhưng tôi cho rằng nó sẽ khó triển khai khung công tác hơn nhiều. Cuối cùng, bạn sẽ kết thúc việc thực hiện một cái gì đó tương tự như một thông dịch viên hoặc một máy ảo.
  • Các ngôn ngữ được dịch là di động trên các hệ điều hành.
  • Tất nhiên lợi ích to lớn là tăng sản lượng bạn đạt được bằng cách sử dụng một ngôn ngữ hiện đại.
  • Hiệu suất tất nhiên là quan trọng. Tuy nhiên, các ngôn ngữ thông dịch hoặc VM ngày càng trở nên tốt hơn về mặt này (với các công nghệ như biên dịch JIT) và đang tiếp cận hiệu suất của mã gốc. Ngoài ra nó không phải là công bằng để so sánh chỉ dành thời gian trong quá trình thực hiện. Bạn cần phải đo lường toàn bộ chuỗi: tiếp nhận yêu cầu từ máy chủ, ủy quyền đến ứng dụng thích hợp, thực thi, trả về kết quả cho máy chủ. Ứng dụng gốc có nhanh hơn trong tất cả các ứng dụng này không?
0

Công ty của tôi sử dụng C++ (phần mở rộng ISAPI) cho webapp của chúng tôi. Gần như mọi thứ đều được thực hiện trong các tệp nhị phân đã biên dịch. Chúng tôi cũng sử dụng một công cụ JavaScript cho các phần của hệ thống yêu cầu kịch bản (có, JavaScript phía máy chủ). Lý do được trích dẫn cho thiết kế này là tốc độ, nhưng tuổi tác cũng là một yếu tố ... đây là một codebase cũ. Ngoài ra, chúng tôi phân phối sản phẩm của mình cho một số khách hàng để lưu trữ bản thân, vì vậy việc biên dịch nó bảo vệ mã nguồn của chúng tôi (nhiều ngôn ngữ thông dịch là không thể giải mã được, hoặc trong trường hợp PHP và Perl, không bao giờ được biên dịch).

+0

Chỉnh sửa theo ý nghĩa: PHP/Perl hiếm khi được lưu trữ trên đĩa ở dạng đã biên dịch. Perl được biên dịch trong bộ nhớ trước khi thực hiện và các hình thức biên dịch * có thể * được lưu vào đĩa, nó chỉ là một cái gì đó mà hầu như không ai. (Tôi cho rằng điều này cũng đúng với PHP, nhưng không biết đó là trường hợp.) –

+0

Với PHP nhiều người sử dụng một trong nhiều cơ chế lưu bộ nhớ đệm như APC, eaccelerator, v.v ... để giữ các phiên bản đã biên dịch của tập lệnh trong bộ nhớ dùng chung cho tất cả các luồng máy chủ web để sử dụng. Nó không nhất thiết phải được ghi vào đĩa, nhưng không phải là chỉ ném hoặc. –

8

Cần lưu ý rằng hầu hết các ngôn ngữ kịch bản (Python, Ruby, v.v.) đều dễ dàng - gần như tầm thường - với C. (Tôi vừa viết một số phần mở rộng C cho chương trình Python và tôi rất ấn tượng với cách dễ dàng nếu trang web/ứng dụng web không có một số tắc nghẽn do sử dụng ngôn ngữ kịch bản "chậm", người ta thường có thể viết các phần quan trọng về hiệu năng bằng ngôn ngữ nhanh hơn như C. Thực tế, đó là những ứng dụng lớn như Tìm kiếm của Google, Facebook, v.v. - họ viết giao diện bằng ngôn ngữ kịch bản và thực hiện việc nâng hạng nặng với các ngôn ngữ khác như C.

+0

Thông tin tốt - 'đó là những ứng dụng lớn như tìm kiếm của Google, Facebook, v.v. - họ viết giao diện bằng ngôn ngữ kịch bản và thực hiện thao tác nâng hạng nặng với các ngôn ngữ khác như C'. +1. – RBT

1

Vì vậy, thay vì tập trung vào C/C++ và lưu mọi Chu kỳ CPU, nó làm cho cảm giác lo lắng hơn về nhà phát triển năng suất. Nhà phát triển rất tốn kém . Và, chúng thường nhiều hơn hiệu quả hơn bằng ngôn ngữ lập trình hoặc thậm chí bằng Java hơn là trong C/C++.

Ồ, rất, rất đúng. Nếu việc sử dụng một ngôn ngữ năng động hơn làm gián đoạn một tuần của nhà phát triển khỏi lịch biểu, tuần đó của thời gian lập trình mà bạn không phải trả tiền sẽ mua cho bạn một máy chủ bổ sung. Thậm chí có thể nhiều máy chủ, nếu bạn thích nhiều máy chủ giá rẻ thay vì một vài con thú khổng lồ.

Đối với hầu hết mọi người trên thế giới (nghĩa là không phải Google/Amazon/eBay/v.v.), một máy chủ phụ sẽ bù đắp cho bất kỳ tổn thất nào về hiệu suất thô có thể do lựa chọn ngôn ngữ.

1

Rất nhiều tính năng cực kỳ hữu ích của ngôn ngữ động, chẳng hạn như nội tâm và các hàm như eval() thực sự khó/không thể? để triển khai bằng các ngôn ngữ biên dịch thành mã gốc.Điều đó được nói, hầu hết các ngôn ngữ "kịch bản" làm biên dịch (trên bay) thành một số loại mã trung gian mà sau đó được giải thích (Python, Ruby, Perl) hoặc thậm chí JIT được biên dịch thành mã gốc (JSP, .NET).)

0

Vì ngành công nghiệp bị ảo tưởng hàng loạt nên tốc độ thực thi không quan trọng (như được minh họa bằng câu trả lời được chấp nhận).

Tôi nghĩ lý do thực tế là ngôn ngữ thông dịch dễ bắt đầu hơn nếu bạn sử dụng một khung công tác hiện có và làm cho nó trở nên dễ dàng và thú vị khi làm việc trên một ứng dụng web. Có rất nhiều, nhiều trường hợp bạn thực sự cần phải thực hiện crunching số trong các ứng dụng web, nhưng các nhà phát triển cuối cùng không thực hiện chúng (vì chúng đắt tiền) và/hoặc ủy nhiệm nhiệm vụ cho một máy chủ bên ngoài: hoặc là máy chủ cơ sở dữ liệu hoặc một số máy chủ khác.

Điều này có thể thấy trong sự gia tăng gần đây của các kiến ​​trúc "dịch vụ vi mô".

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