使用 JSON.parse、JSON.stringify 深拷贝的缺陷

在用SON.parse、JSON.stringify做对象深拷贝时,发现会丢失对象中某些类型的值,所以我们来一探究竟,看看在转换过程中做了什么处理。 先看下MDN是怎么介绍 JSON.stringify 的 JSON.stringify(value[, replacer [, space]]) 参数 value 将要序列化成 一个JSON 字符串的值。 这是第一个参数,应该都不陌生,最常用的也是这个。其他两个基本用不到。 一般传入一个对象。 »

元芳 元芳

浏览器协商缓存中的ETag是怎么生成的?

上一篇浏览器的缓存机制 讲了整个的缓存流程,那么其中的ETag是怎么生成的呢? 其实在不同的Web服务器有不同的算法,今天,我们就以nginx为例,看一下是怎么生成的。 以这个资源文件的请求为例 可以看到Server是 nginx/1.14.0,那我们再去看看nginx的源码是怎么生成ETag的ngx_http_core_modules.c etag->value.len = ngx_sprintf(etag-> »

元芳 元芳

浏览器的缓存机制

场景 当我们浏览器使用久了,会发先他的占用空间越来越大,用清理软件扫描的时候,会发现有个缓存文件目录 这些文件都是经过16进制加密的,window上可以用ChromeCacheView查看,mac os 没找到查看的办法,所以我也没有验证缓存文件的内容。 不过据 ChromeCacheView 的截图来看,是可以看到存储文件原来的信息。 所以当我们首次浏览网页的时候,浏览器会从服务器获取所有数据和媒体并缓存到本地存储。 当再次访问同一站点时,浏览器仅从Web服务器检索HTML页面信息。 页面的所有静态部分(例如图像或JavaScript文件 )都将从现有的浏览器缓存中提取。由于第二次从远程Web服务器传输到浏览器的数据量很小,因此页面加载速度更快。 前端性能优化之缓存优化 既然访问网站的时候可以对一些文件进行缓存, »

元芳 元芳

three.js 小游戏vue3实践

本次实践在vue中引入three.js,然后实现3D动画运动场景,只要用于尝试vue3的项目练手。 1.安装准备 1)、vue-cli初始化项目,vue-cli需要最新版本4.5.x。 2)、安装three,npm install three 3)、安装轨道控件插件,npm install three-orbit-controls 4)、安装加载.obj和.mtl文件的插件,npm »

温仪 温仪

javascript单线程与浏览器的一些事

本次研究源于一次window.open引发的浏览器崩溃血案,虽替换方案解决了问题,但有必要深入摸索学习浏览器更深层的机制,加深自我对写js代码的辅助灵活运用。 1.进程和线程 进程和线程是操作系统里的概念。 进程是CPU进行资源分配的基本单位。线程是CPU调度的最小单位。 概念类比比较形象生动的解释,请移步这里(阮一峰大神的文章) 2.浏览器 浏览器架构图: 3.浏览器使用进程、线程 从浏览器的架构图,研究浏览器是如何使用进程和线程完成任务。 现在主流浏览器都使用多进程方式,结合浏览器架构图,现以chrome为例,对浏览器的进程工作进行比对: 给出下图chrome的进程架构图 »

温仪 温仪