解决各种浏览器访问不了GitHub问题
确定 ip
进入网址 https://github.com.ipaddress.com
查看 GitHub 的 ip 地址。
确定域名 ip
进入网址 https://fastly.net.ipaddress.com/github.global.ssl.fastly.net
对 SPA 单⻚⾯的理解
SPA( single-page application )仅在 Web ⻚⾯初始化时加载相应的 HTML、JavaScript 和 CSS。⼀旦⻚⾯加载完成,SPA 不会因为⽤户的操作⽽进⾏⻚⾯的重新加载或跳转;取⽽代之的是利⽤路由机制实现 HTML 内容的变换,UI 与⽤户的交互,避免⻚⾯的重新加载。
优点:
- ⽤户体验好、快,内容的改变不需要重新加载整个⻚⾯,避免了不必要的跳转和重复渲染;
- SPA 相对对服务器压⼒⼩;
- 前后端职责分离,架构清晰,前端进⾏交互逻辑,后端负责数据处理。
缺点:
- ⾸屏(初次)加载慢:为实现单⻚ Web 应⽤功能及显示效果,需要在加载⻚⾯的时候将 JavaScript、CSS 统⼀加载,部分⻚⾯按需加载;
- 不利于 SEO:由于所有的内容都在⼀个⻚⾯中动态替换显示,所以在 SEO 上其有着天然的弱势。
高级函数技巧-函数柯里化
维基百科上说道:柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
柯里化的实用性
参数复用
【通用函数】解决了兼容性问题,但同时也会再来,使用的不便利性,不同的应用场景往,要传递很多参数,以达到解决特定问题的目的。有时候应用中,同一种规则可能会反复使用,这就可能会造成代码的重复性。
1 | // 正常正则验证字符串 reg.test(txt) |
Web安全攻防
你知道的 HTTP 请求方式有几种?
HTTPRequestMethod | 说明 |
---|---|
GET | 请求指定的页面信息,并返回实体主体。 |
HEAD | 类似于 get 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被 包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE | 请求服务器删除指定的页面。 |
CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS | 允许客户端查看服务器的性能。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
PATCH | 实体中包含一个表,表中说明与该 URI 所表示的原内容的区别。 |
MOVE | 请求服务器将指定的页面移至另一个网络地址。 |
COPY | 请求服务器将指定的页面拷贝至另一个网络地址。 |
LINK | 请求服务器建立链接关系。 |
UNLINK | 断开链接关系。 |
WRAPPED | 允许客户端发送经过封装的请求。 |
LOCK | 允许用户锁定资源,比如可以再编辑某个资源时将其锁定,以防别人同时 对 其进行编辑。 |
MKCOL | 允许用户创建资源 |
Extension-mothed | 在不改动协议的前提下,可增加另外的方法。 |
防抖和节流
在进行窗口的 resize、scroll,输入框内容校验等操作时,如果事件处理函数调用的频率无限制,会加重浏览器的负担,导致用户体验非常糟糕。此时我们可以采用 debounce(防抖)和 throttle(节流)的方式来减少调用频率,同时又不影响实际效果
函数防抖
函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时
如下,持续触发 scroll 事件时,并不执行 handle 函数,当 1000 毫秒内没有触发 scroll 事件时,才会延时触发 scroll 事件
1 | function debounce(fn, wait) { |
函数节流
Eval
手写一个 Promise
手写一个 Promise
1 | var Promise = new Promise((resolve, reject) => { |
使用 class 手写一个 Promise
1 | //创建一个 Promise 的类 |