2010-05-27 11 views
25

Tal vez una pregunta extraña y verde, peroJavascript VS C#

¿Hay algo C# no se puede hacer lo que JavaScript puede ... Y teniendo en cuenta jQuery?

excepto por el hecho de que uno está en el lado del cliente, y el otro lado del servidor? ¿O estoy haciendo una pregunta muy estúpida ahora?

EDIT: Para ser más específicos: me refiero a la programación web, y de hecho tal vez una pregunta más útil es:

> ¿Qué puedo hacer yo lado del cliente que no puedo hacerlo del lado del servidor, y ¿viceversa?

> ¿Hay más razones para utilizar ambos idiomas si mantiene "servidor/cliente" fuera del alcance?

> algunos desarrolladores evitan javascript. ¿por qué?

+3

Puede escribir (supongo) el lado del cliente C# a través de Silverlight (si hace que las personas instalen un complemento, eugh) y JS está muy contento de ejecutar el lado del servidor (http://en.wikipedia.org/wiki/Server- side_JavaScript). "¿Qué puedo hacer con el lado del cliente que no puedo hacer desde el lado del servidor, y viceversa?" es una pregunta completamente diferente a C# Vs. JavaScript. Probablemente deberías editar la pregunta para aclarar. – Quentin

+0

Ayudaría si proporcionó más contexto; ¿Cómo te ayudará saber la respuesta a la pregunta? ¿Qué proyecto estás contemplando? – Pointy

Respuesta

22

¿Qué puedo hacer con el lado del cliente que no puedo hacer del lado del servidor, y viceversa?

De lado del cliente: Javascript se ejecuta en la mayoría de los navegadores sin un complemento. C# requiere un complemento de navegador como Silverlight. Aunque se ejecuta en un equipo cliente, Javascript no puede leer y escribir archivos allí. C# en Silverlight puede leer y escribir archivos según la versión de Silverlight y lo que el cliente permita. Tanto Javascript como C#/Silverlight pueden hablar con servidores remotos.

Lado del servidor: como controlas esta máquina, puedes hacer lo que quieras: leer archivos, escribir archivos, hablar directamente con bases de datos, etc. Ten en cuenta que no hay nada que te impida ejecutar Javascript en el servidor. Consulte node.js.

¿Hay más razones para usar ambas lenguas si se mantiene "servidor/clientside" fuera de alcance?

No dejaría el entorno de ejecución fuera de su análisis. Si necesita absolutamente la interacción del lado del cliente y no puede garantizar que C# se ejecutará en el cliente, C# no es práctico. Del mismo modo, si su empresa ejecuta servidores Windows y no desea instalar los compiladores/tiempos de ejecución de Javascript, no podrá usar Javascript en el servidor.

algunos desarrolladores evitan javascript. ¿por qué?

Problemas con Javascript en un navegador son absolutamente horribles de depurar. Estás ejecutando una máquina que está fuera de tu control: el usuario puede estar ejecutando un navegador oscuro o antiguo, pueden estar usando un software antivirus que no funciona bien con tu Javascript, y los complementos de su navegador pueden ser bloqueados con tu Javascript. Es dificil.

Este es el costo de hacer negocios en la máquina de otra persona, sin embargo. Si fuera fácil, una experiencia hermosa del lado del cliente significaría menos. Resolver problemas difíciles no es para todos, pero se agradece cuando se hace bien.

1

Técnicamente, no.

Incluso podría usar el lado del servidor de Javascript si lo desea (o C# del lado del cliente a través de diferentes mecanismos).

Son solo dos formas de hacer el mismo trabajo.

+0

cuando las personas hablan de C#, en realidad significan C# + BCL, pero la biblioteca de javascript lista para usar es deficiente. – Andrey

+1

@Andry La funcionalidad de Javascript de fábrica puede ser un poco débil, pero es tan fácil extender y reutilizar su código que realmente no importa. De cualquier manera, todavía puede hacer el trabajo. –

+0

Creo que la solución más popular del lado del servidor es node.js. No es parte de la plataforma Azure. http://windowsazure.com/en-us/develop/nodejs –

1

la principal diferencia es que C# (si hablar de Web) se ejecuta en el servidor de y JS en cliente. No puede ejecutar C# en el cliente. Eso es. Ambos lenguajes están completos, así que no te preocupes :)

+1

"No se puede ejecutar C# en el cliente". Técnicamente puedes, pero tienes el complemento de Silverlight para eso. – Powerlord

+0

@R. Bemrosei: hablé sobre el navegador genérico. – Andrey

4

Ambos lenguajes se basan en gran medida en las API diseñadas para diferentes dominios.

JavaScript fue originalmente diseñado para ejecutarse dentro de un navegador, por lo que hace un uso intensivo de DOM API's así como de otras operaciones dentro del navegador como AJAX. Es probable que C# no tenga un buen soporte para tales API, ya que nunca fue intencionado para ser ejecutado directamente dentro de un navegador, aunque Silverlight puede proporcionar tales operaciones ya que es (en cierto modo) un "Sandbox C" dentro de un navegador.

Por otra parte, C# es un lenguaje de propósito general que fue diseñado para construir básicamente cualquier aplicación, desde los motores del lado del servidor de aplicaciones de cliente a los servicios - se entiende la idea ...

12

lo tomo su verdadera pregunta es, si C# puede hacer todo, ¿por qué debería usar javascript en absoluto? La respuesta aquí es el rendimiento, tanto percibido como real. El truco aquí es que para usar C# para hacer la manipulación DOM normalmente asociada con javascript, un navegador tiene que publicar una solicitud HTTP adicional al servidor y decirle al código C# qué hacer. Vamos a hablar de esas solicitudes adicionales. Distribuidos entre muchos usuarios, se suman rápidamente y causan estragos en la infraestructura de su servidor. El problema de rendimiento "real" es que ahora tiene que pasar mucho trabajo en su servidor, en lugar de hacerlo en los navegadores de sus usuarios. Los problemas de rendimiento "percibido" es que, incluso si tiene los recursos del servidor para manejar fácilmente todas las solicitudes HTTP adicionales, el usuario ahora tiene que pasar más tiempo esperando la latencia en que incurren esos viajes de ida y vuelta http.

+1

Agregaría a esto que al poner estrictamente el código de "vista" en su navegador, el código del lado del servidor queda más limpio y es más fácil de leer. –

2

He visto un proyecto C# donde javascript está incrustado y puede ejecutar javascript dentro de un código C#. Eche un vistazo aquí en CodeProject para ver cómo se logra eso.

+0

Creo que vale la pena comprobar Iron JS. Se ejecuta en .NET DLR por lo que es similar a Iron Python y Ruby. http://github.com/fholm/IronJS –