Html5学习第二天

142 阅读6分钟

这是我参与8月更文挑战的第14天,活动详情查看:更文挑战

HTML5

html5是html的第五个版本

html5规定了一些废弃标签,新增了一些标签, 又新增了一些功能

存储

存储是前端仓库的意思

HTML5新增了一个存储对象用于存储数据

每一个网站分配一个

只要浏览器不卸载, 电脑不崩溃,永远存在

它的生命周期是永久

查看:

图片1.png

现在该对象中没有任何内容

既然是一个对象,可以使用对象的语法添加内容:

比如:

localStorage.a = 10;
localStorage[“b”] = 20;

因为该对象中的原型上提供了相应的API, 所以建议我们使用原型上面的方法:

使用方式:

localStorage.setItem(key, value)

key: 表示数据名称

value: 存储的数据 (该方法会默认转为字符串)

比如:

localStorage.setItem(“age”, 11)

图片2.png

解决方案:

在存储的时候先转为字符串, 提取的时候再转为原类型

本地存储API

  • 存储数据:

localStorage.setItem(key, value)

key: 存储的数据名称

value: 要存储的数据

该方法会默认转为字符串

  • 获取数据:

localStorage.getItem(key)

key: 要获取的数据名称

返回值:字符串

  • 删除某一项:

localStorage.removeItem(key)

key:要删除的数据名称

  • 删除全部:

localStorage.clear()

会话存储

除了本地存储还有一个对象叫做会话存储

对象名称: sessionStorage

与本地存储的区别就是生命周期

本地存储的生命周期是永久

会话存储的生命周期是从页面打开到页面关闭

查看:

图片3.png

服务器

简单来说就是可提供的机器

这个服务器可以租,可以买,可以下载一个模拟的软件

我们选择自己写的nodejs

如果想要使用nodejs, 必须先安装node.exe程序

平时我们在浏览器的输入栏中查看的地址栏: file:///……

当有了服务器之后, 上传到服务器,就必须通过http请求访问页面, 此时查看地址栏 http:// ……

HTTP协议

超文本传输协议:里面规定了前端发送请求后端如何解析, 后端返回数据前端如何接收。

有了服务器之后, 我们就可以通过http来发送请求,请求服务器中的资源。

在很久以前,浏览器的目的只是为了渲染页面,静态页面

此时面临一个问题,前端发送一个请求,后端如何解析, 后端返回数据,前端如何接收。

于是http协议就出现了。

比如: 前端想要从服务器上请求一张图片,前端就必须按照http协议的规定发送请求,后端解析并返回数据的时候也要按照http协议,按照正确格式返回数据。

还有另外一个问题,服务器的承载(连接)是有限的,假如服务器的承载上线是10, 此时前端发送过来一个请求,并且是有状态(持久连接),服务器最多可以服务的连接数量是10个,在当时浏览器只是为了渲染静态页面,所以没有必要是持久连接,所以特意给http协议设定成为五无状态(没有持久连接)

连接过程:

浏览器发送http请求,请求到服务器,服务器接受响应,返回数据,断开连接,浏览器接受数据,并渲染页面。

由于断开了连接, 所以此时服务器可服务的连接数据远大于有状态(持久连接)

服务器比较重要的一方面提供服务器环境,前端某些时候需要服务器环境支持

比如:多线程,事件推送,ajax, canvas的相关功能

多线程

js是单线程, 当js在执行的时候,页面是停止渲染

当上面的函数在执行 (在大量计算的时候), 此时用户点击页面将得不到相应(假死状态)

我们希望当js在大量计算的时候,不要阻塞线程

H5提供了一个Worker函数,可以开辟一个新的线程,用于计算

 

使用方式:

1 将要计算的代码提取出来放入一个js文件中

2 初始化Worker函数

举例:

var worker = new Worker("comouted.js");

结果:

图片4.png

postMessage

开辟的额外的线程用于计算, 计算的结果可以通过postMessage向主线程推送

onmessage

额外的线程将计算的结果推送过来了, 主线程可以通过onmessage来接受数据

WebSql

前端数据库,本来属于HTML5规范, 后来又没有。

openDatabase

它是一个函数,是window的属性

作用: 打开或者创建数据库

使用方式:

openDatabase(dbname, version, descript, size)

dbvname:  数据库名称

version: 版本号

descript: 描述

size: 大小

举例:

// 创建数据库
openDatabase("数据库", 1, "这是测试数据库", 1024 * 1024);

观察数据库:

图片5.png

执行代码:openDatabase("数据库", 1, "这是测试数据库", 1024 * 1024);

图片6.png

执行openDatabase方法之后会返回一个数据库库对象:

查看:

图片7.png

transaction

该方法接受一个参数是回调函数, 回调函数中的参数就是事物对象

SQLTransaction

通过ta调用SQLTransction原型上的方法 executeSql来执行sql语句

使用方式

ta.executeSql(sql, [], successcallback, failedcallback)

sql: sql语句

[]: 数组, 替代数组

successcallback: 成功时候的回调函数

failedcallback: 失败时候的回到函数

事件推送

正常情况下只能够从浏览器端发送消息到服务器端,  服务器接受并返回数据,关闭连接,之后服务器想 要主动发行信息到浏览器端,无法实现,

于是HTML5,提供了一个叫做 EvetnSource的函数 用于主动向前端推送消息

图片8.png

初始化

和worker一样, 需要初始化

并且也服务器环境支持

使用方式:

var es = new EventSource(path)

path: 接口

查看:

图片9.png

history

history.forward

该方法会加载历史记录列表中的下一个URL

调用该方法等价于点击了前进按钮或者history.go(1)

history.back

该方法会加载历史记录列表中的前一个URL

调用该方法等价于点击了后退按钮获取或者history.go(-1)

pushState

作用: 用于添加新的历史记录

使用方式:

history.pushState(obj, title, url)

obj: 数据对象

title: 新的网页标题 (一般省略)

url: 新的网页url

举例:

// 添加新的历史记录
history.pushState({username: "老王"}, null, "index.html#aaa");

replaceState

作用: 替换当前历史记录

使用方式:

history.replaceState(obj, title, url)

obj: 数据对象

title: 网页标题

url:  新的URL

pushState和replaceState的区别: pushState是添加新的历史记录, replaceState是替换当前历史记录

举例:

// 替换当前历史记录
history.replaceState({username: "老张"}, null, "index.html#ccc")