服务端与网络
数组去重
今天总结一下数组去重的一些方法。记录一下。在真实的项目中碰到的数组去重,一般都是后台去处理,很少让前端处理这种问题。虽然日常项目用到的比较少,但我们还是需要了解一下,以防面试的时候可能回被问到。如果是被提问到,数组去重的方法有哪些?你能答出其中的几种?
一、利用 ES6 Set 去重
1 | Array.from(new Set([1,2,3,3,4,4])) //[1,2,3,4] |
set 是 ES6 新出来的一种一种定义不重复数组的数据类型
Array.from 是将类数组转化为数组
…是扩展运算符,将 set 里面的值转化为字符串
项目性能优化
跨域解决方案
通过jsonp跨域
通常为了减轻web服务器的负载,我们把js、css,img等静态资源分离到另一台独立域名的服务器上,在html页面中再通过相应的标签从不同域名下加载静态资源,而被浏览器允许,基于此原理,我们可以通过动态创建script,再请求一个带参网址实现跨域通信。
原生实现:
1 | var script = document.createElement('script'); |
从输入 url 到展示的过程
DNS 解析
TCP 三次握手
发送请求,分析 url,设置请求报文(头,主体)
服务器返回请求的文件 (html)
浏览器渲染
1.HTML parser –> DOM Tree
标记化算法,进行元素状态的标记
dom 树构建
2.CSS parser –> Style Tree
解析 css 代码,生成样式树
3.attachment –> Render Tree
结合 dom树 与 style树,生成渲染树
4.layout: 布局
GPU painting: 像素绘制页面
安全
模块化
模块化开发在现代开发中已是必不可少的一部分,它大大提高了项目的可维护、可拓展和可协作性。通常,我们 在浏览器中使用 ES6 的模块化支持,在 Node 中使用 commonjs 的模块化支持。
在有 Babel 的情况下,我们可以直接使用 ES6 的模块化
1 | // file a.js |
继承
今天我们来说一下继承,在ES5中,我们可以使用如下方式解决继承的问题
1 | function Super() {} |
防抖节流
今天我们来说一下防抖和节流,防抖与节流函数是一种最常用的 高频触发优化方式,能对性能有较大的帮助。
防抖
防抖 (debounce): 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。使用场景:
1.给按钮加函数防抖防止表单多次提交。
2.对于输入框连续输入进行AJAX验证时,用函数防抖能有效减少请求次数。
我们先来看一个袖珍版的防抖理解一下防抖的实现:
1 | // func是用户传入需要防抖的函数 |
这是一个简单版的防抖,但是有缺陷,这个防抖只能在最后调用。一般的防抖会有immediate选项,表示是否立即调用。这两者的区别,举个栗子来说: