43

为什么 HTML/JavaScript/CSS 没有成为编译语言(甚至可能合并为单一编译语言)?如果浏览器正在运行“浏览器虚拟机”并且 html/javascript/css 源代码可以编译为“浏览器字节码”会怎样。它不会对开发人员和用户有很大帮助吗?

我可以看到一些挑战:

  1. 如何处理数以千计的现有页面?将此编译设为可选,因此如果您愿意,可以使用普通的旧 html。如果您想为浏览器提供已编译的页面,只需使用 .chtml 即可。

  2. 搜索提供商如何索引页面?制作一个反编译器,将字节码反编译成精确的原始源(例如可以反编译闪存)。或者搜索提供商可以使用相同的虚拟机并从那里获取他们需要的数据。

  3. 如何使其兼容所有浏览器?让一个集中式开发人员(比如说 w3c)来开发这个虚拟机,然后每个浏览器都会嵌入它。

但是好处呢:

  1. 速度。
  2. 尺寸。
  3. 不再有“松散”和“半正确”的 html。它要么正确,要么无法编译。
  4. 在每个(支持的)浏览器中看起来都一样。

如果不是字节码,那么至少进行一些本机压缩,html 可能不是最有效的数据存储方式。我知道有 gzip,但是如果我们可以压缩一次并将其提供给浏览器,为什么每次都在服务器上压缩页面并在浏览器中解压缩?

那么是什么阻止了我们走这条路(好吧,除了要付出巨大的努力来实现这一切)?

4

9 回答 9

19

啊,但是 Javascript 正在成为一种编译语言。查看带有TraceMonkey的 Firefox 3.5 。与你知道的浏览器相比,它的速度非常快。确实,JS 永远不会是 C,但它是一种比 C 更具动态性的语言,并且在许多方面使它更具表现力和强大。

就 HTML 而言,我不认为 HTML 缺乏有效性会极大地损害速度。我认为将视觉表示组合在一起并操纵 DOM 的引擎需要变得更好(嗯,IE,我正在寻找您的总体方向......)。CSS 合规性需要变得更好,CSS 本身也需要变得更强大。(与 CSS 3 人一起上车!)

但我确实认为 Firefox 和 Chrome 的速度会变得更好,以至于人们真的会开始将它用于主流应用程序开发。这很有趣。Adobe 似乎在出售 Flash 作为他们的动态网页内容平台,MSFT 正在出售 Silverlight 用于动态网页内容,而谷歌只是想真正改进 HTML 和 Javascript 以显示动态网页内容。到目前为止,谷歌在这方面做得很好,我必须说......

于 2009-07-17T03:04:39.220 回答
4

你的想法在应用到 JavaScript 时是有效的。正如其他人所指出的那样,即使是现在,也有几家供应商在某种程度上试图将这些原则应用于 JS。该领域的另一大进步可能是谷歌宣布的 Chrome OS。但是,当涉及到 (X)HTML 和 CSS 时,我认为您的想法可能没有抓住重点。

万维网不是一个有缺陷且不一致的应用程序平台,而是一个庞大且前所未有的互连文档集合。Web 的强大之处在于从通常僵硬(且易碎)的视觉布局和主要通过 JavaScript 提供的日益复杂的页内功能中抽象出数据。将这些页面编码为 (X)HTML 非常适合让尽可能广泛的受众访问它们,无论是在浏览器方面还是在创作页面所需的技术知识方面。

越来越多的 Web 被用作应用程序平台——这是对这项技术的强大而令人兴奋的用途——但我们不能忽视这样一个事实,即这些 Ajax 驱动的“web 2.0”应用程序只是具有扩展功能的文档。编译对文档没有意义,并且压缩已经发生(通过 gzip 等)。

在更实际的情况下,W3C 以冰川的速度发展,浏览器供应商轮流支持未完成规范中的实验性功能,并花时间支持其他多年来普遍使用的规范. 整个过程就像放牧猫一样。我不会屏住呼吸让他们做出你提议的那种激进的改变。

于 2009-07-17T04:29:15.583 回答
3

由于 HTML 和 CSS 不是代码,因此无法编译。Google Chrome 的 V8 引擎确实将 JS 转换为字节码,期待其他渲染引擎效仿!

http://code.google.com/apis/v8/design.html

我们最近重新设计了一个我帮助创建的 php 模板系统,以使用 minify 将多个 JS 和 CSS 压缩到一个文件中,看到我们的文件大小下降到原始组合大小的 20% 左右。Minify 还可以进行 gzip 和缓存,因此对于加速网站来说真的很棒。

http://code.google.com/p/minify/

简而言之,您无法编译 HTML 和 CSS 的非代码。JS 可以编译并且开始编译,但这一切都取决于浏览器的感受。

浏览器只需要在支持 Web 标准方面做好准备。这样做的浏览器越多,我们 Web 开发人员的头痛就越少。我对 YouTube 公开放弃对 IE6 的支持感到非常满意。我们需要更多这样的行动来让网络向前发展。

于 2009-07-17T03:05:30.937 回答
2

V8 javascript 引擎(也嵌入在Google Chrome 中,但它是开源的并且获得了自由许可,因此欢迎您在您编写的下一个浏览器中使用它!)确实将 Javascript 编译为本机机器代码——当然,它确实做到了“及时”(就像大多数现代编译器——Java、C# 等!),而不是“提前”(就像 Fortran 在 1954 年所做的那样,当时计算机太弱而无法在执行过程中处理编译)。如果其他优秀的 JS 引擎,比如最新的 Firefox 和 Safari 中的那些,没有做同样的事情,我会感到惊讶。

看起来你不是在提倡“javascript 作为一种编译语言”(因为它显然已经被编译了,如果你使用的是一个好的 JS 引擎),而是为它“提前”编译(就在最现代的时候)语言基本上放弃了提前编译)。将机器代码而不是可编译代码向下推送听起来像是一个非常可怕的想法——更大的尺寸、支持一个 CPU 与另一个 CPU 的困难、正确沙盒化它的安全噩梦等等)在补偿方面并没有太多好处。

也就是说,如果您真的热衷于将机器代码推送到客户端,请尝试使用 nativeclient(只要客户端是 x86 机器 - 忘记地球上的所有智能手机、许多上网本、好旧的 mac 等)-至少它承诺解决安全噩梦。如果并且当您对 nativeclient 感到满意时,将即时编译器转换为提前编译器是一个更容易的技术挑战(当然,如果您想继续使用 Javascript 而不是其他语言作为源代码) )。

于 2009-07-17T03:12:41.533 回答
1

速度。

您假设解析 HTML 需要大量时间。然而,与其他事情所需的时间(例如在最终用户窗口上布局文本所需的时间)相比,该时间可能是微不足道的。

不再有“松散”和“半正确”的 html。它要么正确,要么无法编译。

使用 [X]HTML,您已经明白了。

在每个(支持的)浏览器中看起来都一样。

您似乎在说应该只有一个浏览器,或者所有浏览器都会平等地支持它。

互联网标准不会通过让一个单一的机构(w3c)实现某些东西并将其宣布为标准来实现。相反,互联网标准是通过多个独立机构创建多个实现来实现的。一个后果是:

  • 有些人开发的东西还不是标准的(即他们领先于标准)
  • 有些人还没有开发出标准的东西(即他们落后于标准)
于 2009-07-17T03:11:26.853 回答
1

有关此问题的先前讨论,请参见此处

并非所有给出的理由都一定是有效的,但一个重要的原因是,除非您是 Google,否则服务器端 CPU 周期比客户端周期更有价值:因此让客户端编译/优化什么更容易通常是动态生成的 HTML/JavaScript,而不是服务器。

于 2009-07-17T03:01:26.183 回答
0

Google V8是众多新一代 javascript 引擎之一,将 javascript '编译'为伪代码,就像 .NET 即时'编译' c#。这里没有什么神奇的。期待更多,尤其是。随着 webapps 变得越来越重和要求越来越高

于 2009-07-17T03:10:54.810 回答
0

HTML

HTML 几乎就是 XML。DTD 存在于各种版本中,开发人员可以随时检查。

CSS

CSS 不是一种编程语言,但是我同意“编译”的 CSS 可以工作,因为编译会压缩它。然而,凭借 CSS 的支持以及任何 CSS 所需的基本 hack 的数量,您永远无法成功编译它而不会出错。

JS

正如其他人所提到的,JS 正在成为一种编译语言,除了浏览器会为你而不是你自己编译它。

于 2009-07-17T03:18:20.557 回答
0

我认为您的想法是合理的,但是仍然没有办法执行标准。因此,如果存在不受支持的功能,则整个页面很可能根本不会显示任何内容。在当前设置中,仍然可以传递关键信息。

于 2009-07-17T03:03:44.433 回答