Pergunta

Eu só começou a experimentar com Aptana Jaxer motor de JavaScript do lado do servidor para o meu próximo projeto. E eu tenho alguns quesions sobre isso

  • Ao usar lado do servidor JS, podemos implementar toda a aplicação web sem usar qualquer linguagem do lado do servidor (como C #, java etc). Ou do lado do servidor JS fica entre o servidor web e outra pilha langauge.

  • É realmente uma abordagem melhor ??

  • quais são os advandages e disadvandages?

  • como isso funciona bem em termos de desempenho?

  • há qualquer implementação em tempo real (sites públicos) usando apenas do lado do servidor JS (há outras línguas)?

  • quais são as alternativas disponíveis mais de Aptana Jaxer (open source) ??

  • Como bem podemos implementar e transações maitain db? nós podemos fazer isso em JS do lado do servidor ..?

  • é possível desenvolver serviços RESTful e SOAP em serverside JS .. ??

eu sei que isso é muito longo (e perguntas ingênuas). Estou apenas esperando que alguém já se deparar com todos estes durante a implementação JS do lado do servidor.

EDIT:

De acordo com Mateus & Ken comentários, eu adicionei alguma clareza à pergunta É realmente uma abordagem melhor ??

este é o que eu pretendo pedir ..

É realmente uma abordagem melhor do que usar linguagens do lado do servidor (assumir c #), como podemos comparar isso com o c # implementação de um website (desempenho, recursos de linguagem) ?? E qual é a melhor abordagem, usando JS sozinho em serverside ou JS na camada intermediária entre outra língua pilha e webserver ??

Foi útil?

Solução

Eu sou o desenvolvedor para Myna (www.mynajs.org), uma fonte aberta JS do lado do servidor plataforma baseada em Rhino e Java. Vou abordar as questões que se relacionam com Myna, mas muitos destes pontos se aplica a JS do lado do servidor em geral:

Ao usar lado do servidor JS, podemos implementar toda a aplicação web sem usar qualquer linguagem do lado do servidor (como C #, java etc). Ou do lado do servidor JS fica entre o servidor web e outra pilha langauge.

Em Myna é possível escrever seu aplicativo inteiro em JS. Myna já inclui API do para acesso de banco de dados, Object Relational Mapping, crytogrophy, OpenID, etc.

É realmente uma abordagem melhor do que c # / Java?

Com um servidor baseado Rhino é trivial para cair para Java sempre que necessário. Você pode facilmente instalar open-source / bibliotecas comerciais / mão-codificado Java e, em seguida, roteiro los de JS. Isso significa que você obter o rápido desenvolvimento da JS, mas manter as vantagens da plataforma Java

Quais são as vantagens e desvantagens?

pros:

  • O rápido desenvolvimento : Em Myna que você acabou de criar arquivos no webroot com uma extensão .sjs. Isto significa que você pode criar um ciclo navegador edit-salvar-refresh com é muito rápido para depurar / aprimorando código.

  • Fácil JSON : Tendo JS de meios do lado do servidor em movimento estruturas complexas é muito fácil

  • Código Comum : Se você precisa executar o a mesma função no servidor eo navegador, você pode usar o mesmo código

  • Dinâmica ORM : tipagem estática linguagens compiladas torná-lo difícil de objetos alter em tempo de execução. Isso geralmente significa que ORM tem de ser definida com antecedência. Em Myna construção ORM é tão simples como

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

    Você recebe um objeto que pode fazer todas as operações básicas CRUD sem definir nunca explicitamente as tabelas DB. Como outro exemplo, você pode inserir uma linha com todos os valores correspondentes a partir de um post de formulário:

    manager.create($req.data);
    
  • Programação Funcional : Se você começou a tocar com JavaScript recursos avançados, então você vai apreciar o quão útil eles são server-side. Por causa do ambiente do lado do servidor consistente é seguro usar recursos avançados, como matriz Extras , geradores e iteradores , noreferrer atribuições desestruturação , e E4X

contras:

  • Ferramentas : tipagem estática linguagens como C # e Java têm excelentes ferramentas de IDE e desenvolvedores. linguagens dinâmicas como JS simplesmente não têm o apoio ferramenta ainda. Pessoalmente acho que a grande redução no código clichê e tipo exigente fundição torna-se para isso, mas isso ainda é uma grande desvantagem se você têm vindo a fazer um monte de desenvolvimento em IDEs. Se você está usando um IDE, considere o uso jedit para linguagens dinâmicas

  • Maturidade / Normalização : Serverside JS ainda é um novo paradigma, e há muitos jogadores e sem claros vencedores. não ECMA não tem nenhum padrões para JS do lado do servidor. Como mencionado na resposta de Brandon, o commonjs grupo é a tentativa de formar um padrão serverside JS e Myna tem suporte commonjs experimental via Narwhal

como isso funciona bem em termos de desempenho?

Em velocidade computacional cru, algumas linguagens dinâmicas pode igualar estaticamente linguagens compiladas digitados como C # e Java. Dito isto, realmente não importa. Qualquer parte do seu aplicativo que é computacionalmente intensivas provavelmente deve ser escrito em Java, ou usar uma biblioteca Java existente. Eu não sugeriria que qualquer um escrever um banco de dados em JS, por exemplo. Para aplicativos da Web do mundo real / serviços SOA, a principal causa da lentidão é a velocidade computacional não brutos, é código ineficiente, especialmente o acesso de banco de dados. Myna ajuda com isso, fazendo coisas como:

  • roteiros JS internamente a memorização intermédia compilados
  • declarações preparadas internamente com a utilização em cache para transações de banco de dados
  • consulta e fragmento de saída cache
  • Database connection pooling
  • Suporte de hash ETag automática
  • ferramentas de perfil
  • preguiçoso carregamento de metadados

quão bem podemos implementar e manter db transações? nós podemos fazer isso em serverside JS ..?

Se você transação média como em "um conjunto de instruções SQL que podem ser revertidas ou cometidos", em seguida, Myna ainda não suporta transações. Estou aberto a implementação deste se houver interesse suficiente.

Se você quer dizer "que tipo de apoio do banco de dados faz JS do lado do servidor tem?" então a resposta é dependente de plataforma. A plataforma Myna oferece os seguintes recursos de banco de dados:

  • A aplicação de administração baseada na web onde você pode definir "fontes de dados", ou seja banco de dados de informação de conexão. Você pode então consultar essas fontes de dados pelo nome. Myna inclui drivers JDBC para H2, MySQL, Microsoft SQL Server, e PostgreSQL, mas qualquer fonte de dados JDBC ou ODBC pode ser usado
  • Myna.Database e < a href = "http://www.mynajs.org/shared/docs/js/libOO/files/Table-sjs.html" rel = "nofollow noreferrer"> Myna.Table fornecer acesso metdata banco de dados neutro bem como a criação da tabela e modificação.
  • consulta objeto suportes maxRows de Myna , paginação, parâmetros SQL, manipuladores de linha personalizada, consulta-de-consulta, caching e mais
  • O Myna DataManager suportes objeto de tempo de execução criação ORM objeto

é possível desenvolver serviços RESTful e SOAP em serverside JS .. ??

REST e suporte do sabão são características específicas da plataforma. objeto WebService de Myna suporta os seguintes protocolos:

  • SABÃO
  • XML-RPC
  • JSON-RPC
  • Ext direto
  • JSON-MYNA (Um protocolo simples que usa normais mensagens de formulário e retorna JSON. Fácil de usar a partir do navegador)

Myna também entende o PUT e métodos de solicitação de exclusão e apresenta acesso ao conteúdo do pedido corpo em texto e forma binária, de modo que é possível lidar com esses métodos RESTful em uma maneira específica de aplicação.

Depuração

depuração ponto de interrupção tradicional é um serverside desafio real. Embora Rhino suporta ganchos depurador, usando estes a partir de um aplicativo apátrida web seria muito envolvido. Pessoalmente, eu não uso mesmo depuradores de ponto de interrupção, mesmo quando eles estão disponíveis (por exemplo, Firebug). Em vez disso eu prefiro logging.

Em Myna,

 Myna.log(type,label,detail)

irá gerar um segmento de baixa prioridade para escrever uma mensagem de log HTML ao banco de dados de registro de Myna. Esses logs podem, então, ser searChed através do administrador de Myna. Logs também timestamps recordes e milissegundos decorrido para fins de criação de perfis. Myna.dump (obj) também pode ser usado para apresentar uma representação tabela HTML de qualquer objecto. Myna também registra todas as exceções tratadas-un com rastreamentos de pilha, o contexto de código-fonte, e detalhes da solicitação. Entre despejo (), log (), e o manipulador de erro padrão Eu não tenho muita dificuldade de depuração de código Myna

Outras dicas

Ao usar lado do servidor JS, podemos implementar toda a aplicação web sem usar qualquer linguagem do lado do servidor (como C #, java etc).

Não deveria ser necessário escrever código em qualquer outra língua, embora muitos do lado do servidor frameworks JavaScript usar o motor de Rhino, que lhe permite chamar qualquer código Java.

É realmente uma abordagem melhor ??

Eu não acho JavaScript (como língua) é realmente uma opção melhor ou pior do que as linguagens do lado do servidor tradicionais. Tem vantagens (juntamente com outras linguagens dinâmicas como Ruby e Python) como a flexibilidade, a prototipagem rápida (sem trocadilhos), flexibilidade, etc. Por outro lado, ele não tem o apoio biblioteca que Java e C # tem ou tipagem estática (não vou entrar no debate sobre qual é melhor aqui, eu gosto tanto por razões diferentes).

Se você quer o melhor de ambos, você pode usar JavaScript como uma linguagem de script, incorporado na sua aplicação. Rhino para Java, e JScript.NET torná-lo fácil de manipular "nativo" objetos em JavaScript. Você poderia, por exemplo, escrever as suas classes de domínio em Java ou C #, e roteiro los com JavaScript onde você quer mais flexibilidade. Se você é bastante confortável com JavaScript, escrevendo em um único idioma pode ser mais simples embora.

Eu nunca escrevi um aplicativo do lado do servidor "real" usando JavaScript, então eu realmente não posso fazer um julgamento sobre se é melhor ou pior do que .NET (Eu também nunca usou JScript.NET). Eu brinquei com algumas estruturas de diversão embora e atualmente estou reescrevendo meu site pessoal usando Helma NG. Até agora tem sido uma boa experiência (muito melhor do que PHP, que eu nunca realmente gostei).

quais são os advandages e disadvandages?

advantanges:

  • Apenas uma linguagem necessária para server-side e client-side de programação.
  • Possibilidade de código compartilhado, para coisas como validação de formulário. Jaxer permite executar scripts no cliente, servidor ou ambos.
  • Você começa a programa em JavaScript (supondo que você como a linguagem).

Desvantagens:

  • Muitos quadros são experimental / não muito maduro.
  • Você tem que programa em JavaScript (supondo que você não gosta da língua).

como isso funciona bem em termos de desempenho?

Performance deve ser aproximadamente comparável a outras linguagens de script.

há qualquer implementação em tempo real (sites públicos) usando apenas do lado do servidor JS (há outras línguas)?

Eu não sei de qualquer grandes sites usando JavaScript, mas pode haver alguma.

quais são as alternativas disponíveis mais de Aptana Jaxer (open source) ??

Wikipedia tem um grande lista de opções , mas não tem muito útil em formação. Há muitas opções com uma ampla gama de maturidade e tamanho.

Aqui estão alguns que eu estou familiarizado com (em diversos graus)

  • Helma -. Rhino (Java) framework baseado com registro ativo
  • Helma NG - Helma Next Generation (reescrita experimental, em desenvolvimento ativo).
  • Phobos - tem um bom suporte em NetBeans .
  • v8cgi - pequeno e simples, usa o motor V8 do Google, provavelmente não pronto para produção ainda .
  • Jaxer - Funciona em Macaco-Aranha com uma implementação DOM, de modo que você pode manipular a página com frameworks como jQuery ou Prototype. Tem um bom suporte IDE em Aptana Studio.

quão bem podemos implementar &manter db transações? nós podemos fazer isso em serverside JS ..?

estruturas baseadas em Rhino permitem usar classes Java, então você tem total apoio JDBC. Eu não usei bibliotecas de banco de dados do Jaxer, então eu não sei nada sobre as suas capacidades.

é possível desenvolver serviços RESTful e SOAP em serverside JS .. ??

RESTful APIs não deve haver qualquer problema. Eu não sei de qualquer apoio específico para SOAP, mas deve ser possível .

Como um prefácio, eu uso SSJS no meu trabalho do dia. Corremos um razoavelmente grande (em termos de complexidade, bem como page views) website em SpiderMonkey. Vou acrescentar a excelente resposta de Matthew onde eu tenho experiência.

É realmente uma abordagem melhor do que usar linguagens do lado do servidor (assumir c #)

"Better" realmente depende do que você quer fazer com ele. -se JavaScript tem algumas características grandes, bem como aqueles terríveis bonitas. Se você é sério sobre o desenvolvimento de JS (cliente ou servidor), eu não posso recomendar o suficiente para que você assistir a apresentação de Douglas Crockford, Javascript: The Good Parts se você não tiver já. Ele tem feito um trabalho fantástico classificação o cruft, e ele é um excelente orador para arrancar.

A maior coisa que eu encontrar o mundo SSJS falta agora é a maturidade. Eu não estou familiarizado com C #, mas JavaScript não tem amadurecer biblioteca padrão, e não amadurecem meios de distribuição pacote. Para mim isso é uma grande peça do puzzle.

Dito isso, manter seus olhos sobre o href="http://wiki.commonjs.org/wiki/CommonJS" rel="nofollow noreferrer"> commonjs grupo . Eles estão trabalhando para definir as coisas exatas. Além disso, a documentação Jaxer Api lista as built-ins que estão incluídos com esse quadro.

como isso funciona bem em termos de desempenho?

JavaScript em si não é uma linguagem lento, nem é um particularmente rápido um. Como Matthew apontou, deve ser comparável a qualquer outra linguagem de script que você usaria. A guerra entre o navegador fornecedores para ver quem pode construir o navegador mais rápido irá beneficiar os SSJS multidão também.

A coleta de lixo geracional que a equipe de construção V8 em seu motor é um grande exemplo disso. Travar a máquina virtual para objetos inacessíveis livres da pilha e recuperar a sua memória pode ser um pouco lento, mas eles mitigados que, ao reduzir a quantidade de objetos que precisam ser inspecionados quando o coletor de lixo é executado.

quão bem podemos implementar e manter transações banco de dados? nós podemos fazer isso em serverside JS ..?

Jaxer parece ter APIs de banco de dados MySQL e SQLite. Como Matthew mencionado, se você usar Rhino, você pode usar a API JDBC.

Editar : Adicionado links

scroll top