这一篇不打算讲技术,聊点别的吧,写这个的原因主要是看到了我博客园的签名,开始这个最终源码系列前想说点什么。

转行前端(达成)

入行1年vue源码(达成)、webpack源码(半达成)

入行2年争取读通node源码 (学习中)

入行3年进大厂(提前达成)或者入门V8引擎

目前转前端第二年,抓紧时间啦

  我是一个转行的前端,之前做的游戏运营。

  上面的每一句话都是一个非常艰辛的过程,作为一个211硕士,毕业之后一事无成,荒废了大概1年时间才决定转行做技术,为了弥补浪费的1年,付出了太多。

  对源码的兴趣在学前端的时候就有了,当时看的jQuery3.1,仅仅会点语法就去研究,想想实在是有点天真,差点被Sizzle引擎劝退。

  找到了第一份工作时还是比较开心的,虽然薪资非常低,但是事也不多,能建立信心和有时间研究自己的东西,好的开头是成功的一半嘛。当时就花了整整半年的时间跑vue源码,我看源码的方法比较特殊,及其不建议。第一遍就是抄,一行行跟着写,然后对工具方法做注释。第二遍就直接在new Vue那里打了一个断点,从头看到尾看整个代码流程。最后跌跌撞撞也算是写完了,但是质量毫不客气的说,就是垃圾,可能除了我自己也没人看得懂。但是管他呢,写下来就是进步。

  webpack源码算是比较失败的一个选择。这是一个很伟大的工具,当时实在是太崇拜,所以对实现原理产生了浓厚的兴趣。但是当我深入研究时,发现其代码的可阅读性极差,充斥着大量不知所谓的方法,向下兼容、操作系统兼容,有时候写了一篇,全部都是贴代码,完全不知道该说什么。最后算是弃坑解脱了吧,市面上没人研究果然还是有道理的。

  就这样,第一年就过去了,中间也陆陆续续看了JRE的数据结构、express源码等等。

  第二年,我又定下了新的目标,看node源码。不太记得当时下这个决心的导火索了,可能是因为偶然间在VS编译成功了node,看到那个REPL的瞬间,也可能是为了看V8做垫脚石。总之,就这么开始了。然而很可惜,node源码本身真的没有营养,它就像一个502,把V8和libuv粘在了一起,node源码最终变成了libuv的源码。这个系列写的不多,相当于只把事件轮询走了一遍,中间沉迷过游戏,沉迷过赌博,甚至不小心进了头条,为了适应工作鸽了相当长一段时间。最后总算在前段时间闲了下来,补完了坑。

  今天是19年5月22日,第一份工作开始的时间是17年3月27日,一转眼已经两年多了。

  V8引擎在学JavaScript的时候就想着总有一天我要干掉它,现在终于来到了这个时候。但是说实话,这是个太过于难的目标,远超之前看过的任何源码。国内并没有多少人研究这个东西,参考资料寥寥无几。并且看V8引擎老实说,对面试除了装逼基本上毫无用处,前端大部分情况下不可能会接触到C++。业务方面,由于普遍没什么复杂逻辑,知道V8底层原理也懒得为了那一点点优化去特意搞事情。也就是说,做这件事只能纯粹靠兴趣来推动自己了,希望不要像红黑树那篇一样,耻辱下播了(那篇狗文章阅读量怎么那么高,哈哈哈哈)。

  这个系列我也不知道会写多少,不知道会怎么写,不知道写不写的下去。但是作为我做前端的最终目标,希望还是能有所输出的。

  如果V8引擎是一片大海,那我便是一叶孤舟,只身探索神秘之地,寻觅心目中的宝藏。

  先这样吧,最后许愿V8引擎,希望我能有个好对象,保佑我哟。

深入V8引擎-写在前面的更多相关文章

  1. 浅谈Chrome V8引擎中的垃圾回收机制

    垃圾回收器 JavaScript的垃圾回收器 JavaScript使用垃圾回收机制来自动管理内存.垃圾回收是一把双刃剑,其好处是可以大幅简化程序的内存管理代码,降低程序员的负担,减少因 长时间运转而带 ...

  2. 基于c#+xaml的前台采用IE的js引擎写后台

    基于c#+xaml的前台采用IE的js引擎写后台的猜想 参考上一篇文章 基于js的开发wp8界面的猜想知道可以使用 js的window.external.notify调用c# c#可以用InvokeS ...

  3. V8引擎嵌入指南

    如果已读过V8编程入门那你已经熟悉了如句柄(handle).作用域(scope)和上下文(context)之类的关键概念,以及如何将V8引擎作为一个独立的虚拟机来使用.本文将进一步讨论这些概念,并介绍 ...

  4. 浅谈V8引擎中的垃圾回收机制

    最近在看<深入浅出nodejs>关于V8垃圾回收机制的章节,转自:http://blog.segmentfault.com/skyinlayer/1190000000440270 这篇文章 ...

  5. Google V8 引擎 原理详解

    V8 引擎概览 V8 引擎简介 Google V8 引擎使用 C++ 代码编写,实现了 ECMAScript 规范的第五版,可以运行在所有的主流 操作系统中,甚至可以运行在移动终端 ( 基于 ARM ...

  6. Nodejs V8引擎 fast property lookup

    前言 之所以会研究这个东西,是我在网上找了一下各个语言的执行效率比较.好吧,我承认这是个无聊的东西,不过看看总是无妨,然而我惊讶的发现,有些测试声称Java,C,Nodejs是处在同一个效率级别参见链 ...

  7. V8引擎——详解

    前言 JavaScript绝对是最火的编程语言之一,一直具有很大的用户群,随着在服务端的使用(NodeJs),更是爆发了极强的生命力.编程语言分为编译型语言和解释型语言两类,编译型语言在执行之前要先进 ...

  8. 使用 D8 分析 javascript 如何被 V8 引擎优化的

    在上一篇文章中我们讲了如何使用 GN 编译 V8 源码,文章最后编译完成的可执行文件并不是 V8,而是 D8.这篇我们讲一下如何使用 D8 调试 javascript 代码. 如果没有 d8,可以使用 ...

  9. v8引擎详解

    引用网址: https://blog.csdn.net/swimming_in_it_/article/details/78869549 前言 JavaScript绝对是最火的编程语言之一,一直具有很 ...

随机推荐

  1. Vue+ElementUI 安装与应用

    1.初始化创建一个vue项目: 打开终端输入命令 vue init webpack vueui ---------------------------------- ? Project name my ...

  2. Linux服务器下载与上传文件

    一.图形化工具 FileZilla.SecureCRT,连接Linux服务器后直接操作 二.命令 使用终端模拟软件连接服务器后,首先安装lrzsz工具包 yum install lrzsz rz ,上 ...

  3. 模块 time,datetime,random,typing,hashlib,requests,re

    目录 包 什么是包 为什么要包 1. 包的介绍 2. 绝对导入和相对导入 - 绝对导入 - 相对导入 time模块 时间戳 格式化时间 结构化时间 sleep datetime模块 random模块 ...

  4. windows及linux环境下修改pip的默认镜像源的方法

    1. 在windows环境下 临时修改 使用清华大学的源安装numpy包. pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple ...

  5. day9_7.9 函数的定义

    一.基础 1.什么是函数? 函数就是工具,方便开发人员开发软件,非常简洁的工具. 函数的关键字是def 在函数的编写阶段,只检验其语法是否正确,不检验代码. 在函数的调用阶段,可以通过函数名+()来调 ...

  6. JDOJ 2782: 和之和

    JDOJ 2782: 和之和 JDOJ传送门 Description 给出数n,求ans=(n+1)+(n+2)+...+(n+n) Input 一行,一个整数n Output 一行,一个整数ans% ...

  7. 团队冲刺--three

    今天学习css,用css做登录界面. 昨天学习了爬虫了初步. 问题:爬虫很难.

  8. 每天一道Rust-LeetCode(2019-06-06)

    每天一道Rust-LeetCode(2019-06-02) Z 字形变换 坚持每天一道题,刷题学习Rust. 原题 题目描述 示例: 输入: 3 输出: 5 解释: 给定 n = 3, 一共有 5 种 ...

  9. The 2019 China Collegiate Programming Contest Harbin Site

    题解: https://files.cnblogs.com/files/clrs97/HarbinEditorialV2.zip Code: A. Artful Paintings /* let x= ...

  10. set去重应用

    1.其中涉及__hash__与__eq__这两个内置方法. 2.列如: 要求用类生成多个对象,其中姓名和性别相同的对象可认为是同一个人,用set原理做去重 class People: def __in ...