Tại sao Javascript được sử dụng trong MongoDB và CouchDB thay vì các ngôn ngữ khác như Java, C ++?


19

Tôi đã hỏi câu hỏi này trên SO nhưng được đề nghị thử ở đây. Vì vậy, ở đây nó đi:

Sự hiểu biết của tôi về Javascript cho đến nay là ngôn ngữ phía máy khách nắm bắt các sự kiện và làm cho một trang web động.

Nhưng khi đọc so sánh giữa MongoDB và CouchDB tôi nhận thấy rằng cả hai đều đang sử dụng Javascript. Điều này khiến tôi tự hỏi lý do đằng sau sự lựa chọn JavaScript so với các ngôn ngữ thông thường khác.

Tôi đoán tôi đang cố gắng hiểu vai trò của JavaScript và lợi thế của nó so với các ngôn ngữ khác.

Cập nhật: Tôi không hỏi về các ngôn ngữ / trình điều khiển được hỗ trợ bởi hai cơ sở dữ liệu. Sự so sánh nói:

Cả CouchDB và MongoDB đều sử dụng Javascript. CouchDB sử dụng Javascript rộng rãi bao gồm cả việc xây dựng các khung nhìn .

MongoDB cũng hỗ trợ chạy các chức năng javascript tùy ý phía máy chủ và sử dụng javascript cho các hoạt động ánh xạ / thu nhỏ.

Sự thiếu hiểu biết của tôi liên quan đến lý do tại sao Javascript được sử dụng cho công việc phụ trợ. Tại sao nó được ưa thích để xây dựng các chế độ xem trong CouchDB hoặc để sử dụng các hoạt động bản đồ / thu nhỏ? Tại sao C / C ++ hoặc Java không được sử dụng? Những lợi thế trong việc sử dụng Javascript cho công việc back-end như vậy là gì?


3
Javascript không chỉ là ngôn ngữ kịch bản trình duyệt. Một vài ứng dụng khác nhúng Javascript hoặc một ngôn ngữ tương tự (ví dụ ActionScript trong Flash, cùng với Javascript để tạo kịch bản cho một số ứng dụng Adobe). Tôi không chắc chắn, nhưng có lẽ Javascript không bao giờ có ý định chỉ được nhúng trong trình duyệt web. Vậy ... tại sao không nhúng nó vào một ứng dụng cơ sở dữ liệu phụ trợ?
Steve314

Vì tôi đã thấy / đọc về JS chạy trên trình duyệt, tôi tự hỏi làm thế nào nó chạy trên phía máy chủ mà không mở trình duyệt?
xạ hương jeff

1
cảm ơn. bạn đúng rồi. Họ đang sử dụng trình biên dịch SpiderMonkey để thực hiện phần JS phía máy chủ. vi.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) @Raynos đã chỉ ra điều này.
jeff xạ hương

6
Vì vậy, bạn sẽ cần một công cụ javascript, như V8SpiderMonkey . Có khá nhiều cách sử dụng Javascript ngoài trình duyệt, wikipedia có một danh sách dài .
yannis

Hmmm - nhận xét trước đây của tôi là chính xác như một khái quát, nhưng đối với tôi để cố gắng cụ thể hơn có thể nguy hiểm - tôi không biết gì về MongoDB hoặc CouchDB. Trong khi không có lý do tại sao một ứng dụng cơ sở dữ liệu phụ trợ. trên một máy chủ không thể có trình thông dịch Javascript độc lập với trình duyệt, tôi không biết liệu đó có phải là cách xử lý hay không và các câu trả lời dưới đây cho thấy có lẽ không.
Steve314

Câu trả lời:


15

Mã di động & Đa nền tảng

JavaScript là mã được gọi là mã di động , mã được vận chuyển từ máy chủ (MongoDB và CouchDB trong trường hợp này) đến máy khách (trình duyệt web) và được thực thi trên máy khách mà không cần quá trình cài đặt.

Môi trường thời gian chạy JavaScript (trình duyệt web) cũng có sẵn rộng rãi trên nhiều nền tảng. Điều đó làm cho JavaScript trở thành một ngôn ngữ đa nền tảng tốt .

JavaScript không được sử dụng làm ngôn ngữ phụ trợ chính

Phần cuối của MongoDB được triển khai trong C ++ và CouchDB được triển khai trong Erlang. Vì vậy, JavaScript không được sử dụng làm ngôn ngữ chính cho phụ trợ cho các hệ thống này.

Từ mongodb.com :

Viết bằng C ++

Từ couchdb.apache.com :

CouchDB được viết bằng Erlang, một ngôn ngữ lập trình chức năng mạnh mẽ lý tưởng để xây dựng các hệ thống phân tán đồng thời. Erlang cho phép thiết kế linh hoạt, dễ dàng mở rộng và dễ dàng mở rộng.


1
Cảm ơn bạn đã phản hồi của bạn. "CouchDB sử dụng Javascript rộng rãi bao gồm cả việc xây dựng các khung nhìn". Vậy tại sao máy khách là một trình duyệt cho công việc back-end như xây dựng chế độ xem? Đối với một nhiệm vụ như vậy, tại sao một trình duyệt đi vào hình ảnh.
jeff xạ hương

@ startup007: Xem phần đầu tiên trong câu trả lời của tôi. Các trình duyệt web đã được cài đặt trên hầu hết các hệ thống hiện nay (ví dụ: Mac OS X, Windows, Linux, iPhone, Android), vì vậy người dùng không cần phải cài đặt bất cứ thứ gì vì trình duyệt web có thể thực thi JavaScript (mã di động).
Jonas

Tôi xin lỗi vì đã không nhận được nó ngay lập tức. Hãy để tôi giải thích. Vì vậy, các cơ sở dữ liệu này có mở các trình duyệt ở phía máy chủ để thực hiện một số nhiệm vụ và sau đó trả lại đầu ra JSON không?
jeff xạ hương

1
Cảm ơn Raynos! wiki trên spidermonkey nói- "MongoDB, một hệ thống cơ sở dữ liệu NoQuery khác sử dụng SpiderMonkey để thực thi JavaScript phía máy chủ." vi.wikipedia.org/wiki/SpiderMonkey_(JavaScript_engine) . hmm thú vị
xạ hương jeff

4
sai, cả MongoDB và CouchdB đều không sử dụng trình duyệt làm máy khách. máy khách cơ sở dữ liệu là một thư viện ứng dụng (thường là ứng dụng web nhưng có thể là bất kỳ loại ứng dụng nào) sử dụng để quản lý dữ liệu được lưu trữ trong cơ sở dữ liệu. Không có trình duyệt trong hình. JavaScript được sử dụng làm ngôn ngữ định nghĩa dữ liệu (siêu ngôn ngữ JSON) và cũng là ngôn ngữ thủ tục lưu trữ, nó được thực thi trong công cụ cơ sở dữ liệu, không phải ở máy khách và chắc chắn không có trong bất kỳ trình duyệt nào.
Javier

7

Bởi vì JavaScript là một ngôn ngữ kịch bản.

Đó là một ngôn ngữ linh hoạt và năng động, quen thuộc với mọi người.

Lý do khác được sử dụng JavaScript là vì nó phù hợp với định dạng JSON mà các cơ sở dữ liệu này sử dụng.

Và cuối cùng các cơ sở dữ liệu này cần một ngôn ngữ có thể được giải thích. Bởi vì mã cho các truy vấn này được gửi qua mạng.

Vì vậy, bạn cần một

  • năng động
  • Linh hoạt
  • quen
  • giải thích

ngôn ngữ. Tôi không nghĩ JavaScript là một lựa chọn tồi ở đây. Có lẽ nó được chọn để có cú pháp kiểu C.

Bây giờ tại sao JavaScript được chọn trên một ngôn ngữ kịch bản khác là một câu hỏi hay.


2
Now why JavaScript was chosen over another scripting language: Tôi có thể suy đoán rằng đó là vì JavaScript là ngôn ngữ kịch bản được sử dụng rộng rãi nhất, được kiểm tra rất tốt thông qua việc sử dụng nó trên các trình duyệt và có khá nhiều triển khai trình thông dịch mã nguồn mở tuyệt vời. CouchDB sử dụng uneval(), một gợi ý rằng họ đã xây dựng trình thông dịch của họ trên đầu SpiderMonkey .
yannis

Microsoft đã hỗ trợ VBscript ở phía khách hàng nhiều năm trước nhưng rất may là không bao giờ tắt ...
Mark K Cowan

6

Tất cả chúng ta sẽ phải ăn bánh khiêm tốn khi chúng ta nhận ra rằng JS đang được sử dụng để viết:

  • Cơ sở dữ liệu

  • Máy chủ

  • Hệ điều hành

  • và vô số thư viện, khung, công cụ kết xuất và biên dịch ngôn ngữ,

... bởi vì nó tốt hơn

Nghiêm túc, xin vui lòng ... nghe tôi nói. Đừng bắn sứ giả.

Hỏi Microsoft tại sao họ xây dựng Windows 8 với JS là công dân hạng nhất. Hoặc HĐH di động mới của Mozilla, hoặc Rivertrail, PhoneGap, ExtJS hoặc WebGL của IBM.

Bất kỳ công ty hoặc dự án nào trong số này đã thành công nếu các chuyên gia không tìm thấy điều gì tốt hơn khi thực hiện?

Câu trả lời là ... Họ đã làm. Chúng tôi đã làm. Vì vậy, chủ đề ở đây nên rõ ràng: có một cách tốt hơn.

Nhưng, tốt hơn là chủ quan: vì vậy chúng ta phải đi sâu và so sánh. Cái gì tốt hơn

Nó bắt đầu với AJAX ... và nó chưa dừng lại.

  1. IO không chặn. Đây là một vấn đề thực sự lớn và đáng để biết. Trong JS đây là mẫu gọi lại. Hóa ra, sử dụng các cuộc gọi lại có thể cho phép một máy chủ không chặn: Node.js ~ khoảng 8 dòng mã. setTimeout () là một cuộc gọi lại. Xử lý không đồng bộ đơn luồng.

  2. Mềm dẻo. Gì? -Java và C có các lớp và giao diện, nhưng được gọi là hướng đối tượng. JavaScript chỉ có các đối tượng. Nhưng nó được gọi là ... thứ khác.

    -Chỉ có các đối tượng là một điều tốt đẹp cho tính linh hoạt, bởi vì các thành viên và phương thức hoàn toàn năng động khi chạy. Di truyền -Prototypal không đáng sợ. Một số chuyên gia mô tả nó như là một gói đối tượng. -JS thân thiện với các lỗi. -Mã có thể trộn lẫn với nhau để tạo ra các Thành phần hỗn hợp, mà không cần nhiều nỗ lực hoặc kiến ​​thức về ... 'giao diện', 'trừu tượng', 'kế thừa', 'đóng gói', 'đa hình'. Những điều tốt, nhưng giống như Nike, trong JS; bạn cứ làm đi

  3. Dịch thuật dữ liệu. Với JSON, các đối tượng có thể được chuyển từ trước ra sau, quay lại trước. Không có bản dịch dữ liệu XML. JSON rõ ràng là đơn giản.

  4. Đường cong học tập thấp. Có thể cắt và dán mã cực kỳ phức tạp, sau đó gỡ lỗi để tồn tại. Tôi nghe một đồng nghiệp ... 'noobs'. Nhưng nó không chỉ dành cho noobs.

-Có vẻ như đây là một tính năng thực sự tốt cho Tạo mẫu nhanh. Và các trang web đang xuất hiện trên tất cả, thúc đẩy điều thiết kế trên trình duyệt này, và rộng rãi hơn; tạo mẫu thời gian chạy. Thanh toán JSFiddle và CodePen, cũng MicroJS. GitHub.

Like Transformers, with JS, there is more than meets the eye.  

It is a big deal.

CẬP NHẬT: vì bài đăng này JavaScript hiện được sử dụng rộng rãi bởi các ngôn ngữ khác.

In Java - check out Nashorn.
In C++ - check out Emscripten, or ASM.
And there are many more.

The big surprise since the original writing of this answer was JS cross-compilation.

It turns out that many languages can be compiled to JS.

And the community is encouraging that... CoffeeScript, Dart, etc.    

This is not my specific area of expertise, but it is going on in big ways.

Simply put, we just don't know how the dynamism of JS is going to hash out yet. 

Python cũng có thể làm tất cả những thứ đó
Jonathan

@JonathanLeaders - tất cả? :)
Jack Stone

1
@ jonathan-nhà lãnh đạo Python có thể chạy trên trình duyệt web không?
Aaron C

1
  • Bạn có thể làm ít hơn với nhiều hơn - Có một vài trường về điều này. Trường học dài dòng muốn mọi thứ được đánh vần chi tiết siêu tốt mà bất kỳ kẻ ngốc nào cũng có thể hiểu được. JS là một thành viên của trường đối diện nơi bạn có thể tạo độ phức tạp sao cho dễ dàng có được bức tranh lớn trước khi hiểu cách các chi tiết tốt hơn hoạt động. Việc viết vào một giao diện trong JS dễ dàng hơn nhiều so với hầu hết các ngôn ngữ, IMO.

  • Các chức năng hạng nhất, đóng cửa, kế thừa nguyên mẫu - Đó là một kết hợp thực sự, thực sự linh hoạt. Chúng ta có thể bắt chước các lớp học nếu chúng ta muốn. Nhưng đó được xem là một nỗ lực hơi vô nghĩa của những người hiểu rõ về JS. Kết hợp phù hợp với JS tốt hơn nhiều so với kế thừa chuỗi.

  • Chặn là hữu ích ở mức cao hơn. Vâng, bạn đã nghe tôi. Nó giúp bạn tập trung vào JS dưới dạng trình nhắn tin thay vì công việc và tự xử lý hàng đợi khá nhiều trong khi cho phép gián đoạn từ hành vi không đồng bộ giữa các lệnh gọi hàm.

  • Tôi có thể nói rằng đường cong học tập thực sự hơi dốc để viết JS mạnh mẽ nhưng một khi bạn đã ở đó, đó là một trò lừa bịp. Tuy nhiên, không khó để thực hiện các công cụ được nướng sẵn trong JS ở cấp độ kỹ năng thấp hơn.


0

Câu hỏi này hơi cũ nhưng lý do để sử dụng JavaScript so với Java / C ++ là vì cả Java và C ++ đều không dễ dàng hỗ trợ các đoạn mã.

Ngay cả khi JavaScript không bao giờ được phát minh, Java và C ++ sẽ không phải là một lựa chọn tốt cho các Đoạn mã nguồn sẽ thực thi ở phía máy chủ. Họ sẽ chọn ngôn ngữ khác hoặc phát minh ra ngôn ngữ của họ. Các sản phẩm ngày trước được sử dụng để tạo ngôn ngữ của riêng họ, xác định quy tắc sản xuất của riêng họ, AST, thông dịch viên, v.v. chuyên về lĩnh vực của họ.

Nhưng với JavaScript, cực kỳ dễ dàng để tạo Ngôn ngữ cụ thể miền (DSL) cho sản phẩm của bạn và nhúng công cụ mà không phải lo lắng về việc tạo tất cả các cơ sở hạ tầng không liên quan đến tên miền khác.


0

Mô hình lập trình hướng sự kiện

JavaScript được tạo ra với cách tiếp cận không chia sẻ bộ nhớ theo hướng sự kiện cho máy tính. Trong phát triển UI đây là chiếc mũ hoàn toàn cũ. Không có giả định rằng "ứng dụng" của bạn đang kiểm soát một quá trình. Không có API quy trình. Cũng không có chức năng chính.

"Ứng dụng" của bạn là một tập hợp các tập lệnh sẽ được thực thi khi một sự việc cụ thể xảy ra, chẳng hạn như

  • đoạn script được tải trong trình duyệt
  • tải trang html đạt đến một điểm nhất định
  • trên một tương tác người dùng cụ thể với một yếu tố nhất định

Điều này khá phù hợp với các khối logic xử lý nhỏ cần thiết cho các biến đổi dữ liệu.

Ngôn ngữ kịch bản

Có thể thực thi mà không cần một giai đoạn biên dịch có nghĩa là các hướng dẫn xử lý có thể được lưu trữ dễ dàng. Bạn có thể lưu tập lệnh dễ dàng dưới dạng văn bản và chuyển nó đi xung quanh mà không cần bất kỳ loại dữ liệu hoặc kiến ​​thức đặc biệt nào.

Khá đơn giản, ổn định và tương thích ngược

Mã bạn viết hôm nay không khác nhiều so với 10 năm trước. Phiên bản dường như không phải là vấn đề đối với những người nhúng nó.

Biểu diễn

Có một số công cụ nguồn mở tốt ngoài kia với hàng tấn công việc được đưa vào chúng. Nó thực hiện khá nhanh hơn một chút so với nhiều lựa chọn thay thế.

Dấu ngoặc nhọn

Nhiều người bị hạn chế trong sự thoải mái với một loạt các ngôn ngữ lập trình. Họ chỉ biết cách lập trình Java hoặc C # chẳng hạn. Vì vậy, họ mong đợi học JavaScript dễ dàng vì nó trông quen thuộc. Đó tất nhiên là một ảo ảnh. Khi tôi học Python, nó có tốc độ tương tự như học JavaScript. Cú pháp chỉ có ý nghĩa về mặt cảm xúc khi cho rằng nó không hoàn toàn tối nghĩa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.