1.1. 浏览器状态同步和路由

1.1.1. 前端路由和服务端路由

工作日常、面试重点、前端架构

前端路由和History API

浏览文境(Browser Context)

浏览器上下文

会话历史(Session History)

会话栈是共享的,可以通过前进后退进行跳转。

Session-Stack

History API

操控浏览器会话历史,也就是控制History API

history.go()

1-前边的页面 forward()

0-当前的页面

-1-历史页面 back()

go.png)

history.pushState(state,title,url)

新增一个状态到会话栈中,但是并不自动跳转新的状态(页面)

state:需要添加的新状态,在会话栈中的变量

title:新页面的标题

url:新页面的地址

pushState.png)

history.replaceState(state,title,url)

替换掉会话栈中的当前状态

在用户付款成功后的付款页面,是没有必要继续放在会话栈中的,所以可以使用这个方法,替换掉。

如果在付款(页面C)前还有加入购物车(页面A),选择种类(页面B)A => B => C ,如果想要将AB都清空掉,可以先go到A,然后在replace掉A,就可以清空会话栈

replaceState.png)

实战服务端路由

实战前端路由(单页面应用)

1.1.2. Session&Cookie&State&单点登录系统

工作日常、面试重点、前端架构

Seesion和Storage

Session代表一次会话

SessionID是这一次会话的唯一标识,由服务端发送

客户端接收到SessionID就是Cookie

登录场景

登录场景

在用户刚登录时是无状态的,发给服务端做验证,验证成功后就创建一个会话记录并发送SessionID,前端浏览器拿到之后用Cookie储存。

跨二级域

如果需要带上Cookie需要额外设置一个Headers(Access-Control-Allow- Credentials)

跨主域

一般很少做这样的事情

需要给Cookie设置额外的标识(SameSite=None;Secure...),不然Cookie传递不过去

Cookie浏览器端存储

Cookie

localStorage写入时需要加try-catch,因为会出错。

SessionStorage只在这次会话中有用。

Storage可以用来在单页面应用中传参,数据共享

Token

Oauth协议:

用户在互联网获取资源的开放(委托形式)授权标准

Oauth

资源所有者为服务的情况:

资源所有者为服务

第三方应用去腾讯拿用户的资源,本质上第三方应用是去找用户拿资源的,但是用户把资源委托给了腾讯,腾讯在检查第三方应用具有获取用户资源的权限后,就会代用户下发给第三方应用许可。

第三方应用拿到许可就会去授权服务器拿令牌。

拿到令牌之后,再去资源服务器拿资源。

摘要算法

将数据运算成一段不可逆的唯一摘要

不重复,不可逆。

摘要算法

Token Table

如何确保Token唯一:

通过随机数,散列算法sha(client_id + rnd + timestamp),查重。

id+随机数+时间戳

单点登录系统

SSO为单点登录平台,比如微信、Github

也就是业务整合

单点登录

通过Oauth实现SSO

Oauth服务器就是将资源所有者和授权服务器绑定在一起,比如腾讯。

Oauth-SSO

1.1.3. SSR和单页面应用

工作日常、面试重点、前端架构

单页面应用(Single Page Application)

SPA优点

用户体验:更加流畅、想用更快,浏览器不会重新加载刷新

架构方面:更容易组件化,前后端分离,前端更容易数据驱动。

生态方面:BaaS/FaaS(只把服务器当作一个服务),服务端渲染。

性能&安全:节省IO,性能有很大的提升;组件化做好之后,容错率会更高。

缺点

CPU开销大(组件vs时间):都使用js渲染页面,浏览器CPU开销会比较大

流量开销大(一次加载多张页面):首次进入需要请求多个组件和页面。其实流量不太重要。

需要好的系统架构:单页面应用需要一个好的架构设计

搜索引擎不友好:搜索引擎是看不到页面内容的。

服务端渲染(Server Side Rendering)

服务端渲染

服务端渲染是没法加事件的,需要客户端重建并加上事件

SSR:服务端渲染函数。

开发一个生成html节点并且管理时间的函数

实现render函数的服务端渲染和客户端渲染能

`render(node,renderAS='dom/html/rehydrate'.path = [])

dom的话就是客户端渲染,渲染成dom🌲

html的话就是服务端渲染,渲染成html字符串

rehydrate是「水合」客户端重建html,加入事件

path指的是渲染函数渲染的节点路径

SSR的优缺点

SSR

TTI:可交互时间,指开始加载到用户可以交互的时间

服务端渲染减少了js的运行时间,只需要「水合」各种事件。客户端开销变小,用户可以更快的使用上,也就是TTI减少。

内网数据组装,是服务端渲染,在内网将组件组装成一个页面再返回给客户端,这样子客户端只请求了一次,减少了请求次数,速度提升是极快的

服务端渲染的话,相对于SPA的SEO是一种解决方案,爬虫是可以拿到部分页面而不是空页面。

© Jasonk0 all right reserved,powered by Gitbook该文件修订时间: 2022-07-21 08:53:32

results matching ""

    No results matching ""