JavaScript与C#的比较

28

也许这是一个奇怪而琐碎的问题,但是

C#有没有做不到的事情,而 JavaScript 可以... 并且考虑 jQuery?

除了一个是客户端,另一个是服务器端之外? 或者我现在问了一个很愚蠢的问题吗?

编辑: 更具体地说:我的意思是 web 编程,确实一个更有用的问题是:

> 我可以在客户端做什么,而在服务器端做不了,反之亦然?

> 如果将“服务器/客户端”范围排除在外,还有其他使用两种语言的原因吗?

> 一些开发人员避免使用 JavaScript。为什么?


4
你可以使用Silverlight编写客户端C#代码(如果让人们安装插件,会有些棘手),而JS则可以在服务器端运行(http://en.wikipedia.org/wiki/Server-side_JavaScript)。“我可以在客户端做什么,而在服务器端做不了,反之亦然?”这是一个完全不同的问题,与C#和JavaScript之间的比较无关。您可能需要编辑问题以澄清。 - Quentin
如果您提供更多的上下文信息会更有帮助;知道问题的答案将如何帮助您?您正在考虑哪个项目? - Pointy
5个回答

25

客户端能做哪些事情是服务器不能做的?反之亦然?

客户端:Javascript 在大多数浏览器中可以不使用插件而运行。C# 需要像 Silverlight 一样的浏览器插件。尽管它在客户端机器上运行,但 Javascript 不能读写那里的文件。依赖于 Silverlight 版本和客户端允许什么,Silverlight 中的 C# 可能能够读写文件。Javascript 和 C#/Silverlight 均可与远程服务器交互。

服务器端:由于您控制此计算机,因此可以做任何您想做的事情-读取文件、写入文件、直接与数据库通信等等。请记住,没有任何阻止您在服务器端运行Javascript。请查看 node.js

如果将“服务器/客户端”范围之外保留,是否有更多使用两种语言的理由?

我不会忽略执行环境对您分析的影响。如果您绝对需要客户端交互并且无法保证 C# 将在客户端执行,则 C# 不实用。同样,如果您的公司运行 Windows 服务器并且不想安装 Javascript 运行时/编译器,则无法在服务器上使用 Javascript。

为什么有些开发人员避免使用Javascript?

浏览器中的Javascript问题非常难以调试。您正在运行一个不受您控制的计算机-用户可能正在运行一个模糊或过时的浏览器,他们可能正在使用破坏您Javascript的杀毒软件,他们的浏览器插件可能会破坏您Javascript。这很难。

然而,这是在别人的机器上做生意的代价。如果容易,美丽的客户端体验将意味着更少。解决困难的问题并不适合每个人,但当它被很好地完成时,它肯定是受到赞赏的。


13

我理解你的真正问题是,既然C#可以做到所有的事情,那么为什么还需要使用JavaScript呢?答案就在于性能,包括用户体验和实际性能。关键在于,如果要使用C#来完成通常由JavaScript完成的DOM操作,浏览器必须向服务器发送额外的HTTP请求,告诉C#代码该如何操作。让我们谈谈这些额外的请求。在大量用户分布的情况下,它们会快速累积并对服务器基础设施造成严重影响。 "真正"的性能问题在于现在需要在你的服务器上进行大量工作,而不是在用户的浏览器中。 "用户体验"的性能问题在于,即使你有足够的服务器资源轻松处理所有额外的HTTP请求,用户现在也必须花费额外的时间等待由这些HTTP往返引起的延迟。


1
我想补充一点,将严格的“视图”代码放在浏览器中可以使您的服务器端代码更加清晰易读。 - Mark Porter

6
两种语言都严重依赖于为不同领域设计的API。
JavaScript最初旨在在浏览器内运行,因此它大量使用DOM API以及其他在浏览器内的操作,例如AJAX。C#可能没有很好的支持这些API,因为它从未旨在直接在浏览器内执行 - 尽管Silverlight可能会提供此类操作,因为它是浏览器内的“C#沙盒”。
另一方面,C#是一种通用语言,旨在构建基本上任何应用程序,从服务器端引擎到客户端应用程序和服务 - 你懂的...

2

我曾经看过一个C#项目,其中嵌入了JavaScript,并可以在C#代码中执行JavaScript。在CodeProject上查看如何实现此功能。


我认为值得检查 Iron JS。它在 .NET DLR 上运行,因此类似于 Iron Python 和 Ruby。http://github.com/fholm/IronJS - Jeno Laszlo

1
从技术角度来看,不算是。

如果您愿意,甚至可以使用JavaScript作为服务器端(或通过不同的机制使用客户端C#)。

它们实际上只是完成相同工作的两种方式。


当人们谈论C#时,他们通常指的是C# + BCL,但JavaScript的开箱即用库很差。 - Andrey
1
@Andry JavaScript的开箱即用功能可能有点弱,但它非常容易扩展和重用代码,所以这并不重要。无论如何,您仍然可以完成工作。 - Justin Niessner
我认为目前最受欢迎的服务器端解决方案是node.js。它不是Azure平台的一部分。http://windowsazure.com/en-us/develop/nodejs - Jeno Laszlo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接