为什么这么多网络语言被解释而不是编译?

时间:2008-12-04 11:42:34

标签: interpreted-language

为什么C等语言最终没有用于Web开发?当然,编译后的速度增加对重载站点有用吗?

15 个答案:

答案 0 :(得分:25)

另一个很好的理由是,在大型服务器上,执行速度并不像连接速度那么大。大部分时间用于发送和接收数据,而不是数字运算。实际上,在大量计算的某些Web服务中,硬性运算 可能作为已编译的程序运行。

Plus解释型语言不需要编译(在大型项目中需要花费时间),因此它更适合于通常敏捷的Web解决方案开发。

答案 1 :(得分:23)

大多数Web应用程序与数据库通信。绝大多数这些应用程序几乎将所有时间花在与数据库进行通信上。因此,对于对应用程序的任何给定请求,应用程序服务器中存在少量处理,然后在等待数据库时长时间停顿。由于任何请求的时间中只有很小一部分用于实际的应用程序服务器代码,因此通过在C / C ++中编写代码来优化代码只会在响应时间内获得很小的,可能不会明显的改进。

因此,与其关注C / C ++并节省每个CPU周期,不如担心开发人员的工作效率。开发人员非常昂贵。并且,它们在脚本语言中甚至在Java中的效率通常比在C / C ++中高得多。

当然,也有例外。如果对您的应用程序的某些请求是CPU或内存密集型的,那么它们应该用C / C ++编写。但是,对于您的其他应用程序,您最好专注于优化算法,数据结构,与数据库的通信以及开发人员的工作效率,而不是优化您的语言。

答案 2 :(得分:13)

与C相比,脚本语言具有以下优势:

  1. 快得多的发展
  2. 今天,所有与此问题相关的内容都是在运行时编译的。在某些情况下,这可以使它们比同等的C程序更快,因此性能不再是问题。
  3. 维护成本低得多
  4. 您可以使用敏捷方法(如单元测试)进行开发,从而产生更好的代码。是的,你也可以在C中做到这一点,但这需要更多努力。
  5. 当您进行Web开发时,您拥有庞大的框架,可以为您完成大部分工作。
  6. 他们更愿意改变。新功能可能需要几分钟才能实现。
  7. 如果出现问题,您可以登录服务器,在控制台中启动文本编辑器并修复问题,有时无需重新启动。

答案 3 :(得分:11)

C早期用于Web应用程序 - 我在其中编写了各种CGI脚本。

然而,随着时间的推移,更高效的语言(例如C#和Java - 当然不仅仅是那些)已被证明对Web应用程序来说“足够高效”。请注意,C#和Java都编译为中间代码,然后进行JIT编译,实现“粗略”的本机代码性能。我们为什么要使用C代替?

就我所知,即使传统的“真正解释”的语言(如PHP)也经常在执行时编译。 (我对PHP的了解尤其是二手。也许它总是被编译出来......同样我也确信有网络平台仍然会被解释。)

答案 4 :(得分:9)

至少在最初,后端代码所做的很多工作(我假设你正在谈论的内容)都是面向文本的。它们要么直接从头开始构建页面,要么通过例如将数据库中的数据与模板相结合。

C不是......总是非常适合文本处理。 C字符串是非常基本的,虽然C语言中的文本处理当然可以快速执行,但开发通常需要更长的时间,并且需要更深入的技能来实现,而不是帮助您多做一些的语言。

答案 5 :(得分:9)

好问题。原因主要是由于网络的发展。仔细考虑一下:

1)'net'上的基本文字 - > 2)在文本中添加了一些“标记” - > 3)形成“中心”标签和“选框”!什么进步!!! - > 4)在客户端编写脚本! 5) - >嗯...在服务器上编写脚本!!!

虽然我形成这个答案有点傻,但这是真的。互联网,尤其是“网络”,是一个惊人的进化过程。实际上,对于功能更强大的语言(以及更多高性能语言)来说,要求只是最近的事情。

另外,看看这些工具。我在记事本(和其他一些简单的应用程序)中完成了我的PHP。当我第一次进行Web开发时,我的计算机没有足够的硬盘空间来支持Visual Studio 2008:)

侧点然而:那里有“.exe”应用程序(我认为“SunBiz”发布到'exe'),有些编译了cgi应用程序一段时间,但它们要少得多。

答案 6 :(得分:8)

值得指出的是,大多数脚本语言(Python,Ruby等)很容易 - 几乎是琐碎的 - 与C语言桥接。(我只是为Python程序编写了一些C扩展,我对它的易用性印象深刻如果网站/网络应用程序由于使用“慢”脚本语言而确实存在一些瓶颈,那么通常可以用更快的语言编写性能关键部分,例如C.事实上,这就像谷歌这样的大型应用程序搜索,Facebook等等 - 他们用脚本语言编写界面,并使用其他语言如C进行繁重的工作。

答案 7 :(得分:7)

这主要是因为它可以快速而简单地即时更改它们。编译语言需要必须与服务器匹配的开发环境。使用脚本,您可以使用ftp工具直接编辑文本然后保存。这种从任何操作系统或类型​​的计算机执行此操作的能力可以多次挽救我的生命(或正确地保护我的网站生活)。

答案 8 :(得分:7)

尝试在Perl / PHP中用C进行一些字符串解析/操作,你就会知道。

顺便说一句: 为什么这么多人说性能不再是问题?对于小型主页/博客,我可能不是一个问题,但是无论是用java,php还是ruby编写,大型Web应用程序仍然需要针对性能(cpu / network / memory)进行调整。

答案 9 :(得分:1)

以下是我对此问题的看法:

  • 原始CGI应用程序需要自己的操作系统进程,这当然是资源耗费。尝试将所有内容捆绑到一个进程中对于本机代码来说也不容易,因为如果应用程序出现问题可能很容易导致整个服务器崩溃。使用Interpreter或虚拟机可以更轻松地处理这些事情。您当然可以使用本机代码执行相同操作,但我认为实现框架会更加困难。最后,您将最终实现类似于解释器或VM的功能。
  • 解释语言可跨操作系统移植。
  • 当然,最大的好处是通过使用现代语言获得的有效提升。
  • 表现当然很重要。然而,解释或VM语言在这方面越来越好(使用JIT编译等技术)并且正在接近本机代码的性能。另外,仅比较执行过程中花费的时间是不公平的。您需要测量整个序列:从服务器接收请求,委托到正确的应用程序,执行,返回结果到服务器。原生应用程序在所有这些方面都会更快吗?

答案 10 :(得分:1)

  

所以,而不是专注于C / C ++和   它可以节省每个CPU周期   更有意义地担心开发人员   生产率。开发人员非常   昂贵。而且,它们通常很多   脚本编写效率更高   语言甚至是Java,而不是它们   在C / C ++中。

哦,非常非常真实。如果使用更具动态性的语言会影响开发人员周的时间表,那么您不需要付费的那个星期的程序员时间将为您购买额外的服务器。甚至可能是多台服务器,如果你喜欢很多廉价的服务器而不是一些大型野兽。

对于世界上大多数国家(即Google / Amazon / eBay /等),一台额外的服务器将弥补语言选择可能导致的原始性能损失。

答案 11 :(得分:1)

动态语言的很多非常有用的功能,比如内省和eval()这样的函数真的很难/不可能吗?用编译成本机代码的语言实现。

话虽这么说,大多数“脚本”语言确实编译(在运行中)某种中间代码,然后解释(Python,Ruby,Perl)或甚至JIT编译为本机代码(JSP,.NET)

答案 12 :(得分:0)

我的公司为我们的webapp使用C ++(ISAPI扩展)。几乎所有内容都在已编译的二进制文件中完成。我们还为需要编写脚本的系统部分使用JavaScript引擎(是的,服务器端JavaScript)。这个设计引用的原因是速度,但年龄也是一个因素...这是一个旧的代码库。此外,我们将我们的产品分发给我们的一些客户来托管自己,因此编译它可以保护我们的源代码(许多解释语言都可以轻易地解压缩,或者在PHP和Perl的情况下,根本就没有编译)。

答案 13 :(得分:0)

因为行业遭受了大规模妄想,执行速度无关紧要(如接受的答案所示)。

我认为实际的原因是,如果使用现有框架,解释性语言更容易上手,并且使得在Web应用程序上工作变得简单而有趣。

在很多情况下,您实际上需要在Web应用程序中进行数字运算,但开发人员最终要么不执行它们(因为它们很昂贵)和/或将任务委托给外部服务器:数据库服务器或其他服务器。

这可以在最近所谓的“微服务”和#34;架构。

答案 14 :(得分:-9)

脚本语言是很久以前Web开发的唯一选择。现在我们有其他替代方案(Java,.NET ..)所以情况并不是那么糟糕。

C作为一个平台在Web开发方面不是很成功,因为很难构建一个可以从Web /应用程序服务器加载和执行的模块,但是构建动态Web应用程序的第一个框架之一是用于Microsoft IIS的ISAPI模块,主要用于用C ++开发并编译。

相关问题