浏览器相关知识点总结

1.事件

事件触发有三个阶段

  • window向触发事件出传播,遇到注册的捕获事件就会触发,这一过程叫捕获
  • 传播到事件的触发地方则触发注册事件
  • 然后从触发出向window传播,遇到注册的冒泡事件就会触发,这一过程叫冒泡
    PS:事件的冒泡和捕获一般是谁先注册,则先触发谁

2.事件的代理

如果一个节点中有多个子节点,那么子节点的注册事件应该注册在父节点上,

  • 1
  • 2
  • 3
  • 4

事件的代理相对于直接给目标注册事件:可以节省内存,不需要给子节点注销事件

3注册事件

一般我们用addeventListener注册事件,有时候我们只希望事件触发在目标身上,而不希望另外的事件也被触发,这个时候,我们就可以用stopPropagation来阻止事件的传播,通常stopPropagation是用来阻止事件冒泡,也可以阻止捕获事件
ps:stopImmediatePropagation也可以

4.跨域

1.jsonp
简单来说就是利用
// 恶意就被执行了,这就是 XSS
预防
不要使用 innerHTML,改成 innerText,script 就会被当成文本,不执行
如果你一样要用 innerHTML,字符过滤
把 < 替换成 <
把 > 替换成 >
把 & 替换成 &
把 ' 替换成 '
把 ' 替换成 "
代码 div.innerHTML = userComment.replace(/>/g, '<').replace...
使用 CSP Content Security Policy
3.密码安全
通过给用户密码加密然后保存再数据库

8.缓存

  • 强缓存 状态码200
  • 协商缓存 状态码304
    1.强缓存,实现强缓存可以设置两种相应头:Expires和Cache-Control强缓存表示缓存期间不需要请求,
    2.协商缓存需要客户端和服务端共同实现,实现协商缓存有两种方式,1.Last-Modified和if-Modified-Since,Last-Modified表示本地文件最后的修改日期,后者会将值发送给服务器在该日期后是否有更新,2.ETag和if-None-match,后者会把ETag发送到服务器。询问该资源是否有更新,且第二种的优先级比第一种的高

9 内存泄漏

会引起内存泄漏的几种方式

  • 意外的全局变量:无法回收
  • 定时器:未被正确的关闭,导致引用的外部变量无法释放
  • 事件监听:未被正确的监听(低版本浏览器可能会出现)
  • 闭包:父级中的变量无法释放
  • dom引用:dom元素被删除,内存中引用未被正确的清除

你可能感兴趣的:(浏览器相关知识点总结)