浏览器和服务器的交互
元素位置发生变化时,后两个阶段需要重新开始,就是–页面重排–
只改变样式,不改变布局,就是页面–重绘–
应避免重排
渲染引擎解析和输出是逐行的,尽量不在 html 显示内容中插入 js 脚本,否则会足阻塞页面结构的渲染
一个测是浏览器性能的网站
Chrome (v8) 基于字节码
Firefox (Ion)
Safari (jsc)
css 权重方式计算的
!important 》 内联样式 》 id 选择器 》 类选择器 》元素选择器
cache-control
etag 304 200
last-modified
frames 就可以查看缓存的列表内容
可以在 meta 中 expires 或者 cache-control 来 设置缓存,同时 设置则 cache 生效
h5 的一种本地缓存方案主要用于浏览器端保存较大的数据,ajax 等单个域名下不同的浏览器是有大小限制的可以用 iframe 的方式使用多个域名突破单个页面下的最大限制
浏览器关闭时自动清空
为了辨别用户身份由键、值、域、过期时间、大小组成一般保存用户网站认证信息
浏览器端用于存储较大量数据的缓存机制
客户端存储大量结构化数据并且能在这些数据上使用索引进行高性能检索的 api
允许浏览器通过 manifest 配置文件在本地有选择的存储 js、css、等静态资源文件
保存每个 ServiceWorker 声明的 Cache 对象
ServiceWorker 和 WebWorker 都是在浏览器后台作为一个独立的线程运行的 js 脚本可以为浏览器提供并行计算和数据处理能力
通过 message/postMessage 方法在页面之间进行通信,不能与前端界面进行交互
生命周期
chrome://version
chrome://inspect/ //查看链接设备调试信息
chrome://dowloads //浏览器下载管理
调试工具找到问题
周五
http 请求头结构
请求类型
http 响应头结构
http1.1 长链接是通过请求头中 keep-alive 头域信息来控制的
协议扩展切换在请求头部域消息中包含 Upgrade 头让客户端通过头部标识令服务器知道它支持其他备用通信协议服务器根据客户端请求的其他协议进行切换
websocket 通过 http 方式来建立然后通知服务器切换
头部添加
Connection:Upgrade
Upgrade:websocket
SPDY 协议传输支持多路复用和服务器推送技术压缩了 http 头部减小了请求大小强制使用 ssl 传输协议
完全采用二进制格式来传输传输的基本单位为帧 Frame(具有固定格式和长度的二进制数据包) - 类型 Type - 长度 Length - 标记 Flages - 流标识 Stream - Frame Payload 帧有效载荷,一帧能携带的内容数据长度
多个帧形成了传输网络流
http2 是通过流式传输的
tcp 复用传输发生在传输层
keep-alive 链接复用是在应用层
支持传输流的优先级和流量控制机制
XSS Cross Site Script 跨站脚本攻击
CSRF Cross-site Request Forgery 跨站请求伪造
sql 注入攻击
请求劫持与 HTTPS
https 协议通信过程
https 协议是通过加入 SSL secure sockets layer 加密默认使用 443 端口进行传输通过加密算法得到密钥对
https 通信建立
X-XSS-Protection
主要是用来防止浏览器中的反射性 XSS 问题的发生
Strict-Transport-Security
是一种用来配置浏览器和服务器之间安全通信机制
主要用来防止中间者攻击
强制所有通信都使用https
Content-Security-Policy
是一种由开发者定义的安全策略性声明
通过csp所约束的规则
浏览器只可以加载指定可信的域名来源的内容
Access-Control-Allow-Origin
决定那些网站可以访问当前服务器资源的位置
通过定义一个通配符或域名来决定是单一网站还是所有网站可以访问服务器的资源
常常作为跨域共享设置的一种实现方式
webSocket通信
一种典型的实时通信协议
双向数据实时通信
DDP协议
分布式数据协议
客户端与服务端的实时通信协议
使用json的数据格式在客户端和浏览器之间进行数据传输通信
RESTful数据协议规范
representational state transfer 表述性状态转化
定义了以中网络应用软件之间的架构关系,并提出了一套与之对应的网络之间交互调用的规则
每个资源都有一个与之对应的uri地址
资源本身都是方法调用的目标
是一种软件架构之间交互调用数据的协议风格规范
它建议以一种通用的方式来定义和管理数据交互接口
结合http的固有方式来表征资源的状态变化描述
而不是通过动词加名词的方式来设计
Native 交互协议
Hybrid app :是在native app应用的基础上结合webapp应用所形成的
1. native 应用会提前向移动端系统注册scheme协议
2. webview会将uri的志愿交给native app
3. native 将请求转发给系统并解析
4. 执行native代码拉起系统的调用
5. 这样就完成了html中js对native的调用了
JS Bridge
DOCTYPE
html
web语义化标签
在html结构恰当位置使用语义标签
使页面具有良好的结构
AMP HTML
流动网页提速 Accelerated Mobile Pages
提升页面资源载入效率的html提议规范
- 使用严格受限的高效html标签以及使用静态网页缓存技术来提高网络访问静态资源的性能和用户体验
HTML Web Component
css 统一
- reset
- normalize
- neat
前端MVC模式
将dom交互的内容分为数据模型、视图和事件控制函数
controller用于根据前端路由条件来调用不同的model给view渲染不同的数据内容
前端MVP模式
用户在进行dom修改操作诗将拖过view上的行为触发
然后将修改通知给presenter里完成后面的model修改和其他view的更新
preseer和view的擦欧总绑定通常是双向的
前端MV VM模式
是一个自动化的mvp框架
使用viewmodel代替了presenter
数据model的调用和模版内容的渲染不需要我们主动操作
是由viewmodel来自动触发完成
任何用户的操作也都是通过viewmodel的改变来驱动的
数据变更检测
手动触发绑定原理
脏检测机制原理
前端数据对象劫持
ECMAScript 6 Proxy
自动双向数据绑定,将页面逻辑实现的核心转移到数据层的修改操作上,而不是在页面中直接操作dom
实现原理
创建原始页面或组件的Virtual DOm结构
用户操作后需要进行dom更新时
与之前的结构进行对比
把差异化的virtual dom根据特定的规则渲染到页面上
MNV* 模式
调用原生控件或时间绑定来生成应用程序的交互模式称为前端的MNV*开发模式
Model-NativeView*
通用规范
文档类型
html
head内容
块极元素一般另起一行,行内元素根据情况换行
css 规范
命名约定,一般单词中画线组成
Web Component 组件化
Polymer 框架的设计主要分成三个层次
- 基础层 platform.js 基本实现库
- 基础层一般都是本地浏览器的api
- 核心层 polymer.js
- 可以理解为实现基础层的封装库
- 元素层
- 建立在核心层之上的ui组件或非ui组件
virtual dom 的组件化方案
改善mvvm的dom性能
自动化构建原理
写入生成目录
优化
Performance Timing Api 描述了页面资源从加载到解析各个阶段的执行关键点记录
Profile
资源加载时序图
页面埋点
桌面浏览器前端优化策略
避免使用css import引用加载css
页面渲染类
移动端优化
资源预加载
缓存类
静态资源离线
图片
图片懒加载
脚本类
用户访问统计
用户转化率 = 通过该页面注册的用户数/页面PV
导流转化率 = 通过源页面导入的页面访问PV/源页面PV