===
浏览器世界由四大主要参与者主导:
以下内容分为两个部分:
当然,你可以使用自己最喜欢的配置来浏览源码。 不过,这些代码库相对较大,我尝试了好几种不同的配置,才找到适合我的方案。 如果你还没有合适的配置,下面是我的一些经验,或许对你有帮助:
文章:
Blink 的 JavaScript 引擎是 V8。
构建(Ubuntu 18.04):
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
$ export PATH=$PATH:./depot_tools
$ gclient
$ mkdir ./v8 && cd ./v8
$ fetch v8 && cd v8
$ git pull
$ gclient sync
$ ./build/install-build-deps.sh
$ tools/dev/gm.py x64.release
$ out/x64.release/d8
有用的标志:
--print-opt-code:优化编译器生成的代码--print-byte-code:解释器生成的字节码--trace-ic:调用点遇到的不同对象类型--trace-opt 和 --trace-deopt:哪些函数被(去)优化--trace-turbo:供 Turbolizer 可视化使用的 TurboFan 跟踪信息文章:
V8 为 TurboFan 提供了一个名为 Turbolizer 的可视化工具。
文章:
--trace-turbo 运行 v8:d8 --trace-turbo foo.jsturbo-foo-0.jsonv8/tools/turbolizer,按照 README.md 中的说明使用 npm 安装python -m SimpleHTTPServer 8000localhost:8000 并打开 turbo-foo-0.jsonGecko 的 JavaScript 引擎是 SpiderMonkey。
构建(Ubuntu 18.04):
$ wget -O bootstrap.py https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py && python bootstrap.py
$ git clone https://github.com/mozilla/gecko-dev.git && cd gecko-dev
$ cd js/src
$ autoconf2.13
# This name should end with "_DBG.OBJ" to make the version control system ignore it.
$ mkdir build_DBG.OBJ
$ cd build_DBG.OBJ
$ ../configure --enable-debug --disable-optimize
# Use "mozmake" on Windows
$ make -j 6
$ js/src/js
SpiderMonkey 为 IonMonkey 提供了一个名为 IonGraph 的可视化工具。
WebKit 的 JavaScript 引擎是 JavaScriptCore(JSC)。
文章:
# sudo apt install libicu-dev python ruby bison flex cmake build-essential ninja-build git gperf
$ git clone git://git.webkit.org/WebKit.git && cd WebKit
$ Tools/gtk/install-dependencies
$ Tools/Scripts/build-webkit --jsc-only --debug
$ cd WebKitBuild/Release
$ LD_LIBRARY_PATH=./lib bin/jsc
WebKit 拥有一个 4 层 JIT 编译器体系,体现了开销性能成本与性能收益之间的权衡。
文章:
由于 Edge 已改用 Blink 和 Chromium 项目作为其渲染引擎,Edge 现在使用 v8。 最初,Edge 拥有自己的渲染引擎 EdgeHTML,它使用 ChakraCore 作为 JavaScript 引擎。
# To build ChakraCore on Linux: (requires Clang 3.7+ and Python 2)
$ apt-get install -y git build-essential cmake clang libicu-dev libunwind8-dev
$ git clone https://github.com/Microsoft/ChakraCore && cd ChakraCore
$ ./build.sh --cc=/usr/bin/clang-3.9 --cxx=/usr/bin/clang++-3.9 --arch=amd64 --debug
$ out/Debug/ch