做性能分析的时候使用了
window.performance
Api 来获取加载数据,后面去修改的时候又不确定各个字段表示的时间点,整理记录下各个字段和时间点关系
performance.timing
接口包含了当前页面的加载时间,时间值都为触发时机的时间戳或者没有就为0
和 PerformanceResourceTiming
重复的时间数据在下面统一整理,这里先介绍独有的一些参数
(() => '\u5b66\u4e60\u8ba9\u6211\u5feb\u4e50\uff0c\u5de5\u4f5c\u4f7f\u6211\u5f00\u5fc3')()
可视化编辑器比较多的使用在 电商营销活动编辑
、H5可视化编辑
、电商店铺装修
等场景中。
最近做店铺装修,也实现了一个简单的可视化编辑,这里记录下整个编辑器页面的组件设计。
活动编辑器预览地址:https://form.lljj.me/vue-editor.html#/editor
其中数据配置表单根据 JsonSchema 生成,可参见:https://github.com/lljj-x/vue-json-schema-form
在前面这个文章的时候说 按位运算,是基于32位二进制补码进行运算。这里在继续补充下js浮点运算丢失精度的问题。
还是先从下面这个经典的例子开始说起,如下这个例子比较常见,通常为了规避这类问题在一些电商类网站处理价格的场景都需要做特殊处理。
1 | // 0.30000000000000004 |
如上浮点常见解决方案都是通过转为整数,然后基于整数计算出结果,再转回小数,简单例子如下:
1
2
3
4
5 // 0.1 + 0.2
// 但这里也需要保证转换后的数小于 2^53,大数依然会出问题。
const base = 10;
const res = (0.1 * base + 0.2 * base ) / base;
console.log(`0.1 + 0.2 = ${res}` );
为什么丢失精度? 在分析这个问题之前,要先了解下 IEEE 754
(IEEE二进制浮点数算术标准)标准,JavaScript 遵循 IEEE 754
规范,Number
采用双精度存储(double precision)。
这里要先看下计算机是如何对浮点数进行二进制和十进制转换的。
2
,取得到的整数部分记下来,然后小数部分继续乘以 2,直到小数部分为0,或者达到储存位上限。举个例子,比如转换十进制数 12.3
前面看到MDN对数组 find
polyfill
方法中使用了 o.length >>> 0
三个 >>>
的运算,看都看了那就顺便梳理下 javaScript 中的位运算符和实际的一些运用场景。
补码
(two’s complement)形式的有符号32位整数。这里先简单介绍下:原码
、反码
、补码
的概念。
原码就是符号位加上真值的绝对值, 即用第一位表示符号(0为正,1为负), 其余位表示值。
例如:
314
为:00000000000000000000000100111010
-314
为 10000000000000000000000100111010
背景来源于很久前组内的一次讨论,如何可以更高效的获取N个质数。
使用场景是很久前在对选择商品多属性SKU的情况下,选中某些属性的情况下,判断其它属性的选中状态,通过质数的方式来做可选操作判断。
关于质数方案原文应该是出在淘宝某团队,这里只讨论关于获取质数的一些方法
这种方法是最容易理解和想到的方法,依次从2到当前数字,如果任意一个能被整除那就不是质数
首先来提供一个测试方法,通过传入一个方法验证10万内的所有质数,代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/* GLOBAL js */
window.getPrimeNumArr = (fn, n = 10 * 10000) => {
console.time(fn.fnName);
const primeNumList = [2];
for (let i = 3; i < n; i++) {
if (fn(i, primeNumList)) {
primeNumList.push(i)
}
}
console.timeEnd(fn.fnName);
console.log(primeNumList);
console.log(`${n}共有:${primeNumList.length}个`);
console.log('--------------------');
return primeNumList;
}
内容大部分来自 《javascript 设计模式与开发实践》一书,适当的结合自己工作实践,做出整理和笔记
系列: javascript 设计模式
迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部方法,大部分的编程语言都原生支持,Js的Array forEach
使用方便,不用关注内部实现,例如js forEach
1 | const each = function each(ary, callback) { |
内容大部分来自 《javascript 设计模式与开发实践》一书,适当的结合自己工作实践,做出整理和笔记
系列: javascript 设计模式
在日常开发中需要对一个图片设置src,由于图片加载需要等待时间所以会出现图片空白的场景,下面来用代理模式来实现:
默认的浏览器请求都会附带referer信息为上一页面的url,可以通过 document.referrer
来查看,而 _blank
打开一个新页面时 window.opener
能获取到来源页面的window对象。
比如在密码找回页面,点击链接可能会跳转到对应的三方邮件服务网站,这种场景就不希望携带当前的refer信息,以避免暴露敏感数据。
并且 window
对象暴露这个危险性也不用说了。
下面来聊聊我们如何在一些特定的场景避免页面内的请求附带refer信息。
另外:
referer
是referrer
的错误拼写