Electron源码学习: Electron组成与初始化流程
Electron源码学习: Electron组成与结构
前言
最近研究学习Electron
的源码结构已经有一些小的进展, 越接触Electron
就越发现组成这个软件的大集合不得了.现在学习到的仍然是这个大集合的冰山一角, 不过还是有必要记录一下.
Electron
的兴盛无疑是建立在了巨人的肩膀之上. 我们都知道Electron
是建立在Node.js上的, 然后Node.js 是建立在V8上的. Node.js社区的是目前最大的开源社区之一, 无疑Electron
的起跑线非常高, 再加上V8的强劲动力,现在程序UI用Electron
除了大了点儿, 其他也就没什么不好的了.(除非一些特殊场景)
笔者的分析测试环境都是Windows环境, 但是这对于分析流程来讲并没有什么影响.
Electron的组成
前面提到Electron
由大集合组成, 那么在这里就有必要大致了解清楚这个集合里面包含的哪些优秀的开源库, 不然Electron
的优秀无从可知.
我大概整理了下这个组成, 理解不深内容有误请指教.
Node.js: 这个跨平台的开源项目带来了强大的扩展能力; 只从源码上讲, Node.js提供了众多的基础库, 例如: 加解密算法, 文件系统, 网络相关, 操作系统相关, 看electron_node源码组成: (注意: electron所使用的的nodejs版本,并不是完全版的, 在该特制版中, 少了很多的特性, 比如算法处, 目前electron_node中就只有`AES, RC4等有限的集算法, 真正Node.js的环境有一大堆的算法)
Libuv: node.js异步事件处理库, 在所有的调用都是异步设定下,让node.js
的调用速度快上了一大截. 其中node.js
的文件系统, 网络相关等功能由该库完成.
V8: node.js
名声很高的一个原因就是因为v8, 因为node.js的高效率的核心本质就是因为v8, v8是Google的Javascript
引擎, 各种特性加持下, JS的执行速度简直快的飞起. 虽然随着版本的更迭,V8的体积也越来越大, 但是其效率缺越来越恐怖.比如Node.js 12引入了一个Code Cache
的技术, 当真是恐怖如斯.
笔者目前学习的两个版本的Electron, 分别是4.2.9 另一个是8.3.0. V4.2.9 并不算老版本, 还是2019年年底的版本, V8.3.0貌似是2020年6月份的版本, 结果在同样的Electron默认启动页面, V8.3.0 的效率比V4. 2.9提升了30%的启动速度. 然而我现在还没有明白发生了什么事情. (希望明白这里的同学告知下, 感谢)
Electron结构
前面的一些介绍, 和源码分析的关系并不大, 这些都是能在网上找到的一些资料. 当然实际测试的确实测试了很多次得出的结论. 那此时此刻肯定大家最关心的还是源码结构的问题. 来看一个图.
待续中…
Electron源码学习: Electron组成与初始化流程相关推荐
- requirejs的源码学习(01)——初始化流程
目录 前言 程序入口 requirejs初始化流程简述 一些重要的函数的解析 前言 现在已经2022年了,大家都已经用上webpack来进行各种打包了,webpack也能很好的兼容各种模块化方案,但是 ...
- Electron源码学习:Electron加密与安全
Electron加密与安全 引言 目前网络上主要流传的加密就只是网页文件打包成asar和JS混淆加密,以及用addon的方式,这几种方式的话,基本就没有什么破解难度.针对的官方asar的打包,这种 ...
- flask源码学习-helloworld与本地启动流程
Flask源码分析 本文环境python3.5.2,flask-1.0.2. Flask的初探 首先,在项目文件夹下建立flask_run.py文件,然后写入如下, from flask import ...
- NVIDIA NCCL 源码学习(一)- 初始化及ncclUniqueId的产生
NCCL是英伟达开源的GPU通信库,支持集合通信和点对点通信 看下官方给的一个demo #include <stdio.h> #include "cuda_runtime.h&q ...
- 【Android 源码学习】系统架构和启动流程
Android 源码学习 系统架构和启动流程 望舒课堂 学习记录整理.以及以下参考文章的整理汇总.便于我个人的学习记录. 感谢IngresGe,Gityuan的精彩文章.为我们这些初探android系 ...
- Vuex 4源码学习笔记 - Vuex是怎么与Vue结合?(三)
在上一篇笔记中:Vuex源码学习笔记 - Vuex开发运行流程(二) 我们通过运行npm run dev命令来启动webpack,来开发Vuex,并在Vuex的createStore函数中添加了第一个 ...
- 菜鸟学源码之Nacos v1.1.3源码学习-Client模块(1):NacosNamingService初始化
摘要: 本文是Nacos源码学习的第一篇,基于Nacos v1.1.3版本对Nacos源码进行学习,本片主要从exmaple的App示例入手,切入Nacos客户端NacosNamingService的 ...
- Spark-Core源码学习记录 3 SparkContext、SchedulerBackend、TaskScheduler初始化及应用的注册流程
Spark-Core源码学习记录 该系列作为Spark源码回顾学习的记录,旨在捋清Spark分发程序运行的机制和流程,对部分关键源码进行追踪,争取做到知其所以然,对枝节部分源码仅进行文字说明,不深入下 ...
- spring4.1.8初始化源码学习三部曲之三:AbstractApplicationContext.refresh方法
本章是<spring4.1.8初始化源码学习三部曲>系列的终篇,重点是学习AbstractApplicationContext类的refresh()方法: 原文地址:https://blo ...
最新文章
- linux停止ftp服务命令,centos没有service命令,怎么启用ftp服务
- tuxedo连接mysql_TUXEDO与INFORMIX数据库的互连
- gtk+-hello,world
- Java nio Socket非阻塞模式
- 字符串分割 函数实现
- LAMP部署脚本--安装篇
- php 重新编译_linux下为php添加GD库(重新编译php)
- 判断字符串是否是正整数
- windows 画图工具 —— mspaint 的使用
- 【ubuntu操作系统入门】系统安装
- 玩转docker、Swarm、Kubernetes
- 全网首发:JDK绘制文字:五、字体上下文产生流程
- 计算机网络—3网络层(IP地址及分类、子网掩码及划分子网)
- Python入门学习—元组/字符串(FishC)
- XINS 2.3支持Google App Engine和Ant 1.8
- PMP复习整理考点篇【12】--- 激励理论
- Learning to Count via Unbalanced Optimal Transport
- C++ Qt自建网页浏览器
- 这些Word小技巧,你知道吗?
- 实战goldengate:安装配置+数据初始化+单向DML复制