前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >16·灵魂前端工程师养成-JavaScript内存图

16·灵魂前端工程师养成-JavaScript内存图

作者头像
DriverZeng
发布2022-09-26 16:47:16
3420
发布2022-09-26 16:47:16
举报
文章被收录于专栏:Linux云计算及前后端开发

-曾老湿, 江湖人称曾老大。


-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。


操作系统常识


学习JS之前英语

英语

翻译

Operating System

操作系统,简称:OS

runtime

运行时间

environment

环境,简称:env

person

一个人

kernel

内核

compile

编译

memory

记忆、存储、内存

people

一群人


系统运行

请见博客:Linux系统的开机启动流程


浏览器的功能

1.发起请求

下载HTML 解析HTML 下载CSS 解析CSS 渲染界面 下载JS 解析JS 执行JS


2.功能模块

用户界面 渲染引擎 JS引擎(跨线程通信) 存储等

JS引擎

1.Chrome 用的是V8引擎,C++编写 2.网景用的是SpiderMonkey,后被Firefox使用,C++编写 3.Safari使用的是JavaScriptCore 4.IE用的是Chakra(JScript9) 5.Edge用的是Chakra(JavaScript) 6.Node.js用的是V8引擎


JS引擎的主要功能

编译:把JS代码翻译为机器能执行的字节码或者机器码 优化:改写代码,使其更高效 执行:执行上面的字节码或者机器码 垃圾回收:把JS用完的内存回收,方便之后再次使用


执行JS代码

准备工作:

提供API:window|document|setTimeout 上面这些都不是JS自身具备的功能 我们将这些功能称为运行环境 runtime env 一旦把JS放进页面,就开始执行JS


内存的分布

红色区域作用:

1.专门用来存储数据。 2.不存储变量名。 3.每种浏览器分配规则不一样。

上图分配并不完整,因为还有 调用栈任务队列垃圾回收 等区域

Stack:栈,特点,每个数据顺序存放。 Heap:堆,特点,每个数据随机存放。

代码语言:javascript
复制
 var a = 1
 var b = 2
 
 var person = {name: 'zls',child:{name: 'zhang3'}}
 var person2 = person

规律: 数据分为两种,对象 和 非对象

非对象都在Stack 对象都在Heap

篡改对象:

代码语言:javascript
复制
var person = {name:'zls'}
var person2 = person
person2.name = 'qls'

console.log(person.name)
qls

JavaScript的世界

盘古开天辟地,神说,要有光,于是就有了光...

JS刚出来的时候,JS的开发者说,要有window,于是... 就有了window

还要控制台,document,对象,属组,函数...

于是就把所有东西都挂在了window上

而且自己也可以写内容,直接挂在window上


把window用内存画出来

1.window变量和window对象是两个东西 2.window变量是一个容器,存放window对象的地址 3.window对象是Heap里的一坨数据

JavaScript的三座大山


原型链

可以看见下图中:

window有个Object,在Object中又有个prototype window有个Array,在Array中又有个prototype

可以看到里面有很多个函数。

接下来我们定义一个Object,里面是空。然后运行obj,居然不会报错

代码语言:javascript
复制
var obj = {}

obj.toString()

代码语言:javascript
复制
console.dir(wiindow.Object.prototype)

代码语言:javascript
复制
obj.toString === window.Object.prototype.toString

obj有一个隐藏属性,隐藏属性存储了 Object.prototype对象的地址 obj.toString()发现obj上没有toString 就会去隐藏属性中找,于是就找到了Object.prototype里面的toString

XXX.prototype存储了XXX对象的共同属性,因此我们就不需要重新写共同属性了。

Array.prototype存储了Array对象的共同属性 Object.prototype存储了Object对象的共同属性...

这就是原型,如果没有原型...

声明一个对象:

代码语言:javascript
复制
var obj = {
    toString: window.Object.prototype.toString,hasOwnPropertype: window.Object...
}

var obj.toString = {
    toString: window.Object.prototype.toString,hasOwnPropertype: window.Object...
}

var obj2.toString = {
    toString: window.Object.prototype.toString,hasOwnPropertype: window.Object...
}

这样不累么?

原型,让你无需重复的赋值,这样就可以提升效率节省内存

每个对象都有自己的隐藏属性。

我们只关心,小写开头的对象,不关心大写字母开头的对象。

prototype__proto__的区别就是,都存着原型的地址,只不过prototype挂载函数上__proto__挂在每个新生成的对象上。


JS世界与内存图

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 操作系统常识
  • JS引擎
  • JavaScript的世界
  • JavaScript的三座大山
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档