문제

방금 실험을 시작했습니다. 앱타나 잭서 다음 프로젝트를 위한 서버측 자바스크립트 엔진입니다.그리고 나는 그것에 대해 몇 가지 질문이 있습니다

  • 서버 측 JS를 사용하면 서버 측 언어(C#, Java 등)를 사용하지 않고도 전체 웹 애플리케이션을 구현할 수 있습니다.또는 서버 측 JS가 웹 서버와 다른 언어 스택 사이에 위치합니다.

  • 정말 더 나은 접근 방식입니까 ??

  • 장점과 단점은 무엇입니까?

  • 이것이 성능 측면에서 어떻게 잘 작동합니까?

  • 서버 측 JS(다른 언어 없음)만 사용하여 실시간 구현(공용 웹사이트)이 있습니까?

  • Aptana jaxer(오픈 소스)를 통해 사용할 수 있는 대안은 무엇입니까??

  • DB 트랜잭션을 얼마나 잘 구현하고 유지할 수 있나요?서버사이드 JS에서 그렇게 할 수 있나요..?

  • 서버사이드 JS에서 RESTFul과 SOAP 서비스를 개발할 수 있나요..??

나는 이것이 너무 길다는 것을 알고 있습니다 (그리고 순진한 질문입니다).나는 누군가가 서버사이드 JS를 구현하는 동안 이미 이 모든 것을 접하길 바랄 뿐입니다.

편집하다:

Matthew & Ken의 의견에 따라 질문에 명확성을 추가했습니다. 정말 더 나은 접근 방식입니까 ??

내가 묻고 싶은 건 이것이다..

이것이 실제로 서버 측 언어(C#으로 가정)를 사용하는 것보다 더 나은 접근 방식인가요? 이를 웹 사이트의 C# 구현(성능, 언어 기능)과 어떻게 비교할 수 있습니까?그리고 서버 측에서 JS만 사용하거나 다른 언어 스택과 웹 서버 사이의 중간 계층에서 JS를 사용하는 것 중 어느 것이 더 나은 접근 방식입니까?

도움이 되었습니까?

해결책

나는 개발자입니다 미나 (www.mynajs.org), Rhino 및 Java 기반의 오픈 소스 서버측 JS 플랫폼입니다.Myna와 관련된 문제를 다루겠지만, 다음 사항 중 상당수는 일반적으로 서버측 JS에 적용됩니다.

서버 측 JS를 사용하면 서버 측 언어(C#, Java 등)를 사용하지 않고도 전체 웹 애플리케이션을 구현할 수 있습니다.또는 서버 측 JS가 웹 서버와 다른 언어 스택 사이에 위치합니다.

Myna에서는 전체 앱을 JS로 작성하는 것이 가능합니다.Myna에는 데이터베이스 액세스, 객체 관계 매핑, 암호화, OpenID 등을 위한 API가 이미 포함되어 있습니다.

정말 C#/Java보다 더 나은 접근 방식인가요?

Rhino 기반 서버를 사용하면 필요할 때마다 Java로 드롭다운하는 것이 쉽습니다.오픈 소스/상용/수작업으로 코딩된 Java 라이브러리를 쉽게 설치한 다음 JS에서 스크립팅할 수 있습니다.즉, JS의 빠른 개발이 가능하지만 Java 플랫폼의 장점은 그대로 유지됩니다.

장점과 단점은 무엇입니까?

장점:

  • 급속 성장:Myna에서는 .sjs 확장자를 사용하여 웹루트에 파일을 생성하기만 하면 됩니다.이는 코드 디버깅/조정을 위해 매우 빠른 편집-저장-새로 고침 브라우저 주기를 생성할 수 있음을 의미합니다.

  • 쉬운 JSON:서버 측에서 JS를 지원한다는 것은 복잡한 구조를 이동하는 것이 매우 쉽다는 것을 의미합니다.

  • 공유 코드:서버와 브라우저 모두에서 동일한 기능을 수행해야 하는 경우 동일한 코드를 사용할 수 있습니다.

  • 동적 ORM:정적으로 유형이 지정된 컴파일 언어를 사용하면 런타임에 객체를 변경하기가 어렵습니다.이는 일반적으로 ORM을 미리 정의해야 함을 의미합니다.Myna 빌딩에서 ORM은 다음과 같이 간단합니다.

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

    DB 테이블을 명시적으로 정의하지 않고도 모든 기본 CRUD 작업을 수행할 수 있는 개체를 얻습니다.또 다른 예로 양식 게시물에서 일치하는 모든 값이 포함된 행을 삽입할 수 있습니다.

    manager.create($req.data);
    
  • 함수형 프로그래밍:고급 JavaScript 기능을 사용해 본 적이 있다면 해당 기능이 서버측에서 얼마나 유용한지 알게 될 것입니다.일관된 서버사이드 환경으로 인해 다음과 같은 고급 기능을 사용해도 안전합니다. 어레이 엑스트라, 생성기와 반복자, 구조 분해 할당, 그리고 E4X

단점:

  • 도구:C# 및 Java와 같은 정적으로 유형이 지정된 언어에는 뛰어난 IDE 및 개발자 도구가 있습니다.JS와 같은 동적 언어에는 아직 도구 지원이 없습니다.개인적으로 나는 상용구 코드와 까다로운 유형 캐스팅의 큰 감소가 이를 보완한다고 생각하지만, IDE에서 많은 개발을 수행했다면 이는 여전히 큰 단점입니다.현재 IDE를 사용하고 있다면 다음을 고려해 보세요. 제디트 동적 언어의 경우

  • 성숙도/표준화:Serverside JS는 여전히 새로운 패러다임이며, 많은 플레이어가 있지만 확실한 승자는 없습니다.ECMA에는 서버사이드 JS에 대한 표준이 없습니다.Brandon의 답변에서 언급했듯이 커먼JS 그룹은 서버 측 JS 표준을 형성하려고 시도하고 있으며 Myna는 다음을 통해 실험적인 CommonJS 지원을 제공합니다. 일각고래

이것이 성능 측면에서 어떻게 잘 작동합니까?

원시 계산 속도에서 C# 및 Java와 같은 정적으로 유형이 지정된 컴파일 언어와 일치할 수 있는 동적 언어는 거의 없습니다.그렇게 말하면 실제로는 중요하지 않습니다.계산 집약적인 애플리케이션 부분은 Java로 작성하거나 기존 Java 라이브러리를 사용해야 합니다.예를 들어 누군가가 JS로 데이터베이스를 작성하도록 제안하지 않습니다.실제 웹 애플리케이션/SOA 서비스의 경우 속도 저하의 주요 원인은 원시 계산 속도가 아니라 비효율적인 코드, 특히 데이터베이스 액세스입니다.Myna는 다음과 같은 작업을 통해 이를 돕습니다.

  • 내부적으로 컴파일된 JS 스크립트 캐싱
  • 내부적으로 데이터베이스 트랜잭션을 위해 캐시된 준비된 문을 사용합니다.
  • 쿼리 및 출력 조각 캐싱
  • 데이터베이스 연결 풀링
  • 자동 ETag 해시 지원
  • 프로파일링 도구
  • 메타데이터의 지연 로딩

DB 트랜잭션을 얼마나 잘 구현하고 유지할 수 있습니까?서버사이드 JS에서 그렇게 할 수 있나요..?

"역전 또는 커밋할 수 있는 SQL 문 집합"과 같은 트랜잭션을 의미하는 경우 Myna는 아직 트랜잭션을 지원하지 않습니다.관심이 충분하다면 이를 시행할 의향이 있습니다.

"서버 측 JS는 어떤 종류의 데이터베이스 지원을 받습니까?" 그런 다음 답은 플랫폼 의존적입니다.Myna 플랫폼은 다음과 같은 데이터베이스 기능을 제공합니다.

  • "데이터 소스", 즉 데이터베이스 연결 정보를 정의할 수 있는 웹 기반 관리 애플리케이션입니다.그런 다음 이러한 데이터 소스를 이름으로 쿼리할 수 있습니다.Myna에는 H2, MySQL, Microsoft SQL Server 및 Postgresql용 JDBC 드라이버가 포함되어 있지만 모든 JDBC 또는 ODBC 데이터 소스를 사용할 수 있습니다.
  • Myna.데이터베이스 그리고 마이나테이블 데이터베이스 중립적인 메타데이터 액세스는 물론 테이블 생성 및 수정도 제공합니다.
  • 미나의 질문 객체는 maxRows, 페이징, SQL 매개변수, 사용자 정의 행 처리기, 쿼리 쿼리, 캐싱 등을 지원합니다.
  • 미나의 데이터 관리자 객체는 런타임 ORM 객체 생성을 지원합니다.

서버사이드 JS에서 RESTFul과 SOAP 서비스를 개발할 수 있나요..??

REST 및 SOAP 지원은 플랫폼별 기능입니다.미나의 웹 서비스 객체는 다음 프로토콜을 지원합니다:

  • 비누
  • XML-RPC
  • JSON-RPC
  • 외부 다이렉트
  • JSON-MYNA (일반 양식 게시물을 사용하고 JSON을 반환하는 간단한 프로토콜.브라우저에서 사용하기 쉽습니다)

또한 Myna는 PUT 및 DELETE 요청 방법을 이해하고 요청 본문 콘텐츠에 대한 액세스를 텍스트 및 바이너리 형식으로 제공하므로 이러한 RESTful 방법을 애플리케이션별 방식으로 처리할 수 있습니다.

디버깅

전통적인 중단점 디버깅은 서버 측에서 실제로 어려운 문제입니다.Rhino는 디버거 후크를 지원하지만 상태 비저장 웹 앱에서 이를 사용하는 것은 상당히 복잡합니다.개인적으로 저는 중단점 디버거가 사용 가능하더라도 사용하지 않습니다(예:개똥 벌레).대신 나는 로깅을 선호합니다.

미나에서는

 Myna.log(type,label,detail)

Myna의 로깅 데이터베이스에 HTML 로그 메시지를 쓰기 위해 우선순위가 낮은 스레드를 생성합니다.그런 다음 Myna 관리자를 통해 이러한 로그를 검색할 수 있습니다.또한 로그는 프로파일링 목적으로 타임스탬프와 경과된 밀리초를 기록합니다.Myna.dump(obj)는 모든 객체의 HTML 테이블 표현을 표시하는 데에도 사용할 수 있습니다.Myna는 또한 스택 추적, 소스 코드 컨텍스트 및 요청 세부 정보와 함께 처리되지 않은 모든 예외를 기록합니다.dump(), log() 및 기본 오류 처리기 사이에서는 Myna 코드를 디버깅하는 데 큰 어려움이 없었습니다.

다른 팁

서버 측 JS를 사용하면 서버 측 언어 (C#, Java 등)를 사용하지 않고 전체 웹 응용 프로그램을 구현할 수 있습니다.

많은 서버 측 프레임 워크가 Rhino 엔진을 사용하므로 Java 코드를 호출 할 수 있지만 다른 언어로 코드를 작성할 필요는 없습니다.

정말 더 나은 접근 방식인가요?

나는 JavaScript (언어로)가 기존 서버 측 언어보다 더 나은 옵션이라고 생각하지 않습니다. 유연성, 빠른 프로토 타이핑 (Pun 의도 없음), 유연성 등과 같은 장점 (Ruby 및 Python과 같은 다른 동적 언어와 함께)이 있습니다. 반면에 Java와 C#이 있거나 정적 타이핑이있는 라이브러리 지원이 없습니다. (나는 여기에 더 나은 토론에 들어 가지 않을 것입니다. 나는 다른 이유로 둘 다 좋아합니다).

두 가지 모두를 원한다면 javaScript를 응용 프로그램에 포함 된 스크립팅 언어로 사용할 수 있습니다. Java 용 Rhino 및 JScript.net을 사용하면 JavaScript에서 "기본"객체를 쉽게 조작 할 수 있습니다. 예를 들어 도메인 클래스를 Java 또는 C#로 작성하고 더 많은 유연성을 원하는 JavaScript로 스크립트 할 수 있습니다. JavaScript에 충분히 편안하다면 단일 언어로 작성하는 것이 더 간단 할 수 있습니다.

JavaScript를 사용하여 "실제"서버 측 응용 프로그램을 작성한 적이 없으므로 .NET보다 더 낫거나 나쁘게 판단 할 수는 없습니다 (JScript.net을 사용한 적이 없음). 나는 재미를 위해 몇 가지 프레임 워크를 가지고 놀았으며 현재 Helma NG를 사용하여 개인 사이트를 다시 작성하고 있습니다. 지금까지 그것은 좋은 경험이었습니다 (PHP보다 훨씬 낫습니다.

진보와 단점은 무엇입니까?

장점 :

  • 서버 측 및 클라이언트 측 프로그래밍에 필요한 하나의 언어 만 있습니다.
  • 양식 검증과 같은 것들에 대한 공유 코드 가능성. Jaxer를 사용하면 클라이언트, 서버 또는 둘 다에서 스크립트를 실행할 수 있습니다.
  • 당신은 JavaScript로 프로그램을받습니다 (언어가 마음에 들면서).

단점 :

  • 많은 프레임 워크는 실험적이거나 성숙하지 않습니다.
  • JavaScript로 프로그래밍해야합니다 (언어가 마음에 들지 않는다고 가정).

이것이 성능 측면에서 어떻게 잘 작동합니까?

성능은 다른 스크립팅 언어와 거의 비슷해야합니다.

서버 측 JS (다른 언어 없음) 만 사용하는 실시간 구현 (공개 웹 사이트)이 있습니까?

JavaScript를 사용하는 큰 웹 사이트는 모르지만 일부가있을 수 있습니다.

Aptana Jaxer (오픈 소스)의 대안은 무엇입니까 ??

Wikipedia는 a 큰 옵션 목록, 그러나 유용한 정보가 많지 않습니다. 성숙도와 크기가 넓은 옵션이 많이 있습니다.

다음은 내가 익숙한 몇 가지입니다 (다양한 학위)

  • 헬마 - 활성 레코드가있는 Rhino (Java) 기반 프레임 워크.
  • 헬마 ng -Helma Next Generation (실험적 재 작성, 활발한 개발).
  • 포보 - 좋은 지원이 있습니다 Netbeans.
  • v8cgi - 작고 간단한 것은 아직 생산 준비가되지 않은 Google의 V8 엔진을 사용합니다.
  • Jaxer -DOM 구현으로 SpiderMonkey에서 실행되므로 jQuery 또는 프로토 타입과 같은 프레임 워크로 페이지를 조작 할 수 있습니다. Aptana Studio에서는 좋은 IDE 지원을받습니다.

DB 거래를 얼마나 잘 구현하고 유지할 수 있습니까? serverside js ..에서 그렇게 할 수 있습니까?

Rhino 기반 프레임 워크를 사용하면 Java 클래스를 사용할 수 있으므로 완전한 JDBC 지원을받을 수 있습니다. Jaxer의 데이터베이스 라이브러리를 사용하지 않았으므로 그 기능에 대해 아무것도 모릅니다.

Serverside JS에서 RESTFUL 및 SOAP 서비스를 개발할 수 있습니까 ??

편안한 API는 아무런 문제가되지 않아야합니다. 비누에 대한 특정 지원을 모르지만 가능한.

서문으로서, 나는 하루 일에 SSJ를 사용합니다. SpiderMonkey에서 합리적으로 큰 (복잡성 및 페이지보기) 웹 사이트를 운영합니다. 경험이있는 Matthew의 훌륭한 대답에 추가하겠습니다.

서버 측 언어를 사용하는 것보다 실제로 더 나은 접근 방식입니까 (C#을 가정).

"더 나은" 정말로 당신이 그것으로하고 싶은 일에 달려 있습니다. JavaScript 자체에는 몇 가지 훌륭한 기능뿐만 아니라 매우 끔찍한 기능이 있습니다. JS (Client 또는 Server) 개발에 대해 진지한 경우 Douglas Crockford의 프레젠테이션을 시청하는 것을 충분히 추천 할 수 없습니다. JavaScript : 좋은 부분 당신이 아직하지 않았다면. 그는 Cruft를 분류하는 환상적인 작업을 수행했으며 부팅하기에 훌륭한 스피커입니다.

SSJS 세계가 지금 부족한 가장 큰 것은 성숙입니다. 나는 C#에 익숙하지 않지만 JavaScript에는 성숙한 표준 라이브러리가 없으며 패키지 배포의 성숙한 수단이 없습니다. 나에게 그것은 퍼즐의 큰 조각이다.

즉, 당신의 주시를 계속하십시오 commonjs 그룹. 그들은 그 정확한 것들을 정의하기 위해 노력하고 있습니다. 또한 Jaxer API 문서는 해당 프레임 워크에 포함 된 내장을 나열합니다.

이것이 성능 측면에서 어떻게 잘 작동합니까?

JavaScript 자체는 느린 언어가 아니며 특히 빠른 언어도 아닙니다. Matthew가 지적했듯이, 당신이 사용할 다른 스크립팅 언어와 비슷해야합니다. 브라우저 공급 업체 간의 전쟁은 누가 가장 빠른 브라우저를 구축 할 수 있는지 확인하면 SSJS 군중에게도 도움이 될 것입니다.

V8 팀이 엔진에 구축 한 세대 쓰레기 수집은 이에 대한 훌륭한 예입니다. 가상 머신을 힙에서 무료로 해방시키고 메모리를 되 찾는 데 메모리를 되 찾는 것은 다소 느릴 수 있지만, 쓰레기 수집기가 실행될 때 검사 해야하는 물체의 양을 줄임으로써 완료했습니다.

DB 거래를 얼마나 잘 구현하고 유지할 수 있습니까? serverside js ..에서 그렇게 할 수 있습니까?

Jaxer에는 MySQL 및 SQLite 데이터베이스 API가있는 것으로 보입니다. Matthew가 언급했듯이 Rhino를 사용하면 JDBC API를 사용할 수 있습니다.

편집하다: 링크가 추가되었습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top