摘要: 性能彪悍的V8引擎. <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函数是一等公民是什么意思呢? JavaScript深入浅出第3课:什么是垃圾回收算法? JavaScript深入浅出第4课:V8是如何工作的? 最近,JavaScript生态系统又多了2个非常硬核的项目. 大神Fabrice Bellard发布了一个新的JS引擎QuickJS,可以将JavaScript源码转换为C语言…
摘要: 听起来很炫酷的一等公民是啥? <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函数是一等公民是什么意思呢? 看到一篇讲JavaScript历史的文章里面提到:JavaScript借鉴Scheme语言,将函数提升到"一等公民"(first class citizen)的地位. 一等公民这个名字听起来很高大上,但是也相当晦涩,这个与翻译也没什么关系,因为first cla…
摘要: Chrome改变世界. <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函数是一等公民是什么意思呢? JavaScript深入浅出第3课:什么是垃圾回收算法? JavaScript深入浅出第4课:V8引擎是如何工作的? JavaScript深入浅出第5课:Chrome是如何成功的? 前言 在上一篇博客中,我聊了一下JavaScript引擎V8的工作原理,顺其自然,接下来应该来聊聊渲染引擎…
摘要: JS是如何回收内存的? <JavaScript深入浅出>系列: JavaScript深入浅出第1课:箭头函数中的this究竟是什么鬼? JavaScript深入浅出第2课:函数是一等公民是什么意思呢? JavaScript深入浅出第3课:什么是垃圾回收算法? 最近垃圾回收这个话题非常火,大家不能随随便便的扔垃圾了,还得先分类,这样方便对垃圾进行回收再利用. 其实,对于写代码来说,也有垃圾回收(garbage collection)这个问题,这里所说的垃圾,指的是程序中不再需要的内存空间…
<JavaScript 深入浅出>系列: JavaScript 深入浅出第 1 课:箭头函数中的 this 究竟是什么鬼? JavaScript 深入浅出第 2 课:函数是一等公民是什么意思呢? 普通函数与箭头函数 普通函数指的是用function定义的函数: var hello = function () { console.log("Hello, Fundebug!"); } 箭头函数指的是用=>定义的函数: var hello = () => { cons…
V8 引擎是如何工作的? 本文翻译自:How the V8 engine works? ​ V8是谷歌德国开发中心构建的一个JavaScript引擎.它是由C++编写的开源项目,同时被客户端(谷歌浏览器)和服务器端(Node.js)应用使用. ​ V8最初是为了提高web浏览器中的JavaScript运行性能设计的.为了提升性能,V8将JavaScript代码翻译为更高效的机器语言,而不是使用解释程序.它通过实现一个JIT(Just-In-Time,即时)编译器来将JavaScript代码编译为…
概述 一个 JavaScript 引擎就是一个程序或者一个解释程序,它运行 JavaScript 代码.一个 JavaScript 引擎可以用标准解释程序或者即时编译器来实现,即时编译器即以某种形式把 JavaScript 解释为字节码. V8 引擎的由来 V8 引擎是由谷歌开源并以 C++ 语言编写.Google Chrome 内置了这个引擎.而 V8 引擎不同于其它引擎的地方在于,它也被应用于时下流行的 Node.js 运行时中. 起先 V8 是被设计用来优化网页浏览器中的 JavaScri…
概述 JavaScript引擎是一个执行JavaScript代码的程序或解释器.JavaScript引擎可以被实现为标准解释器,或者实现为以某种形式将JavaScript编译为字节码的即时编译器. 下面是实现了JavaScript引擎的一个热门项目列表: V8— 开源,由Google开发,用C++编写的 Rhino — 由Mozilla基金所管理,开源,完全用Java开发 SpiderMonkey—第一个JavaScript引擎,最早用在Netscape Navigator上,现在用在Firef…
在上一篇文章中我们讲了如何使用 GN 编译 V8 源码,文章最后编译完成的可执行文件并不是 V8,而是 D8.这篇我们讲一下如何使用 D8 调试 javascript 代码. 如果没有 d8,可以使用 node 代替. 新建文件 add-of-ints.js,输入以下内容: function add(obj) { return obj.prop + obj.prop; } const length = 1000 * 1000; const o = { prop: 1 }; for (let i…
个人总结: 一个Javascript引擎由一个标准解释程序,或者即时编译器来实现. 解释器(Interpreter): 解释一行,执行一行. 编译器(Compiler): 全部编译成机器码,统一执行.(减少了切换和调度的开销,更快.) V8引擎是一种即时编译器. V8引擎的优化策略: 1.内联:将函数被调用的内行代码置换为被调用的函数体. 2.隐藏类:大多数动态语言使用类字典的结构(基于哈希函数)在内存中存储对象属性值的内存地址(即对象的内存地址),所以比非动态语言(Java,C#)要慢,  …