发表于: 2017-07-29 23:35:39
1 872
今天完成的事情:
把前后和后台的静态页面框架都写好了。
后台路由也都设置好了,可以实现相关页面跳转。
明天计划的事情:
把前台的路由搭好,路由套嵌和能先实现的页面跳转也都先完成。
把方案评审了,两个人再把禅道仔细拆分一下,分配一下任务。
和后端讨论一下接口的问题,查询职位部分给的字段说明不太清楚,明天讨论一下。
遇到的问题:
暂无
收获:
使用js操作DOM时repaint和reflow是经常发生的,如果处理不好这就是页面性能的瓶颈,表现出来现象可能是用户操作响应不及时,浏览器进程cpu特别高。
什么是repaint?
repiant或者redraw遍历所有的节点检测各节点的可见性、颜色、轮廓等可见的样式属性,然后根据检测的结果更新页面的相应部分。
什么是reflow?
reflow指的是计算页面布局。某个节点reflow时会重新计算节点的尺寸和位置,而且还有可能触发其子节点、祖先节点和页面上的其他节点reflow。在这之后再触发一次repaint。reflow对性能的影响非常大,但是很不幸,reflow很容易被触发。
下面的操作会触发reflow:
1、插入、删除或者更新页面(文档树)中的节点。
2、修改页面的内容,例如在input标签中输入内容。
3、移动节点。
4、页面中的动画效果。
5、获取节点的尺寸,例如获取节点的offsetHeight,或者使用getComputedStyle函数获取节点尺寸。
6、改变节点样式。
7、改变节点的className属性。
8、增加或者删除样式表文件。
9、window的resize。
10、滚动滚动条,即scroll。
我们在工作中需要注意:
1、避免多次设置行内样式,避免分别单独设置样式。比如node.style.height = ''; node.style.width = '';这都会多次触发reflow(现代浏览器好一些,远古浏览器不行)。
2、使用className,并且在尽可能内层的节点上做修改。className可以满足多个样式一次修改,只进行一次reflow。
3、当要批量操作某一个DOM树时可以先将其在文档树中移除,待操作完成后在添加到文档树中,这样可避免多次reflow。
4、避免频繁的获取节点尺寸,可以使用标量缓存节点尺寸,这也是以空间换时间的思想。
5、当某一区域需要频繁的dom操作时可以将其外部包裹一个fixed或者absolute布局。
6、避免使用table布局,table布局会触发更多的reflow。
评论