- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我今天在思考这个问题,然后我意识到我对此没有清晰的了解。
以下是我认为正确的一些说法(如果我错了,请纠正我):
我很好奇当我调用 document.getElementById('foo')
时幕后会发生什么。调用是否由解释器委托(delegate)给浏览器 native 代码,或者浏览器是否具有所有主机对象的 JS 实现?您知道他们在这方面做了什么优化吗?
我读到this overview of browser internals但它没有提及任何有关此事的内容。有时间我会看一下Chrome和FF的源码,但我想先在这里问一下。 :)
最佳答案
您的所有要点都是正确的,除了:
modern JS interpreters use JIT to improve the code performance and translate it to bytecode
应该是“...并将其翻译为 native 代码”。 SpiderMonkey(Firefox 中的 JS 引擎)在当前 JS 速度军备竞赛之前很长一段时间都作为字节码解释器工作。
在 Mozilla 的 JS-to-DOM 桥上:
主机对象通常用 C++ 实现,尽管正在进行 implement DOM in JS 的实验。 。所以当网页调用document.getElementById('foo')
时,如 hsivonen 指出的那样,通过 ID 检索元素的实际工作是在 C++ 方法中完成的。
调用底层 C++ 实现的具体方式取决于 API,并且也会随着时间的推移而改变(请注意,我没有参与开发,所以可能在一些细节上有错误,这里是 a blog post by jst ,谁实际参与了创建大部分代码):
getElementById
时,执行必要的参数检查/转换并将调用直接路由到 C++ 方法 ( nsDocument::GetElementById(const nsAString& aId, nsIDOMElement** aReturn)
)我对最后三点的细节特别模糊,所以请持保留态度。
最新的改进被列为 bug 622298 的依赖项,但我并没有密切关注他们。
关于javascript - JavaScript 宿主对象是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7850378/
我正在开发框架,我已将此框架项目添加到宿主项目中。现在我想将 cocoapods pod(框架)添加到父(主机)项目中。并将同一个 pod 共享到子(框架)项目中。或者有什么我可以添加到 Podfil
我正在尝试使用 vagrant , Clojure和 emacs一起。具体来说,我无法连接cider到我的 vagrant机器。 它在本地工作,当我运行时 cider-jack-in在我的项目里面。
我是一名优秀的程序员,十分优秀!