3: Interview summary

1. Run the principle of the browser
浏览器的渲染机制一般分为以下几个步骤
1.处理 HTML 并构建 DOM 树。
2.处理 CSS 构建 CSSOM 树。
3.将 DOM 与 CSSOM 合并成一个渲染树。
4.根据渲染树来布局,计算每个节点的位置。
5.调用 GPU 绘制,合成图层,显示在屏幕上。
复制代码
2. How to improve the performance of CSS? CSS to optimize and improve the performance summary
主要表现为: 加载性能 (主要是从减少文件体积,减少阻塞加载,提高并发方面入手),选择器性能,渲染性能,可维护性。
1、尽量将样式写在单独的css文件里面,在head元素中引用
(1)内容和样式分离,易于管理和维护
(2)减少页面体积
(3)css文件可以被缓存、重用,维护成本降低
2、不使用@import  
如果你使用@import属性引入css的话,当用户浏览的网速较慢时,他会看到一个没有风格样式的页面,然后随着CSS文件被下载完成才可以看到应有的风格
3、避免使用复杂的选择器,层级越少越好  
项目的模块越来越多,功能越来越复杂,我们写的CSS选择器会内套多层,越来越复杂。建议选择器的嵌套最好不要超过三层,简洁的选择器不仅可以减少css文件大小,提高页面的加载性能,浏览器解析时也会更加高效,也会提高开发人员的开发效率,降低了维护成本。
4、精简页面的样式文件,去掉不用的样式  
(1)样式文件偏大,影响加载速度
(2)浏览器会进行多余的样式匹配,影响渲染时间。
根据当前页面需要的css去合并那些当前页面用到的CSS文件, 合并成一个文件有一个优点:样式文件会被浏览器缓存,进入到其他页面样式文件不用再去下载。
5、利用CSS继承减少代码量  
我们知道有一部分CSS代码是可以继承的,如果父元素已经设置了该样式,子元素就不需要去设置该样式,这个也是提高性能的行之有效的方法。
6、慎重使用高性能属性:浮动、定位;  
一方面,浮动的种种复杂的布局规则注定了它是一种试探性局部 reflow 式的布局算法。浏览器需要花费很多精力来处理它。另一方面,浮动元素的布局牵涉到的因素更多。在同一布局空间中,所有浮动元素均存在于“静态层”之上的“浮动层”,不仅浮动层中的多个浮动元素会相互影响,浮动元素与静态层也有互动。
7、css样式前缀
标准化各种浏览器前缀,带浏览器前缀的在前,标准的在后
8、css属性值 
属性值为0时,不加单位
属性值为浮点数0.**时,可以省略小数点前的0 
复制代码
3. how to optimize mobile client
4. Several common methods of event listeners
5. Performance Optimization

Detailed: yuchengkai.cn/docs/fronte...

6. lazy loading
1.图片进入可视区之后请求图片资源;
2.对于电商等图片很多,页面很长的业务场景适用;
3.减少无效资源的加载;
4.并发加载的资源过多会阻塞js的加载,影响网站的正常使用;
懒加载就是将不关键的资源延后加载。

懒加载的原理就是只加载自定义区域(通常是可视区域,但也可以是即将进入可视区域)内需要加载的东西。对于图片来说,先设置图片标签的 src 属性为一张占位图,将真实的图片资源放入一个自定义属性中,当进入自定义区域时,就将自定义属性替换为 src 属性,这样图片就会去下载资源,实现了图片懒加载。

懒加载不仅可以用于图片,也可以使用在别的资源上。比如进入可视区域才开始播放视频等等。
复制代码

Code Display

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>懒加载</title>
    <style>
        * {
            margin: 0;
        }
        .images-list{
            text-align: center;
        }
        .image-item {
            display: block;
            margin: 0 auto;
            margin-bottom: 50px;
            height: 200px;
        }
    </style>
</head>

<body>
    <div class="images-list">
        <img src="" class="image-item" lazyload="true"
            data-original="https://img11.360buyimg.com/babel/s190x210_jfs/t1/67382/7/737/7499/5cef7cdcE7e558a19/20bf923d00519d1b.png!q90!cc_190x210" />
        <img src="" class="image-item" lazyload="true"
            data-original="https://img11.360buyimg.com/babel/s190x210_jfs/t1/37644/21/10456/7615/5cf0e744E4f1c0791/9099b47069899343.png!q90!cc_190x210" />
        <img src="" class="image-item" lazyload="true"
            data-original="https://img12.360buyimg.com/babel/s190x210_jfs/t1/33253/40/12868/28087/5cf4ba82Eeb1f20db/6269ad71b6c783ee.png!q90!cc_190x210" />
        <img src="" class="image-item" lazyload="true"
            data-original="https://img10.360buyimg.com/babel/s190x210_jfs/t1/46094/12/1361/6091/5cf12dabE8936db02/d715b9b23b05f6ef.png!q90!cc_190x210" />
        <img src="" class="image-item" lazyload="true"
            data-original="https://img11.360buyimg.com/babel/s190x210_jfs/t1/38402/3/7768/7973/5cf10a9dEcbf4ebe3/99bdf2f7bbcc4098.png!q90!cc_190x210" />
        <img src="" class="image-item" lazyload="true"
            data-original="https://img11.360buyimg.com/babel/s190x210_jfs/t1/53503/9/1235/8719/5cef7be0E45e8daa3/d5f7827394839f29.png!q90!cc_190x210" />
        <img src="" class="image-item" lazyload="true"
            data-original="https://img10.360buyimg.com/babel/s190x210_jfs/t1/61252/39/1085/6228/5cf51d68Ee6890774/4ac1a93e51b98396.png!q90!cc_190x210" />
        <img src="" class="image-item" lazyload="true"
            data-original="https://img12.360buyimg.com/babel/s190x210_jfs/t1/64182/40/699/8910/5cef37f5Eacf7aa07/e0e9f04f5e55efb0.png!q90!cc_190x210" />
        <img src="" class="image-item" lazyload="true"
            data-original="https://img12.360buyimg.com/babel/s190x210_jfs/t1/54510/8/1271/6158/5cef5bfbEede24168/4aa624bd9ada781f.png!q90!cc_190x210" />
        <img src="" class="image-item" lazyload="true"
            data-original="https://img11.360buyimg.com/babel/s190x210_jfs/t1/68844/9/755/10390/5cef6d16E17865545/819001724f67aa8f.png!q90!cc_190x210" />
        <img src="" class="image-item" lazyload="true"
            data-original="https://img11.360buyimg.com/babel/s190x210_jfs/t1/67382/7/737/7499/5cef7cdcE7e558a19/20bf923d00519d1b.png!q90!cc_190x210" />
        <img src="" class="image-item" lazyload="true"
            data-original="https://img10.360buyimg.com/babel/s190x210_jfs/t1/61252/39/1085/6228/5cf51d68Ee6890774/4ac1a93e51b98396.png!q90!cc_190x210" />
    </div>
    <script>
        var viewHeight = document.documentElement.clientHeight//获取可视区高度
        function lazyload() {
            var eles = document.querySelectorAll('img[data-original][lazyload]');
            Array.prototype.forEach.call(eles, function (item, index) {
                var rect
                if (item.dataset.original === "")
                    return
                rect = item.getBoundingClientRect()// 用于获得页面中某个元素的左,上,右和下分别相对浏览器视窗的位置
                if (rect.bottom >= 0 && rect.top < viewHeight) {
                    !function () {
                        var img = new Image()
                        img.src = item.dataset.original
                        img.onload = function () {
                            item.src = img.src
                        }
                        item.removeAttribute("data-original");//移除属性,下次不再遍历
                        item.removeAttribute("lazyload");
                    }()
                }
            })
        }
        lazyload()//刚开始还没滚动屏幕时,要先触发一次函数,初始化首页的页面图片
        document.addEventListener("scroll", lazyload);

    </script>
</body>

</html>
复制代码

Reproduced in: https: //juejin.im/post/5cff21b45188250b6d633711

Guess you like

Origin blog.csdn.net/weixin_34415923/article/details/93163672