Bạn sử dụng JavaScript phía máy chủ khi nào và như thế nào? [đóng cửa]


76

Đôi khi tôi tìm kiếm một số trợ giúp về JavaScript và tôi bắt gặp thuật ngữ "JavaScript phía máy chủ". Khi nào bạn sử dụng JavaScript phía máy chủ? Và làm thế nào?

Kinh nghiệm của tôi về JavaScript đã có trong trình duyệt. Có phiên bản đã biên dịch của JS không?


8
câu hỏi thú vị
DFectuoso

Xem câu hỏi này về Jaxer: stackoverflow.com/questions/98915/…
Prestaul


Tôi nghĩ điều này có thể hữu ích ở đây, Wikipedia về So sánh các giải pháp javascript server-side: en.wikipedia.org/wiki/...
jeff xạ hương

Câu hỏi này gần tương đương với "Khi nào và làm thế nào để bạn thống nhất các ngôn ngữ trong ngăn xếp phát triển?" . Javascript là ngôn ngữ chuẩn ở client, JSON cho transport ... Vì vậy, với Javascript ở server-side, bạn có thể thống nhất việc phát triển. Xem câu trả lời tại đây .
Peter Krauss,

Câu trả lời:


25

Có dự án Phobos , là một khung JavaScript phía máy chủ.

Back In The Day, máy chủ web Netscape cũng cung cấp tập lệnh java phía máy chủ.

Trong cả hai trường hợp này, JavaScript được sử dụng giống như bạn sử dụng bất kỳ ngôn ngữ nào trên máy chủ. Thông thường để xử lý các yêu cầu HTTP và tạo nội dung.

Rhino , là hệ thống JavaScript của Mozilla dành cho Java, biên dịch JavaScript sang các mã byte Java mà JVM có thể chọn để JIT. Các hệ thống khác sử dụng các phương tiện khác để thực thi tập lệnh java, thậm chí đến mức một số JIT đang biên dịch mã nội bộ tập lệnh java của họ.

Tôi thấy trước rằng sẽ có ngày càng nhiều JavaScript trên máy chủ. Khi bạn đang viết các ứng dụng "dày" bằng JavaScript trên máy khách, thì bạn cũng có thể viết logic của mình bằng JavaScript trên máy chủ để không phải thực hiện các bước nhảy vọt về nhận thức từ ngôn ngữ này sang ngôn ngữ khác. Môi trường sẽ khác nhau, nhưng phần lớn mã và kiến ​​thức của bạn sẽ có thể chia sẻ được.

Cuối cùng, JavaScript có lẽ là ngôn ngữ số ít có nhiều tiền nhất hiện nay về mặt triển khai. Từ Apple, Mozilla, Google và thậm chí cả Microsoft cũng như những nỗ lực để biến nó trở thành một ngôn ngữ tiên tiến hơn nữa (về cơ bản là một Đề án với các macro sans cú pháp Algol).

Hầu hết các triển khai đó đều bị chôn vùi trong trình duyệt, nhưng điều đó không có nghĩa là không có giá trị ở phía máy chủ.

Công cụ là nơi thiếu JavaScript lớn nhất, đặc biệt là ở phía máy chủ, nhưng nếu bạn xem xét một thứ gì đó như Phobos, nơi bạn có thể gỡ lỗi JavaScript phía máy chủ của mình trong IDE, thì đó là một tiến bộ lớn.

Cá nhân tôi đang tung JavaScript trong các ứng dụng của mình như sơn trắng. Nó cung cấp khả năng mở rộng rẻ với chi phí rất thấp và là một công cụ tuyệt vời.


lưu ý rằng có một nỗ lực để cải thiện khả năng tương tác và phòng trống thư viện cho serverside JS wiki.commonjs.org/wiki/CommonJS
oberhamsi

3
2016 UPDATE: Nhìn vào Node.js . Và đọc câu trả lời của Peter Krauss .
ToolmakerSteve

Câu trả lời này giống như một lời tiên tri vào thời điểm đó về sự gia tăng của JS phía máy chủ như Node.js, v.v.
Ashok MA

27

Nó không phải là AJAX, trừ khi mọi người sử dụng thuật ngữ này không đúng cách. Như tên gọi của nó, SSJS là JavaScript chạy trên máy chủ, được thông dịch bởi một công cụ JavaScript độc lập (tức là không phụ thuộc vào trình duyệt), như SpiderMonkey.

Quan tâm làm gì? Chà, một lĩnh vực tôi hiện thấy nó chưa được sử dụng hết là xác thực dữ liệu. Với SSJS, bạn viết một đoạn mã sau đó được sử dụng trên cả máy chủ và máy khách. Do đó, bạn nhận được phản hồi của người dùng ngay lập tức từ JS phía máy khách sẽ tự động khớp với việc kiểm tra dữ liệu diễn ra trên máy chủ.


Một ngày nào đó tôi muốn tự động tạo JavaScript từ các ràng buộc KIỂM TRA cơ sở dữ liệu theo cách này. (Tôi tự hỏi liệu pgsql có ràng buộc JS không?)
Kev

1
+1, chưa bao giờ nghĩ về góc xác thực
orip 19/01

Tôi đang sử dụng phương pháp này trên một số ứng dụng ASP cũ. Nó không phải là không có vấn đề (những vấn đề tương tự bạn phải đối mặt với IE vs FF và Opera), nhưng một khi bạn đã quản lý để làm cho nó hoạt động, nó hoạt động tuyệt vời.
Esteban Küber

22

TIN TỨC 2013

Node.js (xem thêm tại bài viết Wikipedia ) là một thành công và cộng đồng của nó đang phát triển !

MongoDB (tại máy chủ), Chrome (tại máy khách) và Node.js (tại máy chủ) sử dụng công cụ JavaScript V8 .

Tái bút: bạn chỉ có thể sử dụng một ngôn ngữ, Javascript, cho tất cả các mô-đun dự án của mình: client-APIs, client interface, "server hub" và cơ sở dữ liệu máy chủ (ví dụ: các thủ tục được lưu trữ). Tất cả các lập trình viên "mã hóa một lần"!


Sự khác biệt chính giữa ngôn ngữ "Server-Javascript""Client-Javascript" , được giải thích tại http://www.commonJS.org/ , thư viện tiêu chuẩn cho Server-Javascript .

CommonJS tồn tại từ năm 2009, và ngày nay (2013) là một trưởng thành tiêu chuẩn , được sử dụng trong cả hai, MongoDBNode.js .


LƯU Ý LỊCH SỬ: gói mở "client + server Javascript" (bao gồm cả việc sử dụng PostgreSQL) hoạt động cũ nhất vẫn còn tồn tại!
Được phát hành vào năm 2001 và liên tục phát triển kể từ đó, Whitebeam là một công nghệ Javascript (và DOM) trưởng thành. Lần cập nhật cuối cùng là vào tháng 1 năm 2016.


TIN TỨC 2016

Công cụ Node.js tiếp tục như một thời gian chạy được xây dựng trên V8 JavaScript của Chrome... Và bây giờ, trên thực tế, là một thành công hợp nhất! Các bản phát hành cuối cùng là v7.0 v6.8 LTS .

JSON , dưới dạng định dạng trao đổi dữ liệu, có sự quan tâm ngày càng tăng liên tục trong những năm qua, đã vượt qua sự quan tâm đối với XML vào năm 2016 (xem thêm trong bối cảnh Khoa học, đã vượt qua năm 2011 ). Là định dạng Javascript gốc, nó cũng là một chỉ báo xu hướng ngôn ngữ tốt.

Công cụ V8 (nhanh hơn) cũng được sử dụng nhiều nhất, kể từ năm 2014: trong ứng dụng khách phổ biến nhất ( Chrome trên máy tính để bàn và WebView trên Android) và phổ biến ở máy chủ - Node.js dưới dạng thời gian chạy và PostgreSQL với PL / V8 cho SQL và các thủ tục được lưu trữ .

... Có lẽ đóng góp phía máy chủ quan trọng nhất trong năm 2016 là hỗ trợ cơ sở dữ liệu nhanh và mạnh mẽ cho JSON và Javascript: với PostgreSQL 9.1+ (2016-10), bạn có thể tải PL / V8 (và các phương ngữ như Coffeshop) một cách đơn giản CREATE EXTENSIONchỉ huy; với PostgreSQL 9.5+ (2016-10) là quan trọng nhất, một tập hợp trực giao hoàn chỉnh của các hàm và toán tử JSON và JSONb .

Vì vậy, thực tế là có một ngăn xếp phát triển JavaScript thống nhất nhanh chóng, linh hoạt và đáng tin cậy .


Re "JSON .. Là định dạng Javascript gốc, nó cũng là một chỉ báo xu hướng ngôn ngữ tốt ." Không, sự phổ biến của JSON đang bùng nổ vì nó đã cho thấy bản thân nó hữu ích không kém trong các ngôn ngữ khác, bất cứ khi nào các gói nhỏ gồm các cặp khóa-giá trị cần được chuyển giữa các thiết bị (điện thoại, máy tính để bàn, máy chủ). Nó dễ làm việc hơn XML, cho các nhu cầu dữ liệu đơn giản. Đặc biệt, cả Apple và Google đều sử dụng JSON cho các thông báo đẩy. Chỉ điều đó thôi cũng đủ cho một sự bùng nổ sử dụng!
ToolmakerSteve

Về "cấu trúc phát triển hợp nhất", cũng đang xen kẽ để bảo toàn một số tính đẳng cấu của máy khách / máy chủ trong mô hình MVC được sử dụng bởi cả máy khách và máy chủ. Xem bài viết isomorphic-phổ-javascript hoặc bài viết git .
Peter Krauss,

... Vấn đề lớn vào năm 2019 bởi tranh chấp bằng sáng chế của Oracle / Google, hãy xem github.com/plv8/plv8/issues/364
Peter Krauss

20

ASP cổ điển có thể sử dụng JavaScript trên máy chủ, mặc dù hầu hết mọi người đều sử dụng VBScript.

Một cách sử dụng hấp dẫn JavaScript trên máy chủ là bổ sung cho việc xác thực dữ liệu phía máy khách. Ví dụ: bạn có thể sử dụng cùng một thư viện xác thực JavaScript trên máy khách và trên máy chủ. Điều này đảm bảo rằng bạn đang sử dụng cùng một logic trên máy khách như bạn đang ở trên máy chủ, nhưng (có khả năng) tránh một chuyến khứ hồi không cần thiết bằng cách xác thực trước ở phía máy khách.

Wikipedia liệt kê một số triển khai JavaScript phía máy chủ tại đây .


Tôi thích từ ngữ của bạn hơn của tôi. :) +1
Kev

Chúng tôi đã sử dụng JScript w / ASP tại công ty cuối cùng của tôi. Phần thưởng là ít ngôn ngữ hơn (chúng tôi đã có các nhà phát triển front-end viết một số lệnh gọi dữ liệu phía máy chủ) và mã sử dụng lại, vì bạn sẽ sử dụng gần như chính xác cùng một mã để xác thực cả hai bên. Những thứ tốt, nhưng giờ tôi đang loay hoay tìm cách tốt để đưa nó vào Apache.
Alex Mcp

6

Nó có thể đề cập đến việc sử dụng javascript để đăng thông báo lên máy chủ web mà không cần tải lại trang: nói cách khác là AJAX.

Nhưng nhiều khả năng tôi nghĩ nó có nghĩa như Aptana / Jaxer (hoặc ngày nay là Node.js), sử dụng javascript cho ngôn ngữ phía máy chủ. Trong trường hợp này, hãy nhớ rằng javascript chỉ là một ngôn ngữ: DOM được sử dụng trong trình duyệt web là một loại API. Các công cụ javascript phía máy chủ sẽ cung cấp các đối tượng API của riêng chúng, hướng đến các tác vụ phía máy chủ như DB và truy cập hệ thống tệp.

Javascript phía máy chủ là một ý tưởng thú vị vì vấn đề xác thực phía máy khách: bạn muốn xác thực phía máy khách để tránh gửi các yêu cầu không cần thiết đến máy chủ của mình. Điều này cải thiện hiệu suất máy chủ và giảm độ trễ trên máy khách. Nhưng bạn phải xác thực phía máy chủ vì bạn không thể tin tưởng máy khách. Điều này dẫn đến rất nhiều mã trùng lặp giữa máy khách và máy chủ.

Lý thuyết là nếu ngôn ngữ máy khách và máy chủ của bạn khớp nhau, bạn sẽ không cần hai triển khai cùng một logic nữa. Trong thực tế, nó không hoạt động tốt vì lượt xem của máy khách và máy chủ của một yêu cầu trang quá khác nhau và vì bạn không kiểm soát công cụ javascript được sử dụng bởi máy khách.


bài cũ, nhưng đây là cách rõ ràng và thành công nhất trong đó JavaScript phía máy chủ có thể được sử dụng mà tôi đã đọc. 1
wootscootinboogie

3

Nó thực sự phụ thuộc nếu bạn đang nói về ASP.NET hoặc ASP cổ điển. Nếu bạn đang sử dụng ASP.NET, không có nhiều lý do chính đáng để sử dụng Javascript.

ASP Classic là một trường hợp khác. Bạn có thể sử dụng Javascript ở phía máy chủ trong ASP giống như cách bạn sử dụng VBScript. Bạn có thể truy cập các đối tượng Ứng dụng, Máy chủ, Yêu cầu và Phản hồi giống như thông qua VBScript.

Có thể có những lợi ích thực sự khi sử dụng Javascript ở phía máy chủ trong ASP hơn là VBScript. Nó có nghĩa là bạn có thể chia sẻ mã giữa mã trình duyệt và mã máy chủ. Điều đó cũng có nghĩa là các nhà phát triển của bạn không cần phải xử lý hai ngôn ngữ khác nhau.

Tuy nhiên, có một số nhược điểm đối với Javascript phía máy chủ trong ASP. Thứ nhất, nó có vẻ không nhanh như VBScript ở phía máy chủ khi nối chuỗi. Nó cũng không tốt bằng việc thực hiện các cuộc gọi đến các đối tượng COM như VBScript (bạn chỉ có thể lấy lại dữ liệu từ các cuộc gọi COM thông qua giá trị trả về, thay vì thông qua các tham số out / byref).


1
OP không bao giờ đề cập đến một công nghệ cụ thể; anh ta có thể dễ dàng nghĩ về một cái gì đó giống như Jaxer.
Adam Lassek

Rất nhiều người không nhận ra rằng bạn thậm chí có thể sử dụng Javascript phía máy chủ trong ASP Cổ điển. Vì vậy, tôi nghĩ sẽ hữu ích khi giải thích rằng thuật ngữ "Javascript phía máy chủ" chỉ có thể đề cập đến ASP Classic đơn giản.
andynormancx

JScript string concat hơi chậm hơn khi sử dụng toán tử (+), nhưng việc đẩy vào một mảng và nối thì rất nhanh và không khó hơn nhiều. Nếu bạn đang ghép đủ chuỗi quan trọng thì không khó hơn để làm: var buffer = []; buffer.push ('chuỗi'); trả về bộ đệm.join ('');
Prestaul

2

Bạn có thể muốn có một số chức năng trong cả trình duyệt và máy chủ để có cùng một cách triển khai.

Một ví dụ sẽ là trình kết xuất cho cú pháp wiki, mà bạn chạy trong trình duyệt cho trình soạn thảo WYSIWYG và trên máy chủ để hiển thị trang kết quả. Bằng cách này, bạn biết rằng cả hai kết quả được hiển thị sẽ hoàn toàn giống nhau trong cả hai trường hợp.

Rõ ràng Rhino có thể biên dịch JavaScript sang các lớp Java.


1

Theo truyền thống, Javascript chạy xung quanh Mô hình Đối tượng Tài liệu. Nhưng điều gì sẽ xảy ra nếu bạn làm việc cho một cửa hàng Java và muốn một công cụ viết kịch bản xung quanh mô hình đối tượng tùy chỉnh của bạn? Đó là khi Javascript phía máy chủ xuất hiện.

http://en.wikipedia.org/wiki/Server-side_JavaScript


1

Tôi nhớ với Cocoon (khung công tác Java / XML / Javascript MVC của Apache), tôi đã từng sử dụng Javascript phía máy chủ vì có một thứ (tôi tin là các cform) cần được viết bằng Javascript và đang chạy trên máy chủ mặc dù tôi tin bạn. có thể viết nó bằng Java.

Chúng tôi đã sử dụng Rhyno vào thời điểm đó, vui lòng kiểm tra: http://peter.michaux.ca/articles/server-side-javascript-with-rhino-and-jetty


1

http://steve-yegge.blogspot.com/2007/06/rhino-on-rails.html

Kiểm tra cách Steve Yegge sử dụng JavaScript phía máy chủ với Rhino và lý do tại sao. Anh ấy có rất nhiều thứ về cách anh ấy cảm thấy JavaScript đang phát triển và sắp ra mắt.


4
Tôi không có 6 giờ rảnh rỗi cho một bài đăng trên Yegge.
Johnno Nolan

Người đàn ông, tôi ước tôi có thể bỏ phiếu cho một bình luận. :)
Christian Nunciato

1

Vâng, tôi vừa đọc về SSJS trên blog của một người tên John Resig .

Anh ấy mô tả một công cụ có tên là Jaxer, theo anh ấy là "Hãy tưởng tượng tách phần hiển thị trực quan của Firefox và thay thế nó bằng một hook vào Apache - nói một cách đại khái đó là Jaxer."

Đối với bất kỳ ai biết ASP.NET HTML trông quen thuộc

<html>
<head>
  <script src="http://code.jquery.com/jquery.js" runat="both"></script>
  <script>
    jQuery(function($){
      $("form").submit(function(){
        save( $("textarea").val() );
        return false;
      });
    });
  </script>
 <script runat="server">
    function save( text ){
      Jaxer.File.write("tmp.txt", text);
    }
    save.proxy = true;

    function load(){
      $("textarea").val(
        Jaxer.File.exists("tmp.txt") ? Jaxer.File.read("tmp.txt") : "");
    }
  </script>
</head>
<body onserverload="load()">
   <form action="" method="post">
    <textarea></textarea>
    <input type="submit"/>
  </form>
</body>
</html>

Lưu ý runat = "sever" và runat = "cả hai"


Tôi đăng này trên, nhưng có lẽ nó thuộc về đây ... Một số thông tin phản hồi trên Jaxer: stackoverflow.com/questions/98915/...
Prestaul

@ John Nolan Tôi tin rằng John Rseig là '' anh chàng đằng sau jQuery
jeff xạ hương

1

Với ASP, bạn có thể sử dụng JavaScript phía máy chủ theo một số cách. Cách tôi thường sử dụng nhất là có cùng một mã thực thi trên máy khách và trên máy chủ để xác thực .

file.js

<!--//--><%

//javascript code
function example(){return "Hello, World!";}

//%>

file.html

<%@LANGUAGE="javascript"%>
<!-- METADATA TYPE="typelib" 
FILE="C:\Archivos de programa\Archivos comunes\System\ado\msado15.dll" -->
<!--#include file="file.js"-->
<html>
<head>
  <script language="javascript" src="file.js"></script>
</head>
<body>
<%=example();%>
<script language="javascript">alert(example());</script>
</body>
</html>

file.js bắt đầu và kết thúc theo cách nó làm để cho phép bao gồm cùng một tệp.

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.