web前端学习(二)html学习笔记部分(7)--web存储2

时间:2022-11-18 07:59:25

1.2.20  web存储

1.2.20.1  Web存储-客户端存储数据新方法

  1.两种方式

    1)localStorage - 没有时间限制的数据存储

    2)针对一个sessionStorage - 针对一个session的数据存储

  2.与cookie作对比

    之前,这些都是由cookie完成的,但是cookie不适合大量数据的存储,因为他们由每个对服务器的请求来传递,这使得cookie速率很慢效率也不高。

1.2.20.2  Web存储-localStroage

  localStorage使用没有时间限制,不论多久之后都可以继续使用。

<body>
<script>
    var ta;
    var btn;
    window.onload = function () {
        ta = document.getElementById("ta");
        if (localStorage.text) {
            ta.value = localStorage.text;
        }
        btn = document.getElementById("btn");
        btn.onclick = function () {
            localStorage.text = ta.value;
        }
    /*
    * 上面三行文字如何放在window.onload外面的话会导致出现
    * Cannot set property 'onclick' of null的问题
    * 会出现这样的错误,是因为W3School的写法是浏览器先加载完按钮节点才执行的js,
    * 所以当浏览器自顶向下解析时,找不到onclick绑定的按钮节点,于是报错。
    * 因此,需要把js文件放在底部加载,就会避免该问题。或者放在window.onload中执行
    * window.onload表示页面加载完成后执行的函数,这样JS代码即使放在<head>中也可以完美实现效果。
    * */
    }

</script>
<textarea name="text" id="ta" cols="30" rows="10"></textarea>
<button id="btn">save</button>
</body>
<!--<script src="js/app.js"></script>-->

 

 

1.2.20.3  Web存储-sessionStroage

sessionStorage方法针对一个session进行数据存储。当用户关闭浏览器窗口时session数据将被删除

<script>
    var num = 0;
    var txt;
    var btn;
    window.onload = function(){
        txt = document.getElementById("txt");
        btn = document.getElementById("addbtn");
        if(sessionStorage.num){
            num = sessionStorage.num;
            showNum();
        }else{
            txt.innerText = 0;
        }
        btn.onclick = function(){
            num++;
            sessionStorage.num = num;
            showNum();
        }
    }
    function showNum(){
        txt.innerHTML = num;
    }
</script>
<span id="txt"></span>
<button id="addbtn">Add</button>

 

1.2.21  html5应用缓存与web workers

1.2.21.1  应用缓存与webworkers

  1.什么是web worker

    web worker是运行在后台的JavaScript,独立于其他脚本,不会影响页面性能

  2.方法:

    postMessage() -- 它用于向HTML页面传回一短消息

    terminate()  -- 终止web worker,并释放浏览器/计算机资源

  3.事件:

    onmessage

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/index.js"></script>
<body>
<div id="numDiv"></div>
</body>
</html>

 

index.js

var numDiv;
window.onload = function(){
    numDiv = document.getElementById("numDiv");

    var work = new Worker("js/count.js");
    work.onmessage = function (e) {
        numDiv.innerHTML = e.data;
    }
}

 

count.js

 

var countNum = 0;
function count(){
    postMessage(countNum);
    countNum++;
    setTimeout(count,1000);
}
count();

 

 

添加两个button按钮对其进行处理代码

(注意全局变量不能再在函数中重新定义,否则会出现函数变量值不变的情况。)

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/index.js"></script>
<body>
<div id="numDiv">0</div>
<button id="start">start</button>
<button id="stop">stop</button>
</body>
</html>

 

index.js

var numDiv;
var work = null;

window.onload = function(){
    numDiv = document.getElementById("numDiv");

    document.getElementById("start").onclick = startWorker;
    document.getElementById("stop").onclick = function(){
        alert(work);
        if(work){
            alert(work);
            work.terminate();
            work = null;
        }
    }

}
function startWorker(){
    if(work){
        return;
    }
    work = new Worker("js/count.js");
    work.onmessage = function (e) {
        numDiv.innerHTML = e.data;
    }
    alert(work);
}

 

count.js

var countNum = 0;
function count(){
    postMessage(countNum);
    countNum++;
    setTimeout(count,1000);
}
count();

 

 

 

1.2.21.2  应用缓存与webworkers -- webworks

1.什么事应用程序缓存:

  html5引入了应用程序缓存,这意味着web应用可以进行缓存,并在没有因特网链接的时候可以进行访问

2.应用缓存的优势:

  1)离线浏览 -- 用户可以在应用离线的时候使用它们

  2)速度 -- 已缓存资源加载地更快

  3)减少服务器负载 -- 浏览器只从服务器下载更新过或更改过的资源

3.实现缓存

  如需启动应用程序缓存,请在文档的<html>标签中包含manifest属性,manifest文件的建议的文件扩展名是“.appcache”

4.manifest文件

1)CACHE MANIFEST  -- 在此标题下列出的文件将在首次下载之后进行缓存

2)NETWORK -- 在此标题下列出的文件需要与服务器的连接,且不会被缓存

3)FALLBACK -- 在此标题下列出的文件规定当前页面无法访问时的回退页面(比如404页面)

 

index.html

<!DOCTYPE html>
<html manifest="index.appcache" lang="en" >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="css/style.css" type="text/css">
    <script src="js/index.js"></script>
</head>
<body>
    <h1 class="h1">hello html5</h1>
</body>
</html>

 

index.appcache

CACHE MANIFEST

CACHE:
index.html
css/style.css
js/index.js

css/style.css

.h1{
    background-color: aqua;
}

 

js/index.js

空*(没内容)

 在浏览器关闭内容之后会在本次计算机有缓存下来的内容。

 

在这里出现了以下几个问题,原因是没有正常配置manifest文件的原因,具体可以在以后部署服务器的时候再详细研究

GET http://localhost:8000/favicon.ico net::ERR_FAILED
localhost/:1 Application Cache Error event: Manifest fetch failed (6) http://localhost:8000/webWorks/index.appcache

 

http://localhost:8000/webWorks/