3-7 慕课和掘金小册的学习
慕课和掘金小册的学习
从上次事件之后,小明会小心的把插入到页面中的数据进行转义。而且他还发现了大部分模板都带有的转义配置,让所有插入到页面中的数据都默认进行转义。这样就不怕不小心漏掉未转义的变量啦,于是小明的工作又渐渐变得轻松起来。
防止DOM XSS攻击->
在使用 .innerHTML、.outerHTML、document.write()
时要特别小心,不要把不可信的数据作为 HTML 插到页面上,而应尽量使用 .textContent、.setAttribute()
等。
如果用 Vue/React 技术栈,并且不使用 v-html/dangerouslySetInnerHTML
功能,就在前端 render 阶段避免 innerHTML、outerHTML
的 XSS 隐患。
2.浏览器缓存机制
缓存可以说是性能优化中简单高效的一种优化方式了,它可以显著减少网络传输所带来的损耗。
对于一个数据请求来说,可以分为发起网络请求、后端处理、浏览器响应三个步骤。浏览器缓存可以帮助我们在第一和第三步骤中优化性能。比如说直接使用缓存而不发起请求,或者发起了请求但后端存储的数据和前端一致,那么就没有必要再将数据回传回来,这样就减少了响应数据。
3.为什么操作 DOM 慢
想必大家都听过操作 DOM 性能很差,但是这其中的原因是什么呢?
因为 DOM 是属于渲染引擎中的东西,而 JS 又是 JS 引擎中的东西。当我们通过 JS 操作 DOM 的时候,其实这个操作涉及到了两个线程之间的通信,那么势必会带来一些性能上的损耗。操作 DOM 次数一多,也就等同于一直在进行线程之间的通信,并且操作 DOM 可能还会带来重绘回流的情况,所以也就导致了性能上的问题。
4.封装DOM操作里获取和修改data-属性的值
/获取data- 属性的值
export function getData(el, name, val) {
const prefix = 'data-'
if (val) {
return el.setAttribute(prefix + name, val)
}
return el.getAttribute(prefix + name)
}
5.map方法里return一个对象
//测试map方法
let arr=[0,1,2]
let arr1=[{label:'2',name:'3'},{label:'3',name:'4'}]
let arr2=arr.map((item)=>{
return {
item,
...arr1[item]
}
})
console.log(arr2);
//[ { item: 0, label: '2', name: '3' },
{ item: 1, label: '3', name: '4' },
{ item: 2 } ]
注意map()
方法是有返回值的,并且会改变原数组,所以里面要写return