2009-09-25 35 views
16

Tôi vừa bắt đầu thử nghiệm với Aptana Jaxer động cơ javascript phía máy chủ cho dự án tiếp theo của tôi. Và tôi có vài quesions về điều đóưu và khuyết điểm của việc triển khai javascript trên máy chủ?

  • Bằng cách sử dụng phía máy chủ JS, chúng ta có thể thực hiện các ứng dụng web toàn mà không sử dụng bất kỳ ngôn ngữ phía máy chủ (như C#, java vv). Hoặc JS phía máy chủ nằm giữa máy chủ web và chồng langauge khác.

  • Đây có thực sự là cách tiếp cận tốt hơn không ??

  • các biện pháp tạm thời và bất lợi là gì?

  • cách tính năng này hoạt động tốt về hiệu suất?

  • có triển khai thời gian thực nào (trang web công cộng) chỉ sử dụng JS phía máy chủ (không có ngôn ngữ khác) không?

  • các lựa chọn thay thế có sẵn trên Aptana jaxer (nguồn mở) là gì ??

  • chúng tôi có thể triển khai & giao dịch db maitain tốt nhất như thế nào? chúng ta có thể làm điều đó trong serveride JS ..?

  • là có thể phát triển các dịch vụ RESTFul và SOAP trong serverside JS .. ??

tôi biết điều này quá dài (và câu hỏi ngây thơ). Tôi chỉ hy vọng một ai đó đã đi qua tất cả những điều này trong khi thực hiện JS serveride.

EDIT:

Theo Matthew & Ken ý kiến, tôi đã thêm một số rõ ràng cho câu hỏi Có thực sự là một cách tiếp cận tốt hơn ??

đây là những gì tôi có ý định hỏi ..

Có thực sự là một cách tiếp cận tốt hơn so với sử dụng ngôn ngữ phía máy chủ (giả định C#), làm thế nào chúng ta có thể so sánh điều này với việc thực hiện C# của một trang web (hiệu suất, ngôn ngữ Tính năng, đặc điểm)?? Và cái nào là một cách tiếp cận tốt hơn, sử dụng JS một mình trong serverside hoặc JS ở tầng giữa giữa ngăn xếp ngôn ngữ khác và máy chủ web?

Trả lời

19

Tôi là nhà phát triển cho Myna (www.mynajs.org), một nền tảng JS server-side mã nguồn mở dựa trên Rhino và Java. Tôi sẽ giải quyết các vấn đề có liên quan đến Myna, nhưng nhiều người trong những điểm này áp dụng cho server-side JS nói chung:

Bằng cách sử dụng phía máy chủ JS, chúng ta có thể thực hiện các ứng dụng web toàn mà không sử dụng bất kỳ phía máy chủ ngôn ngữ (như C#, java, v.v.) Hoặc JS phía máy chủ nằm giữa máy chủ web và chồng langauge khác.

Trong Myna, bạn có thể viết toàn bộ ứng dụng của mình trong JS. Myna đã bao gồm API để truy cập Cơ sở dữ liệu, Ánh xạ quan hệ đối tượng, crytogrophy, OpenID, v.v.

Đây có phải là cách tiếp cận tốt hơn C#/Java không?

Với máy chủ dựa trên tê giác, nó không quan trọng để thả xuống Java bất cứ khi nào cần. Bạn có thể dễ dàng cài đặt các thư viện Java mã nguồn mở/thương mại/mã hóa bằng tay và sau đó kịch bản chúng từ JS. Điều này có nghĩa là bạn có được sự phát triển nhanh chóng của JS nhưng vẫn giữ được những ưu điểm của nền tảng Java

những ưu điểm và nhược điểm là gì?

ưu:

  • nhanh phát triển: Trong Myna bạn chỉ cần tạo file trong webroot với một phần mở rộng .sjs. Điều này có nghĩa là bạn có thể tạo chu trình trình duyệt chỉnh sửa-lưu-làm mới với rất nhanh để gỡ lỗi/chỉnh sửa mã.

  • Dễ JSON: Có JS hỗ trợ server-side có nghĩa là di chuyển cấu trúc phức tạp là rất dễ dàng

  • chung đang: Nếu bạn cần để thực hiện các chức năng tương tự trên cả hai máy chủ và trình duyệt, bạn có thể sử dụng cùng một mã

  • Dynamic ORM: Ngôn ngữ biên dịch được nhập tĩnh sẽ khó thay đổi các đối tượng trong thời gian chạy. Điều này thường có nghĩa là ORM phải được xác định trước. Trong tòa nhà Myna ORM đơn giản như

    var manager =new Myna.DataManager("DataSource name").getManager("table name"); 
    

    Bạn nhận được một đối tượng có thể thực hiện tất cả các bảng DB cơ bản.Một ví dụ khác bạn có thể chèn một hàng với tất cả các giá trị phù hợp từ một bài mẫu:

    manager.create($req.data); 
    
  • chức năng Lập trình: Nếu bạn đã bắt đầu chơi với JavaScript tiên tiến các tính năng sau đó bạn sẽ đánh giá cao cách hữu ích họ là Server- bên. Do môi trường server-side phù hợp nó là an toàn để sử dụng các tính năng tiên tiến như Array Extras, generators and iterators, destructuring assignments, và E4X

khuyết điểm:

  • cụ: ngôn ngữ tĩnh gõ như C# và Java có các công cụ phát triển và IDE tuyệt vời. Ngôn ngữ động như JS chưa có hỗ trợ công cụ. Cá nhân tôi thấy rằng sự giảm lớn trong mã boilerplate và đúc kiểu cầu kỳ làm cho điều này, nhưng điều này vẫn là một bất lợi lớn nếu bạn đã làm rất nhiều phát triển trong IDE. Nếu bạn đang sử dụng một IDE, xem xét sử dụng jedit cho các ngôn ngữ động

  • Maturity/Tiêu chuẩn: serverside JS vẫn là một mô hình mới, và có rất nhiều cầu thủ và không có người chiến thắng rõ ràng. ECMA không có bất kỳ tiêu chuẩn nào cho máy chủ JS. Như đã đề cập trong câu trả lời của Brandon, nhóm CommonJS đang nỗ lực để tạo thành một tiêu chuẩn JS serverside và Myna có CommonJS hỗ trợ thực nghiệm qua Narwhal

cách này hoạt động tốt về hiệu suất?

Trong tốc độ tính toán thô, vài ngôn ngữ động có thể khớp với các ngôn ngữ biên soạn tĩnh như C# và Java. Có nói rằng, nó thực sự không quan trọng. Bất kỳ phần nào của ứng dụng của bạn được tính toán chuyên sâu có lẽ nên được viết bằng Java hoặc sử dụng một thư viện Java hiện có. Tôi sẽ không đề nghị rằng bất cứ ai viết một cơ sở dữ liệu trong JS chẳng hạn. Đối với các ứng dụng web trong thế giới thực/các dịch vụ SOA, nguyên nhân chính của sự chậm lại không phải là tốc độ tính toán thô, nó là mã không hiệu quả, đặc biệt là truy cập cơ sở dữ liệu. Myna giúp với điều này bằng cách làm những việc như:

  • nội bộ cách lưu biên soạn kịch bản JS
  • chuẩn bị phát biểu nội bằng cách sử dụng lưu trữ cho các giao dịch cơ sở dữ liệu
  • Query và đoạn sản lượng bộ nhớ đệm
  • kết nối
  • Cơ sở dữ liệu tổng hợp
  • ETag tự động hỗ trợ băm
  • Công cụ tạo hồ sơ
  • Tải siêu dữ liệu nhỏ

chúng tôi có thể triển khai các giao dịch db tốt như thế nào? chúng ta có thể làm điều đó trong serveride JS ..?

Nếu bạn ngụ ý giao dịch như trong "tập hợp các câu lệnh SQL có thể đảo ngược hoặc cam kết", thì Myna chưa hỗ trợ giao dịch. Tôi mở để thực hiện điều này nếu có đủ sự quan tâm.

Nếu bạn có nghĩa là "JS hỗ trợ loại cơ sở dữ liệu nào?" thì câu trả lời phụ thuộc vào nền tảng. Nền tảng Myna cung cấp các tính năng cơ sở dữ liệu sau:

  • Ứng dụng quản trị dựa trên web nơi bạn có thể xác định "nguồn dữ liệu", tức là thông tin kết nối cơ sở dữ liệu. Sau đó, bạn có thể truy vấn các nguồn dữ liệu này theo tên. Myna bao gồm các trình điều khiển JDBC cho H2, MySQL, Microsoft SQL Server và Postgresql, nhưng bất kỳ nguồn dữ liệu JDBC hoặc ODBC nào đều có thể được sử dụng
  • Myna.DatabaseMyna.Table cung cấp truy cập dữ liệu trung lập cơ sở dữ liệu cũng như tạo bảng và sửa đổi. đối tượng Query
  • Myna của hỗ trợ maxRows, phân trang, các thông số SQL, xử lý hàng tùy chỉnh, truy vấn-of-truy vấn, bộ nhớ đệm và nhiều hơn nữa
  • Myna của DataManager đối tượng hỗ trợ thời gian chạy ORM tạo đối tượng

là nó có thể phát triển các dịch vụ RESTFul và SOAP trong serveride JS .. ??

Hỗ trợ REST và SOAP là các tính năng cụ thể của nền tảng. đối tượng WebService Myna của hỗ trợ các giao thức sau:

  • SOAP
  • XML-RPC
  • JSON-RPC
  • Ext Direct
  • JSON-Myna (một giao thức đơn giản có sử dụng bài viết dạng bình thường và lợi nhuận JSON. Dễ sử dụng từ trình duyệt)

Myna cũng hiểu phương thức yêu cầu PUT và DELETE và trình bày quyền truy cập để yêu cầu nội dung nội dung ở cả dạng văn bản lẫn dạng nhị phân, để có thể xử lý các phương thức RESTful này theo cách cụ thể của ứng dụng.

Debugging

breakpoint truyền thống gỡ lỗi là một thách thức phía máy chủ thực sự. Mặc dù Rhino hỗ trợ các trình gỡ lỗi, việc sử dụng chúng từ một ứng dụng web không trạng thái sẽ khá liên quan. Cá nhân tôi thậm chí không sử dụng các trình gỡ rối breakpoint ngay cả khi chúng có sẵn (ví dụ: firebug). Thay vào đó tôi thích đăng nhập.

Trong Myna,

Myna.log(type,label,detail) 

sẽ đẻ trứng một chủ đề ưu tiên thấp để viết một thông điệp log HTML để cơ sở dữ liệu khai thác gỗ Myna của. Các bản ghi này sau đó có thể được tìm kiếm thông qua Quản trị viên Myna. Nhật ký cũng ghi lại dấu thời gian và thời gian trôi qua mili giây cho mục đích định cấu hình. Myna.dump (obj) cũng có thể được sử dụng để trình bày một biểu diễn bảng HTML của bất kỳ đối tượng nào. Myna cũng ghi lại tất cả các ngoại lệ chưa được xử lý với các dấu vết ngăn xếp, bối cảnh mã nguồn và các chi tiết yêu cầu. Giữa dump(), log() và trình xử lý lỗi mặc định, tôi không gặp khó khăn khi gỡ lỗi mã Myna

+0

Đánh dấu, Điều tốt để xem những điểm này từ nhà phát triển SSJS cốt lõi.Cảm ơn bạn rất nhiều vì đã hỗ trợ của bạn .. Tôi đang chơi với Jaxer Defenelty tôi sẽ nhìn vào myna Từ câu trả lời của bạn myna trông đầy hứa hẹn Và nếu có thể bạn có thể sửa câu trả lời của bạn ith SSJS máy chủ bên gỡ lỗi khả năng. ?? – RameshVel

+0

Tôi đã cập nhật với gỡ lỗi và cố định liên kết tài liệu Myna để chúng hiển thị trong câu trả lời. –

+0

cảm ơn cho bản cập nhật Mark., Breakpoint gỡ lỗi là mối quan tâm chính cho những kẻ như tôi mà phát triển trước đó hoàn toàn trong VS IDE. Tôi thấy nó rất khó. Jaxer cũng hỗ trợ gỡ lỗi breakpoint. Bạn có kế hoạch tương lai nào thực hiện IDE của riêng bạn với hỗ trợ gỡ lỗi breakpoint không ?? – RameshVel

12

Bằng cách sử dụng JS phía máy chủ, chúng tôi có thể triển khai toàn bộ ứng dụng web mà không cần sử dụng bất kỳ ngôn ngữ phía máy chủ nào (như C#, java v.v.) hay không.

Không cần viết mã bằng bất kỳ ngôn ngữ nào khác, mặc dù nhiều khung JavaScript phía máy chủ sử dụng công cụ Rhino, cho phép bạn gọi bất kỳ mã Java nào.

Có thực sự là một cách tiếp cận tốt hơn không ??

Tôi không nghĩ JavaScript (là ngôn ngữ) thực sự là một lựa chọn tốt hơn hoặc tệ hơn các ngôn ngữ phía máy chủ truyền thống. Nó có lợi thế (cùng với các ngôn ngữ động khác như Ruby và Python) như tính linh hoạt, tạo mẫu nhanh (không có ý định chơi chữ), tính linh hoạt, v.v.Mặt khác, nó không có hỗ trợ thư viện mà Java và C# có hoặc gõ tĩnh (tôi sẽ không tham gia vào cuộc tranh luận tốt hơn ở đây; tôi thích cả hai vì những lý do khác nhau).

Nếu bạn muốn điều tốt nhất của cả hai, bạn có thể sử dụng JavaScript làm ngôn ngữ kịch bản, được nhúng trong ứng dụng của bạn. Rhino cho Java và JScript.NET giúp dễ dàng thao tác các đối tượng "nguyên gốc" trong JavaScript. Ví dụ, bạn có thể viết các lớp miền của bạn bằng Java hoặc C# và viết chúng bằng JavaScript, nơi bạn muốn linh hoạt hơn. Nếu bạn đủ thoải mái với JavaScript, viết bằng một ngôn ngữ có thể đơn giản hơn.

Tôi chưa bao giờ viết một ứng dụng phía máy chủ "thực" sử dụng JavaScript, vì vậy tôi thực sự không thể đưa ra phán quyết về việc nó tốt hơn hay tệ hơn .NET (Tôi cũng chưa từng sử dụng JScript.NET). Tôi đã chơi xung quanh với một vài khuôn khổ cho vui vẻ mặc dù và tôi hiện đang viết lại trang web cá nhân của tôi bằng cách sử dụng Helma NG. Cho đến nay nó đã được một kinh nghiệm tốt (tốt hơn nhiều so với PHP, mà tôi đã không bao giờ thực sự thích).

các khoản ứng xử và bất lợi là gì?

Advantanges:

  • Chỉ có một ngôn ngữ cần thiết cho server-side và lập trình client-side.
  • Khả năng chia sẻ mã, cho những thứ như xác thực biểu mẫu. Jaxer cho phép bạn chạy các tập lệnh trên máy khách, máy chủ hoặc cả hai.
  • Bạn có thể lập trình bằng JavaScript (giả sử bạn thích ngôn ngữ).

Nhược điểm:

  • Nhiều khuôn khổ tính chất thử nghiệm/không phải là rất trưởng thành.
  • Bạn phải lập trình bằng JavaScript (giả sử bạn không thích ngôn ngữ).

cách điều này hoạt động tốt về hiệu suất?

Hiệu suất phải xấp xỉ so với các ngôn ngữ kịch bản khác.

là có bất kỳ triển khai thời gian thực nào (trang web công cộng) chỉ sử dụng JS phía máy chủ (không có ngôn ngữ khác) không?

Tôi không biết bất kỳ trang web lớn nào sử dụng JavaScript, nhưng có thể có một số trang web.

các lựa chọn thay thế có sẵn trên Aptana jaxer (nguồn mở) là gì ??

Wikipedia có số large list of options nhưng không có nhiều thông tin hữu ích. Có rất nhiều lựa chọn với phạm vi rộng và trưởng thành.

Dưới đây là một vài điều mà tôi quen thuộc với (mức độ khác nhau)

  • Helma - Rhino (Java) khuôn khổ dựa với kỷ lục hoạt động.
  • Helma NG - Thế hệ tiếp theo Helma (viết lại thử nghiệm, dưới sự phát triển tích cực).
  • Phobos - Có hỗ trợ tốt trong NetBeans.
  • v8cgi - Nhỏ và đơn giản, sử dụng công cụ V8 của Google, có thể chưa sẵn sàng cho sản xuất.
  • Jaxer - Chạy trên Spidermonkey với triển khai DOM, do đó bạn có thể thao tác trang bằng các khung như jQuery hoặc Prototype. Có hỗ trợ IDE tốt trong Aptana Studio.

chúng tôi có thể triển khai các giao dịch db tốt như thế nào? chúng ta có thể làm điều đó trong serveride JS ..?

Khung dựa trên tê giác cho phép bạn sử dụng các lớp Java, do đó bạn có hỗ trợ JDBC đầy đủ. Tôi đã không sử dụng thư viện cơ sở dữ liệu của Jaxer, vì vậy tôi không biết gì về khả năng của nó.

là có thể phát triển các dịch vụ RESTFul và SOAP trong máy chủ JS .. ??

API RESTful không có vấn đề gì. Tôi không biết bất kỳ hỗ trợ cụ thể nào cho SOAP, nhưng phải là có thể.

+0

cảm ơn Matthew vì đã dành thời gian trả lời câu hỏi của tôi .. Tôi đã cập nhật câu hỏi của mình cho "Có thực sự tốt hơn không tiếp cận??" phần ... – RameshVel

+0

Câu trả lời hay. Và tác giả có thay đổi câu hỏi sau khi trả lời không? Nếu vậy, đó là hình thức nghèo ... – ken

+0

@ken, i dint thay đổi câu hỏi ... mathew cần một số thông tin về "Nó thực sự là một cách tiếp cận tốt hơn ??" .. vì vậy tôi chỉ cần thêm một số rõ ràng về câu hỏi đó (một mình) ... Bạn có thể kiểm tra lịch sử sửa đổi nếu bạn muốn ... :( – RameshVel

6

Như một lời nói đầu, tôi sử dụng SSJS trong công việc ban ngày của mình. Chúng tôi chạy một trang web khá hợp lý (về mặt phức tạp cũng như lượt xem trang) trên SpiderMonkey. Tôi sẽ thêm vào câu trả lời tuyệt vời của Matthew nơi tôi có kinh nghiệm.

Có thực sự là một cách tiếp cận tốt hơn so với sử dụng ngôn ngữ phía máy chủ (giả định C#)

"Better" thực sự phụ thuộc những gì bạn muốn làm gì với nó. Bản thân JavaScript có một số tính năng tuyệt vời, cũng như các tính năng khá khủng khiếp. Nếu bạn nghiêm túc về việc phát triển JS (máy khách hoặc máy chủ), tôi không thể đề xuất đủ cao để bạn xem bản trình bày của Douglas Crockford, Javascript: The Good Parts nếu bạn chưa có. Anh ấy đã thực hiện một công việc tuyệt vời để phân loại chiếc tàu, và anh ấy là một diễn giả tuyệt vời để khởi động.

Điều lớn nhất mà tôi thấy thế giới SSJS thiếu bây giờ là sự trưởng thành. Tôi không quen thuộc với C#, nhưng JavaScript không có thư viện chuẩn trưởng thành và không có phương tiện phân phối gói. Với tôi đó là một phần lớn của câu đố.

Điều đó nói rằng hãy theo dõi nhóm CommonJS. Họ đang cố gắng xác định những điều chính xác đó. Ngoài ra, Tài liệu Jaxer Api liệt kê các bản dựng sẵn được bao gồm trong khuôn khổ đó.

cách hoạt động tốt về mặt hiệu suất?

Bản thân JavaScript không phải là ngôn ngữ chậm, cũng không phải là một ngôn ngữ đặc biệt nhanh. Như Matthew đã chỉ ra, nó nên được so sánh với bất kỳ ngôn ngữ kịch bản khác mà bạn sẽ sử dụng. Cuộc chiến giữa các nhà cung cấp trình duyệt để xem ai có thể xây dựng trình duyệt nhanh nhất cũng sẽ mang lại lợi ích cho đám đông SSJS.

Bộ sưu tập rác sinh học mà nhóm V8 xây dựng vào động cơ của họ là một ví dụ tuyệt vời về điều này. Việc tạm dừng máy ảo để giải phóng các đối tượng không thể truy cập từ heap và lấy lại bộ nhớ của chúng có thể hơi chậm, nhưng chúng đã giảm nhẹ bằng cách giảm số lượng đối tượng cần được kiểm tra khi bộ thu gom rác chạy.

chúng tôi có thể triển khai các giao dịch db một cách tốt nhất? chúng ta có thể làm điều đó trong serveride JS ..?

Jaxer dường như có API cơ sở dữ liệu MySQL và SQLite. Như Matthew đã đề cập, nếu bạn sử dụng Rhino, bạn có thể sử dụng api JDBC.

Sửa: Thêm liên kết

+0

cảm ơn Brandon vì đã chia sẻ kinh nghiệm của bạn trong SSJS ... – RameshVel

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