前端面试的经典题第二弹

作者: brandonxiang | 来源:发表于2017-04-08 13:09 被阅读112次

    http缓存的meta标签

    HTTP协议中关于缓存的信息头关键字包括Cache-Control(HTTP1.1),Pragma(HTTP1.0),last-Modified,Expires等。

    • Cache-Control
      • no-cache 浏览器和缓存服务器不缓存页面信息
      • private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理
      • must-revalidate 对于客户机的每次请求,服务器验证缓存是否过时
      • public 浏览器和缓存服务器可以缓存页面信息
      • no-store http信息不被存储在对方的磁盘系统
    • Pragma
      • Pragma
      • no-cache
    • last-modified 只页面的最后生成时间,GMT格式
    • Expire 指的是过期的时间,过了某个时间点后从真正的服务器众获取新的页面信息

    1) 打开新窗口 值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。 而如果指定了max-age值,那么在此值内的时间里就不会重新访问服务器,例如: Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不会去服务器)
    2) 在地址栏回车 值为private或must-revalidate则只有第一次访问时会访问服务器,以后就不再访问。 值为no-cache,那么每次都会访问。 值为max-age,则在过期之前不会重复访问。
    3) 按后退按扭 值为private、must-revalidate、max-age,则不会重访问, 值为no-cache,则每次都重复访问
    4) 按刷新按扭 无论为何值,都会重复访问。Cache-control值为“no-cache”时,访问此页面不会在Internet临时文件夹留下页面备份。
    来自《html头文件设置常用之<meta>设置缓存》

    跨域CORS的步骤

    简单请求

    主要是指GET,POST,HEAD三种请求方式。

    HTTP头文件不超出下面的方式:

    Accept
    Accept-Language
    Content-Language
    Last-Event-ID
    Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
    
    1. 浏览器端:使用GET或者POST发送的请求,根据你请求的地址,给它附加一个额外的Origin头部,其中包含请求页面的源信息(协议、域名和端口)。这个动作大部分浏览器是自动的,除了IE8,它引用的是XDR。
    2. 服务端:如果认为这个请求接受,就在Access-Control-Allow-Origin头部中回发相同的源信息。

    例如:Access-Control-Allow-Origin:http://www.test.com

    非简单请求(Preflighted Requests)

    它支持GET,POST,HEAD以外事件的方法。

    浏览器端会根据你的请求方法添加的头信息自动添加除了Origin外还有下面两个属性。

    • Access-Control-Request-Method 该字段是必须的,用来列出浏览器的CORS请求会用到哪些HTTP方法,上例是PUT
    • Access-Control-Request-Headers 该字段是一个逗号分隔的字符串,指定浏览器CORS请求会额外发送的头信息字段

    服务端确认允许跨源请求,需要添加以下字段。

    • Access-Control-Allow-Origin 与简单请求一样,指请求页面源信息,*表示所有站点
    • Access-Control-Allow-Methods 该字段必需,它的值是逗号分隔的一个字符串,表明服务器支持的所有跨域请求的方法
    • Access-Control-Allow-Headers 如果浏览器请求包括Access-Control-Request-Headers字段,则Access-Control-Allow-Headers字段是必需的
    • Access-Control-Allow-Credentials 是否发送凭证
    • Access-Control-Max-Age 缓存多长时间(秒为单位)
    response.setContentType("text/html; charset=utf-8");
    response.addHeader("Access-Control-Allow-Origin", "*");
    response.addHeader("Access-Control-Allow-Methods", "*");
    response.addHeader("Access-Control-Max-Age", "100");
    response.addHeader("Access-Control-Allow-Headers", "X-Custom-Header,accept, content-type");
    response.addHeader("Access-Control-Allow-Credentials", "false");
    

    什么时候触发重绘重排

    • 增加或删除DOM节点
    • 移动页面中的元素
    • 增加或者修改样式
    • 设置display: none;(重排并重绘)或者visibility: hidden(只有重排)
    • 用户改变窗口大小,滚动页面等

    怎么减少重绘重排

    • 不要一个一个地单独修改属性,最好通过一个classname来定义这些修改
    • clone节点后大幅度修改它,最后插入节点。或者用DocumentFragment进行修改
    • 不要频繁获取计算后的样式,最好暂存起来而不是直接从DOM上读取
    • 绝对定位的动画不会影响其他dom

    参考

    相关文章

      网友评论

        本文标题:前端面试的经典题第二弹

        本文链接:https://www.haomeiwen.com/subject/tjgrottx.html