2012-03-21 86 views
1

这个问题的第一部分实际上是基于我一直在整个下午进行的以JavaScript为中心的研究进行确认的请求。如果我对这些项目有任何不正确的地方,请纠正我!浏览器如何支持JavaScript

  • ECMA是官方标准机构“坚持”一个希望支持JavaScript(全部/大部分做的)JavaScript
  • 任何浏览器中,必须包含某种解释的(是什么呢?)引擎深入浏览器代码
  • 当某人将启用JavaScript的浏览器指向包含JavaScript代码的URI时,该浏览器将JS文件与HTML,CSS等一起下载,运行JS通过这个解释器,并且由此产生的输出影响页面最终呈现的方式

除了这些项目,我还听说过像JavaScript“插件”或浏览器可以具有的模块。什么是这些插件/模块,以及为什么浏览器需要它们,如果它们符合ECMA并且已经包含JS解释器?

在此先感谢!

+0

没有代码相关的问题,应该移动? – 2012-03-21 22:11:27

+0

http://www.mozilla.org/rhino/ – RTulley 2012-03-21 22:13:39

+0

@RTulley'rhino'是关于'javascript',但不是关于浏览器。 – kirilloid 2012-03-21 22:18:34

回答

2
  • 的ECMA是官方的标准机构,用于设置的ECMAScript标准的JavaScript其实现。 ActionScript也是如此。 ECMAScript涵盖了该语言的所有编程要点和基本结构。

  • ECMA规范不包括面向浏览器的API,如DOM。这由W3C DOM标准涵盖,旨在定义一种语言中立的API。自IE 6以来,IE一直相当支持ECMA规范,而在IE9之前几乎完全忽略了自己专有BS的DOM内容。

  • 该规范本身只是一组规则,规定语言应该如何工作。只要你写了相同的东西,并且给定的浏览器的解释器给出了规范定义的预期结果,ECMA就符合所考虑的任何版本。

  • 解释器解析并标记您写入的实际文本,并将其转换成指令,供浏览器的运行时环境读取。现代浏览器运行实际的JIT编译器,它在执行时将你的JS实际转换为字节码,以便浏览器运行时环境本身不必翻译。

  • 大多数浏览器缓存js文件的实际二进制文件。因此,链接到同一服务器位置的同一个域上的页面在新页面链接到该页面时不必下载相同的文件两次。这与任何资源(图像,css文件等)都是一样的。我不认为他们缓存任何解释的结果,但我认为在JIT的情况下,某些预执行的结果例行公事(JIT制作基本上)可能会被留在记忆中(我的观点纯粹是猜测 - 但它似乎有点儿不错)。

  • 我们对于插件,框架,工具,库等词语的使用方面一直有点快和松散......通常都只是JavaScript。你可以通过链接文件或者像其他任何JS一样剪切和粘贴到现有的文件中来“插入”它们。然而,通过插件,人们通常意味着它可以与一些现有的预制JS一起使用,比如JQuery,它往往通过向它返回的对象添加方法来扩展它(JQuery只是一个很大的花哨功能,可以构建和返回相同的对象,每次你基本上开火)。图书馆往往是一大堆预先定义的方法来完成各种事情。就像仓库的东西,你可以使用。我认为JQuery更像是一个工具而不是库,因为它的重点更多地放在减少粗俗和标准化浏览器差异上。 JQ本身并没有真正做到远离核心JS方法的任何事情。这使它们变得更容易/更快速。它有一个UI库,它基本上是一大组插件,它们实际上吐出了预制UI用户界面元素,HTML,CSS等等。框架往往更像是一个在前端构建大规模应用程序类型结构的系统。这不仅仅是一堆方法可以调用,它是一种构建方法,旨在简化谷仓 - 提升整个应用程序结构,同时跳过大量为保持灵活性而需要做的更细粒度的工作(作为结果框架通常不是特别灵活,但并不意味着它们不可以)。

+0

令人惊叹的答案 - 正是我期待的 - 谢谢@Erik! – IAmYourFaja 2012-03-22 15:26:22

4
  • ECMA是执行JS的“标准”的标准组织。他们保持语言的一致性和记录(虽然知道它的历史,但他们并没有做好这项工作作为一个“标准组织”)

  • JavaScript引擎是嵌入到浏览器中的一个软件来解析JavaScript源代码码。这就是将你的JavaScript变成屏幕(和屏幕外)的动作。例如V8(Chrome),TraceMonkey(Firefox),Chakra(IE),Carakan(Opera)和Nitro/SquirrelFish(Safari)

  • 在上述情况发生之前,必须将JavaScript代码引入浏览器(通常使用<script>标签)

  • JavaScript插件/工具包只是程序员开发的代码,用于轻松地完成任务。他们只是做你通常会编码1000行的东西。这些代码还通过提供跨浏览器的一致性来“改善”编程。插件/工具包的例子是jQuery(它是UI插件jQueryUI),YUI,Dojo等等。

  • 另一方面,浏览器扩展/插件“扩展”了浏览器的功能。例子是ADBlock(whick块页面广告),FlashGet(下载Flash页面上的文件)。这些人被编入浏览器而不是进入页面。然而,最近,这些扩展是由JavaScript的原因,供电,它很容易编程

+0

谢谢约瑟夫!很好的答案!在插件的东西 - 你能提供一个特定的JS插件的例子,并解释它做什么,为什么它是必要的(而不是只写一个JS文件)?谢谢! – IAmYourFaja 2012-03-21 22:14:25

+0

在Firefox和Chrome中,所有插件都是用Javascript编写的(Firefox插件也有这种特殊的类似HTML的东西,称为XUL,但这不重要)。插件中的Javascript访问量比页面上的Javascript多得多。例如,没有Javascript可以写入网页,它会自动将其自身添加为书签,因为浏览器制造商决不会允许它(如果一个坏的网站在访问它时添加了100个书签,那该怎么办?)。但是,如果需要,浏览器插件可以为您访问的每一页添加书签。 – machineghost 2012-03-21 22:18:31

+0

@machineghost你的意思是浏览器扩展我对吗?好吧,我忘了那个。我虽然OP意味着增强页面效果的插件,比如jQuery插件。浏览器扩展程序是“插入”或“扩展”浏览器功能的软件。今天的大多数扩展都是使用JavaScript本身进行编程的(因为JS是一个众所周知的程序,易于理解,与C++等相比)易于使用 – Joseph 2012-03-21 22:26:46