11 Apr 2023
大约在12年左右第一次接触Sublime编辑器和Chrome浏览器的时候,对这两款软件最深刻的印象就是其非常
现代化的标签栏样式。同样作为多Tab布局应用,不同于当时我用的比较多的IE或者NotePad++,这两款软件
的Tab栏都采用了圆角梯形加底部融合过渡曲线的设计,但因为当时我也不太关注UI,就忽略这块没有深究了。
但正巧最近在研究一个东西,得知了这种Tab风格在Chromium里的实现叫做GM2TabStyle,就翻了一下源码
看看究竟是怎么绘制的,同时解答心中多年的疑惑。
代码
真实的源码太长了,而且有很多细节处理,这里就大致简化了,有兴趣的可以参看下面的Chromium源...
08 Mar 2017
V8 简介
Google V8是一款高性能的开源JavaScript解释器,就像现实中的大排量V8发动机一样,V8强力的驱动着
Web技术的方方面面,从最初的Google Chrome浏览器,到Node.js,再到MongoDB,V8已成为许多项目的
重要组成部分。
就像所有的开源C/C++工程一样,构建是第一步,下面就记录一下V8的构建方法
环境
我是在Ubuntu 16.04下编译的,V8默认会自动下载clang,这里就不列出了编译器版本了
安装 depot_tools
V8所用的构建系统是GN,用于生成Ninja的构建文件,它的功能类似于CMake,用于跨平台多目标构建,GN...
05 Feb 2017
最近发现了一个vscode插件——vscode-chrome-debug,通过它可以直接在编辑器里调试代码,为浏览器、
Node.js、Python甚至C++提供了统一的调试方式,下面记录一下踩过的坑
添加配置
通过Add Configuration命令添加的默认配置如下
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
遇到的问题
开启服务器之后,...
25 Dec 2016
在JS中,我们经常需要指定函数的this值,通常我们会用call/apply这样的函数为this绑定值,
除此之外函数还可以通过bind方法绑定this,现在就来深入分析一下bind函数。
先看下面的例子
function test () {}
test.call(obj, 0, 1)
test.apply(obj, [0, 1])
var fn = test.bind(obj, 0, 1)
fn()
可见,不同于call/apply在调用时指定this,bind完成绑定后会返回一个函数,当调用此函数时
原函数才会执行,这种方式很适合为回调函数绑定上下文,因此在Web环境中被...
22 Dec 2016
ES6又新增了一种运算符——...,称为扩展/剩余操作符,实际上这个操作符有两种语义,分别用于数组或
对象的属性填充以及将函数实参转化成数组形式。
还是老规矩,根据Babel生成的代码来分析语义:
let arr = [1, 2, 3]
let dst = [0, ...arr, 4]
会生成以下代码
var arr = [1, 2, 3];
var dst = [0].concat(arr, [4]);
除了扩展数组,对象也可以使用扩展语法
let obj = {
b: 'bbb'
}
let dst = {
a: 'aaa',
...obj,
c: ...