什么是技术债

如何处理技术债

网页应用从服务器主动推送到客户端有那些方式?

- websocket

  1. [阮一峰websocket](https://www.ruanyifeng.com/blog/2017/05/websocket.html)<br /> [WebSocket 教程](https://www.jianshu.com/p/516c8b6f9f09)
  • SSE,EventSource接口

    SSE
    SSE详解
    EventSource()
    ps:轮询是定时去服务器端请求数据,不管有没有新数据都会请求。并不算主动推送

    http都有哪些状态码?

    - 200 成功

  • 301 重定向

  • 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
  • 400 (错误请求) 服务器不理解请求的语法。
  • 403 (禁止) 服务器拒绝请求。
  • 404 (未找到) 服务器找不到请求的网页。
  • 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
  • 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
  • 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
  • 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
  • 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
  • 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

    SVN和GIT的理解和区别

    svn是集中式的,允许单次下载单文件修改,因为对每个文件都有对应的.svn文件控制
    git是分布式的,每次clone都是获得一个完整的代码版本,可以不依赖服务器本地独立运行项目
    个人感觉SVN除了集中带来的权限管理优势之外,其它被完爆,而且现在人们不缺少那点硬盘空间,来换取独立的自由

    重绘和重排的理解,以及如何优化?

    image.png

    重绘:

    当盒子的位置、大小以及其他属性,例如颜色、字体大小等都确定下来之后,浏览器便把这些原色都按照各自的特性绘制一遍,将内容呈现在页面上。重绘是指一个元素外观的改变所触发的浏览器行为,浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。
    触发重绘的条件:改变元素外观属性。如:color,background-color,font-size等。

    重排(回流):

    当渲染树中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建, 这就称为回流(reflow)。每个页面至少需要一次回流,就是在页面第一次加载的时候。
    重绘和重排的关系:在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程称为重绘。
    所以,重排必定会引发重绘,但重绘不一定会引发重排
      触发重排的条件:任何页面布局和几何属性的改变都会触发重排,
    比如:
      1、页面渲染初始化;(无法避免)
      2、添加或删除可见的DOM元素;
      3、元素位置的改变,或者使用动画;
      4、元素尺寸的改变——大小,外边距,边框;
      5、浏览器窗口尺寸的变化(resize事件发生时);
      6、填充内容的改变,比如文本的改变或图片大小改变而引起的计算值宽度和高度的改变;
    触发重排的条件:改变元素的大小 位置 等如:width、height、pading、margin、position等, 添加删除DOM操作等
    重绘重排的代价:耗时,导致浏览器卡慢。

    优化

    1、浏览器自己的优化:浏览器会维护1个队列,把所有会引起回流、重绘的操作放入这个队列,等队列中的操作到了一定的数量或者到了一定的时间间隔,浏览器就会flush队列,进行一个批处理。这样就会让多次的回流、重绘变成一次回流重绘。
    2、我们要注意的优化:我们要减少重绘和重排就是要减少对渲染树的操作,则我们可以合并多次的DOM和样式的修改。并减少对style样式的请求。
    (1)直接改变元素的className
    (2)display:none;先设置元素为display:none;然后进行页面布局等操作;设置完成后将元素设置为display:block;这样的话就只引发两次重绘和重排;
    (3)不要经常访问浏览器的flush队列属性;如果一定要访问,可以利用缓存。将访问的值存储起来,接下来使用就不会再引发回流;
    (4)使用cloneNode(true or false) 和 replaceChild 技术,引发一次回流和重绘;
    (5)将需要多次重排的元素,position属性设为absolute或fixed,元素脱离了文档流,它的变化不会影响到其他元素;
    (6)如果需要创建多个DOM节点,可以使用DocumentFragment创建完后一次性的加入document;

    防抖节流

    JS 防抖与节流