第六届360前端星计划学习笔记

426 阅读4分钟

2020.4.8

一、HTML与前端

二、了解CSS

1. CSS工作机制

QS: CSS加载或者解析过程会产生阻塞吗?JS呢?

2. 页面中使用css的三种方法:

  • 外联 <link>
  • 嵌入 <style>
  • 内联 <p style = "">

PS: link 与@import的区别?

  1. linkHTML方式, @import是CSS方式
  2. link最大限度支持并行下载,@import过多嵌套导致串行下载,出现FOUC(文档样式短暂失效)
  3. link可以通过rel="alternate stylesheet"指定候选样式
  4. 浏览器对link支持早于@import,可以使用@import对老浏览器隐藏样式
  5. @import必须在样式规则之前,可以在css文件中引用其他文件

3. CSS选择器

  • 通配选择器 *
  • 标签选择器 a p input
  • id选择器 #logo
  • 类选择器 .container
  • 属性选择器 [disable]
  • 属性值 input[type="password"] a[href^="#"] a[href$=".jpg"]
  • 伪类选择器 a:link li:forst-child
  • 组合器
    • 直接组合 AB
    • 后代组合 A B
    • 亲子组合 A>B
  • 选择器组 h1,h2,h3

4. 颜色

rgb(red, green,blue)

rgba(red, green,blue,1)

5. font字体

-family

html{
	font-family:Optima,serif;
}
  • 字体列表最后写上通用字体族
  • 英文字体放中文前

style weight size/heighth family

三、深入CSS

1. 样式优先级

!important >内联> id > 类 | 伪类 > 元素选择器 > 继承 | *

标签选择器 计算权重公式
继承或者 * 0,0,0,0
元素(标签选择器) 0,0,0,1
类,伪类 0,0,1,0
ID 0,1,0,0
行内样式 style="" 1,0,0,0
!important ∞ 无穷大

2. 布局

布局基础技术

盒模型

四条边框颜色不同时

块级和行级

块级元素有:div ul ol li dl dt dd h1 h2 h3 h4… p

  • 行内元素有:a b span img input select strong
  • 空元素:<br> <hr> <img> <input> <link> <meta>

3. 常规流

根元素、浮动、绝对定位会脱离常规流

行级上下文IFC

  • 只包含行级盒子的容器回创建IFC
  • IFC内排版规则
    • 盒子在一行内水平摆放
    • 一行放不下时换行
    • text-align决定水平方向
    • vertical-align决定行内垂直对齐
    • 避开float元素

块级上下文BFC

  • 会产生BFC的情况:根元素、浮动、绝对定位、inline-block、Flex和Grid子项、overflow不是visible的块盒

  • BFC内排版规则

    • 盒子从上往下
    • 垂直margin合并
    • BFC内的margin不会和外面的合并
    • BFC不会和浮动元素重叠

Flex Box

  • 新型排版上下文
  • 可以控制盒子的摆放方向、顺序、宽高、水平垂直对齐、换行

Grid

  • 划分网格布局

四、CSS进阶

1. 变形

Transform

translate 平移 rotate 旋转

scale 缩放 skew 倾斜

  • 本身占有的空间仍然保留,不会对其他元素的布局产生影响
  • 属性值的前后顺序不一样,展现的效果不同
  • 3D变换:perspective属性设置视角,设置人眼与屏幕的距离

2. 动画

Transition

transition-property 元素的变化的CSS属性

transition-duration 持续时间

transition-timing-function 快慢速度

transition-delay 延迟时间

Animation

通过对元素进行定义关键帧的方式,实现更加复杂的动画效果。

animation-name 名字

animation-duration 持续时间

animation-timing-function 快慢速度

animation-delay 延迟时间

animation-iteration-count 播放次数

animation-direction 动画播放方向(正向、逆向、正反交替)

@keyframes down{
  from{
    margin-top:0;
    ocpacity:1;
  }
  50%{
    margin-top:0.5em;
    ocpacity:0.3;
  }
  to{
    margin-top:0;
    ocpacity:1;
  }
}

.dom{
	animation:down 1.5s ease infinite;
}

3. 响应式设计

设置视口vieport

<meta name="viewport" content="width=device-width, initial-scale=1.0" />

图片尺寸设置

img{
	max-width:100%;
}

background-size

cover 背景图片把容器覆盖,图片比例会变(装饰性)

contain 缩放到容器内,保证图片完整显示(商品类)

media query

@media screen and(min-width:480px){
	.dom{
	}
}
// width/height,

rem

计算的时候总是根据html的font-size来计算大小。配合媒体查询使用。

2020.4.9

一、JavaScript入门到放弃

1. 注重js、css的使用场景区别,各司其职

2. 复杂UI组件的设计

  • 步骤一:结构设计
  • 步骤二:API设计
  • 步骤三:具体实现

3. 插件、模版化,抽象出组件模型

4. 运用过程抽象的技巧来抽象并优化局部API

二、WEB标准:前端的原力

Web标准是Web基础、运行和发展的一系列标准总称

1. Web标准介绍

HTTP 相关内容
HTTP/0.9 草稿版
HTTP/1.0 标准版
HTTP/1.1 对http1.0的改进
HTTP/2.0 目前主流的协议

BOM:浏览器对象模型

  • window对象:网页中所有的
  • location对象:浏览器导航系统
  • navigator对象:浏览器信息
  • screen对象
  • history对象

三、前端常用的HTTP知识

1.请求类型

方法 作用
GET 发送一个请求来取得服务器上的某一资源
POST 向URL指定的资源提交数据或附加新的数据
PUT 跟POST方法很像,也是想服务器提交数据。但是,它们之间有不同。PUT指定了资源在服务器上的位置,而POST没有
HEAD 只请求页面的首部
DELETE 删除服务器上的某资源
OPTIONS 它用于获取当前URL所支持的方法。如果请求成功,会有一个Allow的头包含类似“GET,POST”这样的信息
PATCH 更新部分内容

2. 常见状态码

状态码 描述
101 切换协议
200 成功
206 返回部分内容
301 请求的网页已永久移动到新位置,如:资源更换路径或改名
302 临时性重定向,如:当前请求需要登录,临时跳转到登录页面
304 自从上次请求后,请求的网页未修改过。
400 错误请求
403 拒绝执行,如:无对应访问权限
404 资源找不到
413 请求实体过大
500 服务端内部错误
502 作为网关或代理服务器时,上游服务器异常
504 作为网关或代理服务器时,上游服务器处理超时

3. URL

http://<host>:<port>/<path>?<query>#<frag>

HEADER

  • 通用
  • 请求
  • 响应
  • 实体
  • 扩展(自定义)
    • X-cache

4. COOKIE与SESSION

HTTP协议是无状态协议,每一次请求结束即断开连接,下一次请求时候服务器又不知道是谁了。所以就出现了cookie的第一个特点:随请求发送,服务器通过解析请求当中的cookie,便能直到请求源相关的信息。

又因为随请求发送,便出现第二个特点:容量有限,过大的数据量会为传输造成不必要的开销,所以cookie的容量必须进行限制。

产生

  1. 在浏览器访问服务器时由服务器返回一个Set-Cookie响应头,当浏览器解析这个响应头时设置cookie

  2. 浏览器设置 document.cookie ='',在浏览器端的cookie截图中可以看到cookie的不同属性值,所以js具体操作cookie的格式如下:
    document.cookie="[key=value]; [expires=date]; [domain=domain]; [path=path]; [secure]"

  • key设置的是cookie的键,value设置的是cookie的值。
  • expires 设置cookie的生存时间,默认为当前浏览器会话(Session)。当设置一个时间时,每次访问浏览器会用当前时间和cookie的expries做比对,如果过期cookie则会被删除。设置格式为GMT时间格式。
  • domain在浏览器读取cookie的时候只有当cookie的domain和浏览器当前 的域名匹配才能读取到。
  • pathpath路径和domain功能类似,只是path的范围更小。path控制cookie在当前域名的路径,只有路径相匹配cookie才能被读取到
  • HttpOnly安全属性。防止客户端脚本通过 document.cookie 等方式访问 Cookie,从而防止XSS攻击。
  • Secure只有在HTTPS时候才会发送。
  • SameSite可以让 Cookie在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)。
    • Strict 仅允许一方请求携带 Cookie,即浏览器将只发送相同站点请求的 Cookie,即当前网页 URL 与请求目标 URL 完全一致。
    • Lax 允许部分第三方请求携带 Cookie
    • None 无论是否跨站都会发送 Cookie
    • 之前默认是 None 的,Chrome80 后默认是 Lax。
      关于samesite属性,推荐一篇写的很好的文章:传送门

关键词

特点 备注
有效期 默认浏览器关闭就消失,可以设置HTTP头信息中的cache-control属性的max-age值,或者修改HTTP头信息中的expires属性的值来延长有效期。
作用域 通过文档源和文档路径来确定的。该作用域可以通过cookie的path和domain属性配置。
数目和大小的限制 每个web服务器(域名)保存的cookie数不能超过50个,每个cookie保存的数据不能超过4KB。
过期设置 cookie快要过期时,可以重新设置而不是删除
缺陷 随请求发送,增加网络流量;容量小;只能储存字符串;有潜在的安全问题。

XSS漏洞盗取cookie,设置http only
CSRF漏洞,设置token/samesite

SESSION为服务端对应cookie的概念,在实际应用当中基于cookie存放用户信息。

5. 性能优化

keep-alive

  • http1.0原本不支持,后面扩充了Connection:Keep-Alive
  • http1.1默认支持

减小传输大小

  • 对传输过程中的内容进行压缩
  • 主要针对文本资源

缓存

  • 首次请求无缓存,都返回200,对能缓存的资源进行缓存
  • 第二次请求部分能能命中缓存的内容返回304,不返回实体
  • ETag是根据类似于编码的一个对比,Last-Modified是对比时间

6.http2/3

HTTP2

以下总结转自链接

  • 二进制传输

加强性能的核心点在于此。在之前的 HTTP 版本中通过文本的方式传输数据。在 HTTP/2 中引入了新的编码机制,所有传输的数据都会被分割,并采用二进制格式编码。

  • 多路复用

在 HTTP/2 中,有两个非常重要的概念,分别是帧(frame)和流(stream)。 帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。 多路复用,就是在一个 TCP 连接中可以存在多条流。换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能。

  • 头部压缩

在 HTTP/1 中,我们使用文本的形式传输 header,在 header 携带 cookie 的情况下,可能每次都需要重复传输几百到几千的字节。 在 HTTP / 2中,使用了 HPACK 压缩格式对传输的 header 进行编码,减少了 header 的大小。并在两端维护了索引表,用于记录出现过的 header ,后面在传输过程中就可以传输已经记录过的 header 的键名,对端收到数据后就可以通过键名找到对应的值。

  • server push

在 HTTP/2 中,服务端可以在客户端某个请求后,主动推送其他资源。 可以想象以下情况,某些资源客户端是一定会请求的,这时就可以采取服务端 push 的技术,提前给客户端推送必要的资源,这样就可以相对减少一点延迟时间。当然在浏览器兼容的情况下你也可以使用 prefetch

HTTP3

  • 基于QUIC协议

7. http抓包工具

  • Wireshark
  • Fiddler
  • Firebug for FireFox
  • Chrome开发者工具
  • IE8+ 自带工具

8. 推荐书籍

《图解HTTP》 《HTTP权威指南》 《Web性能权威指南》

2020.4.10

一、正则表达式的三个应用场景

1. 创建

  • 使用字面量创建
    • 简单方便、不需考虑二次转义
    • 子内容无法重用、过长
  • 使用RegExp构造函数
    • 子内容可以重复使用
    • 二次转义会产生bug

2. 用法

RegExp.prototype.test()

  • 输入字符串类型
  • 输出true或false
  • RegExp.prototype.source:返回正则表达式模式文本的字符串
  • RegExp.prototype.flags:返回修饰符字符串,按字母升序排序

RegExp.prototype.exec()String.prototype.match()

  • exec每次只返回一个结果
  • match返回所有结果
  • match返回的数据格式不固定,建议使用exec

RegExp.prototype.lastIndex()

  • 最后一次匹配成功的位置
  • 自己不会重置,上一次匹配失败之后才会重置为0

可以结合字符串的replace()search()split()方法使用。其中replace()方法正则修饰符不加g表示只匹配一个。

3. 场景一:数值判断

  • [] 字符集
  • + 限定,匹配一个或多个
  • ^ 开始
  • $ 结束
  • () 子表达式
  • 0-1个
  • . 换行符之外的任意字符
  • (?:) 非捕获组
  • * 限定,0个或多个
  • | 创建分支
  • i 修饰符,忽略大小写
  • {n} 限定,重复n次可为{n,m}
  • $n 表示第N个捕获组

4. 场景二:颜色

5. 场景三:URL

二、NODE基础

1. 与JavaScript的区别

  • 基于异步I/O接口
  • 基于node_modules和require模块依赖
  • 提供C++C++addon API 与系统交互

扩展阅读

2. 模块

  • 内置模块http,fs,path等
  • 文件模块var test = require('./test.js')

3. NPM

// 依赖的键值对信息
"dependencies": {
    "axios": "^0.19.2",    // ^ 表示运行中版本和小版本的更新
    "cookies":"~0.7.0"    // ~ 接受小版本的更新
  },

存在问题:速度方面、安全方面

4. NODE 开发

简单的原理

const http = require('http');
const server = http.createServer((req, res) => {
	res.send('ok')
})
server.listen(8080)

使用框架

Koa Github

const Koa = require('koa')
const app = new Koa()

// response
app.use(() => {
	//...
})
app.listen(8080)

Think.js

|--- development.js   //开发环境下的入口文件
|--- nginx.conf  //nginx 配置文件
|--- package.json
|--- pm2.json //pm2 配置文件
|--- production.js //生产环境下的入口文件
|--- README.md
|--- src
| |--- bootstrap  //启动自动执行目录 
| | |--- master.js //Master 进程下自动执行
| | |--- worker.js //Worker 进程下自动执行
| |--- config  //配置文件目录
| | |--- adapter.js  // adapter 配置文件 
| | |--- config.js  // 默认配置文件 
| | |--- config.production.js  //生产环境下的默认配置文件,和 config.js 合并 
| | |--- extend.js  //extend 配置文件 
| | |--- middleware.js //middleware 配置文件 
| | |--- router.js //自定义路由配置文件
| |--- controller  //控制器目录 
| | |--- base.js
| | |--- index.js
| |--- logic //logic 目录
| | |--- index.js
| |--- model //模型目录
| | |--- index.js
|--- view  //模板目录
| |--- index_index.html

5. API 开发

RESTful API

拓展阅读

  • 每个API对应一种资源或资源集合
  • 使用HTTP method来表示对资源的动作
  • 使用HTTP status code表示对资源操作的结果

2020.4.11

一、前端工程化浅析

前端工程化的目标是为了提效。

规范化

  • 版本管理器开发流程规范
  • 编写规范

模块化

  • 只需关注逻辑问题,无需关注变量相互污染的问题

组件化

  • 组件化和模块化的思想都在于分治

自动化

  • 前端工程化的核心
  • 自动化构建

二、前端动画

1. JS动画优缺点

  • 优点:灵活、可控、性能
  • 缺点:易用性

三、前端性能优化

1. RAIL模型

用户为中心的性能模型,每个网络应用都有与其生命周期有关的是四个方面,而且这些方面以不同的方式影响性能。

延迟与用户反映

  • 响应 100ms内响应用户输入
  • 动画 10ms一帧
  • 空闲时间 空闲时间最大化
  • 加载 5s呈现交互内容

2. 评估性能工具

  • lighthouse
  • WebPageTest
  • Chrome DevTools

3. 浏览器渲染场景

4. 浏览器渲染流程

  • JavaScript 实现动画 操作DOM
  • Style (Render Tree)
  • Layout (盒模型,确切位置和大小)
  • Paint (珊格化)
  • Composite (渲染层合并)

5. 性能优化方向

  • 加载
    • 资源效率优化
    • 图片优化
    • 字体优化
    • 关键渲染路径优化
  • 渲染
    • JavaScript执行优化
    • 避免大型复杂的布局
    • 渲染层合并

2020.4.12

css优化方向

  • 选择器优化,匹配过程从后往前。推荐不要写太多的层级。BEM命名方式。
  • 页面渲染方式,渲染性能。

一、小程序

1. 简介

小程序解决了什么问题?

在H5和APP之间找到了相对平衡点。

小程序技术栈?

  • HTML/CSS/JavaScript
  • NodeJs
  • 移动适配
  • HTTP协议/Https
  • OAuth2
  • GIT

主流的小程序平台

类似小程序的平台

2. 小程序技术架构

WXML

  • 本质是html模版
  • 有特定的标签
  • 接管一些简单的逻辑判断 wx:if
  • js不直接操作DOM,只负责数据

WXSS

  • 提供rpx单位 屏幕宽度和750的比值
  • 精简的css
  • 提供全局和局部的css

JS

  • 负责逻辑交互
  • APP、Page、Component三个构造函数
  • 可调用系统API

双线程渲染模型

小程序生命周期

3. 小程序发布

4. 小程序发展

二、WEB点播直播

  • 文件扩展名 ≈ 媒体封装格式(媒体容器类型)

  • 媒体封装格式 ≠ 音视频编码格式(使用了谁家的编码器)

  • 文件内容:

    • 头信息(格式、时长、帧率、码率、分辨率...)
    • 索引信息
    • 视频数据
    • 音频数据
    • 附加增强数据...
  • 播放器原理

    • 解协议(加载数据)
    • 解封装(解复用)
    • 解码
    • 渲染

三、代码

1. 代码规范

ESlint规范:yarn global add eslint

链接

2. 格式

3. 流程化

四、技术翻译