前端页面的优化

关于页面代码优化的总结:
    其实,之前没有接触过这些东西
    参考:
        前端优化带来的思考
        http://www.cnblogs.com/yexiaochai/p/4901341.html
    0.优化页面的难点???
        ① 页面关系错综复杂,需求迭代容易出BUG;
        ② 框架每次升级都会导致额外的请求量,常加载一些业务不需要的代码;
        ③ 第三方库泛滥,且难以维护,有BUG也改不了;
        ④ 业务代码加载大量异步模块资源,页面请求数增多;
    1.如何优化页面
        1.传输层面:
            减少请求次数,降低请求量
        2.执行层面:
            减少重绘和回流(善于利用页面的缓存)
    2.提前了解一下页面的重绘和回流:
        1.从页面的执行过程来看
            http://www.css88.com/archives/4996
            1.浏览器获取到页面代码,解析为DOM树(包括display:none)
                注释:DOM树只是识别节点,不认识样式
            2.DOM+样式结果体的组合---> 解析为render tree 元素树
               渲染节点,(display:none)的样式直接不渲染(节点不在render树上面的)
               但是 visibility:hidden在rendertree上面,他要占据位置的
            3.浏览器根据render tree来绘制页面
        2.什么是回流和重绘??
            1.回流:
                页面布局发生改变的时候,就会回流.(重新构造render tree ),仅仅是受影响的部分重新构建和渲染(不是整个 render tree)
                回流,一定会引发重绘
                display:none: 影响了布局,会导致回流的...
                
                回流使用的场景:
                    1.页面刚开始加载的时候,必然回流和重绘的
                    2.元素的位置改变的时候
                    3.删除或者添加可见的DOM节点
                    4.元素的尺寸改变
                    5.浏览器的尺寸改变的时候--resize()事件发生的时候
                    
            2.重绘:
                元素更新属性,但是不会影响布局,就叫做重绘的.
        3.对待页面中的大量重绘和回流,浏览器会做一些处理的:
            1.浏览器会整一个队列,当回流达到了某个数量或者到了一定的时间间隔
                就执行一次重绘,实现了回流的整合
            2.但是,程序中的一些代码会影响浏览器,强制浏览器执行回流的队列 ,浏览器的回流优化
                就不起作用了.
                这些操作包括:
                    1. offsetTop, offsetLeft, offsetWidth, offsetHeight
                    2. scrollTop/Left/Width/Height
                    3. clientTop/Left/Width/Height
                    4. width,height
                    5. 请求了getComputedStyle(), 或者 IE的 currentStyle
                原因:
                    因为获得这些属性(宽高),浏览器需要判断在回流队列中,是否有影响宽高的值
                    所以,需要提前执行队列里面的内容
        4.程序员如何减少重绘和回流呢???
            1.使用cssText:的方式来改变样式:(变成字符串的拼接,就可以了)
                el.style.cssText += "; 
                left: " + left + "px; 
                top: " + top + "px;";
            2.造作元素的处理进行'离线操作',操作完之后,再一起挂载到DOM节点上面
                1.在页面增删节点的时候:
                    使用DocumentFragment进行缓存操作
                2.使用display:none
                3.使用cloneNode(true or false)和replaceChild 技术
            3.尽量减少对浏览器flush队列的属性的访问操作,如果必要访问,尽量使用缓存来操作
            4.让元素脱离动画流,减少render tree的规模    
    3.传输层面的页面优化(优化页面的核心)
        1.网页是自上而下来解析渲染的,边解析边渲染,页面内的css文件会阻塞渲染,异步的css导致回流的
        2.无序并发导致朱梓源的速度下降
        3.尽量使用浏览器的缓存资源,
            首屏载入是页面优化的重点
                1.减少请求数
                    合并样式和脚本文件
                    合并背景图片
                    css3 的图标,Icon Font
                2.减少请求的数量:
                    开启Gzip
                    优化静态资源如jQery--->Zepto,去除冗余代码
                    图片无损压缩
                    图片的延时加载
                    减少cookie的携带
                        1.使用缓存
                        2.按需加载
                        3.fake 页技术
                            先是页面可视化
                            之后,在不实现交互就可以的
                        4.CDN
                            感觉好像迅雷啊
    4.如何解决头花页面上的难点??
        1.UI 
            使用一个UI核心
            打包工用的核心UI
        2.拆分页面(组件式的开发)
            1 避免使用全局的业务类样式,就算他建议你使用
            2 避免不通过接口直接操作DOM
        3. 对于资源加载的处理:
            使用核心框架层
            MVC骨架
            异步模块加载器
                require或者seaJS  --这个东西不止一次听说了,需要学习一下子了
            业务公共模块
            独立的page.js资源  又是一个点,我还不会使用webpack,,,打包工具呢,,
            全局的css资源
        4.使用资源缓存技术:
            ① 浏览器缓存
            ② localstorage缓存
            ③ application缓存
                    Hybrid载入 --这个到底是什么东西
        5.前端的工程化
            要完成前端工程化,少不了工程化工具,requireJS与grunt的出现
      

               
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值