最近准备面试,发现很多东西自己记了又忘,害,在这里记录一下一些问题吧
如果首屏图片过多,怎么优化,原因是什么
分析原因:
- 图片过大,加载慢
- 发起的网络请求过多,同一个域名浏览器最多只能建立 6-8 个 TCP 链接
解决办法:
- 压缩图片
- 一些小的图片是否可以转成 base64
- 采用 webp 格式的图片,用 picture 兼容
- 静态资源上传 CDN,或者分发到其他域名下,增加请求并发
- 非首屏图片可用懒加载
- http 采用 gzip 压缩,content-encoding 设置 gzip
- 充分利用浏览器缓存,加快二次访问速度
cookie问题
cookie是面试常见考点了
属性
- domain 可允许共享cookie的域名,默认值为origin,可以设置为父域名或自身域名,不能设置成其他域名。
- path 就是可以使用cookie的路径,如a.com/chen ,那么此时a.com/jian ,就不能共享cookie了。
- httpOnly 不允许js脚本获取cookie,避免xss攻击
- secure 只有在Https才能用cookie
- samesite 有strict和lax,none,strict不允许任何第三方网站用cookie,lax是get的重定向可以用cookie,避免csrf
跨域请求
跨域请求默认是不带cookie的,要服务端设置Access-Control-Allow-withCredentials,前端设置withCredentials才能带
设置cookie的方法
前端可以document.cookie = XXX 后端就setCookie去更改cookie
怎么实现cookie共享
如果是父域名和子域名的cookie共享,则可以通过指定domain去实现,设置后,自身和子域名的cookie可共享
如果不是父子关系的域名,那么可以通过一个中间域名,比如a.example和b.example可通过.example去共享,如果不是这样,就得去发个请求,a域名下的cookie修改,发请求去b的服务器,b在setCookie,这样也能共享
防止CSRF攻击
- 设置sameSite
- token验证
- 任何敏感信息前都做一个验证
- 图形码,人脸,指纹其实都是为了这个
- cookie的有效时间设置短一点
一些标签页共享问题
如:音乐网站,怎么实现各标签页同步歌曲播放 这就涉及到了标签页的通信问题 如果是同源的话,可以用localStorage 如果是非同源的话,则可以用postMessage实现,或者借助服务端
怎么实现图片上传预览
用上传图片后,可以在fileList中拿到,那么就可以用window.URL.createObjectURL生成url,然后替换到src上进行预览
onXXX和addEventListener的区别
- 一个是DOM0的方法,一个是DOM2的方法
- onXXX只能绑定一个事件,后绑定的会替换前面的
- addEventListener可绑定多个,还可以设置冒泡,捕获
- 解绑的话,onXXX要指向null,而另一个是用removeEventListener
遍历属性
- Object.keys()只能遍历自身可枚举属性
- Object.getOwnPropertyName()获取自身所有属性
- for in 自身和原型链上所有属性
- obj.hasOwnProperty(XX) 自身是否有XXX属性