前端javascript总结笔记(四)--其他知识

一、页面加载

题目:

1.从输入url到得到html的详细过程?

见下面知识点2

2.window.onload和DOMContentLoaded的区别?

window.onload 是页面全部资源(包含图片、视频)加载完后才会执行; DOMContentLoaded 是DOM渲染完即可执行(此时图片、视频还可能没有加载完)。 附加:img是异步加载,可以直接渲染,不会阻塞DOM结构。

知识点:

1.加载资源的形式?

答:2种。一种是输入url(或跳转页面)加载html页面,如http:coding.m.imooc.com。另一种是加载html种静态资源的,如加载js、jq等等。

2.加载一个资源的过程?

答:首先浏览器根据DNS服务器得到域名的IP地址,紧接着向这个IP的机器发送http请求,然后服务器收到、处理返回http请求,最后浏览器得到返回内容。

3.浏览器渲染页面的过程?

答:

1.根据HTML结构生成DOM Tree

2.根据CSS生成CSSOM

3.将DOM和CSSOM整合形成RenderTree

4.根据RenderTree开始渲染和展示

5.遇到<script>时,会执行并阻塞渲染

4.css样式和js样式的位置问题 css样式放在head里面好处?

保证先加载css,接着渲染,不然要渲染两次,用户体验会差。 js放在body最下面好处:不会阻塞渲染过程,提高性能优化。 

二、性能优化

性能优化 - 优化策略

             多使用内存、缓存或者其他方法

             减少cpu计算、较少网络

加载资源优化

             1.静态资源的压缩合并

             2.静态资源缓存

             3.使用 cdn 让资源加载更快

             4.使用SSR后端,数据直接输出到 HTML 中

渲染优化:

             1. css 放前面,js放后面

             2. 懒加载 (图片懒加载、下拉加载更多)

             3. 减少 DOM 操作,对DOM查询做缓存

             4. 减少DOM 操作,多个操作尽量合并在一起执行

             5. 事件节流

             6. 尽早执行操作 (如 DOMContentLoaded) 

实例:

一、资源合并 把三个js文件合并成一个文件,一般公司都会有这样子的合并工具。

二、缓存

       1.通过链接名称控制缓存 如src="a1.js"

       2.只有内容改变的时候,链接名称才会改变 如src="a2.js"

三、CDN 使用cdn的速度比你在服务器上使用cdn快,cdn可以网上搜索。

四、使用SSR后端渲染

       1.可以直接后端渲染,输入到前端页面

五、懒加载(就是图片src属性先用其他属性代替,最后通过setAttribute去设置)

<!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>原生js懒加载-不是我不想加载,只是我想慢点加载</title>
    <style>
    *{
        margin: 0;
        padding: 0;
    }
    ul,li{
        list-style: none;
    }
    #main{
        width:1000px;
        margin:0 auto;
    }
    #main ul li{
        width:200px;
        height: 300px;
        border:1px solid #ccc;
        float: left;
        margin-left: 20px;
        margin-top: 20px;
    }
    #main ul li img{
        width: 100%;
        height:100%;
    }
    </style>
</head>
<body>
<div id="main">
        <ul>
            <li><img src="" alt="" data-src="img/01.jpg"></li>
            <li><img src="" alt="" data-src="img/02.jpg"></li>
            <li><img src="" alt="" data-src="img/03.jpg"></li>
            <li><img src="" alt="" data-src="img/04.jpg"></li>
            <li><img src="" alt="" data-src="img/05.jpg"></li>
            <li><img src="" alt="" data-src="img/06.jpg"></li>
            <li><img src="" alt="" data-src="img/07.jpg"></li>
            <li><img src="" alt="" data-src="img/08.jpg"></li>
            <li><img src="" alt="" data-src="img/09.jpg"></li>
            <li><img src="" alt="" data-src="img/10.jpg"></li>
            <li><img src="" alt="" data-src="img/11.jpg"></li>
            <li><img src="" alt="" data-src="img/12.jpg"></li>
            <li><img src="" alt="" data-src="img/13.jpg"></li>
            <li><img src="" alt="" data-src="img/14.jpg"></li>
            <li><img src="" alt="" data-src="img/15.jpg"></li>
            <li><img src="" alt="" data-src="img/16.jpg"></li>
            <li><img src="" alt="" data-src="img/17.jpg"></li>
            <li><img src="" alt="" data-src="img/18.jpg"></li>
            <li><img src="" alt="" data-src="img/19.jpg"></li>
            <li><img src="" alt="" data-src="img/20.jpg"></li>
        </ul>
</div>
<script>
//可视区高度
var insight = document.documentElement.clientHeight;
var oImg = document.querySelectorAll("img");

window.onload =  window.onscroll = function(){
    //卷起高度document.body.scrollTop用于搜狗,document.documentElement.scrollTop用于谷歌
    var oScroll = document.body.scrollTop || document.documentElement.scrollTop;
    for(var i = 0;i < oImg.length;i++){
        //如果图片距离页面顶端高度<滚动条高度+可视区的高度,那么图片显示,反之不显示
        if(oImg[i].offsetTop < oScroll + insight){
            oImg[i].src = oImg[i].getAttribute("data-src");
        }
    }

}






/*
懒加载
在h5的标准下
oDiv.offsetWidth //获取div宽度
oDiv.offsetHeight //获取div高度
oDiv.offsetTop //距离网页上面宽度
oDiv.offsetLeft //距离网页左面宽度
document.documentElement.clientHeight //可视区高度
document.documentElement.clientWidth //可视区宽度

配合 window.onscroll = function(){
document.title = document.body.scrollTop //卷起高度
}去用
*/
</script>
</body>
</html>

六、缓存DOM查询 截图里,第一种每次都要进行DOM查询,第二种先存储DOM查询

七、合并DOM插入,减少DOM操作,将原本插入10次DOM通过frag片段变成1次DOM插入。

八、事件节流 在快速打字操作时候,我们不要去停止示例(截图中是在100毫秒内不要停止),当什么时候停止打字操作了,我们就去停止示例(截图种超出100毫秒时停止),这样子可以可以减少很多cpu的计算次数。

就是说100mm内不打字九停止,100内不停止

三、XSS

XSS夸站请求攻击:插入一段script,获取cookie,获取进入的用户者信息 防止手段: 1,前端替换关键字,例如<为&lt;>为&gt; 2,后端替换

四、XSRF

XSRF跨站请求伪造 解决方法 1,增加验证流程,如指纹验证,密码,短信验证码等

发布了62 篇原创文章 · 获赞 11 · 访问量 8647

猜你喜欢

转载自blog.csdn.net/qq_38588845/article/details/101294934