浏览器相关JS

在浏览器状态下的JS

BOM:对于浏览器本身功能区域的相关操作

DOM:对于浏览器视窗内HTML文本的相关操作

ECMAScript:基础逻辑、数据处理

BOM

location

// 属性
location.href = "https://www.baidu.com/search?class=browser#comments"

location.protocol   // https
location.host       // www.baidu.com
location.origin     // https://www.baidu.com:8080
location.port       // 8080
location.pathname   // /search
location.search     // ?class=browser
location.hash       // #comments

// 记忆
"protocol//host:port/pathname?search#hash"

// 方法
location.assign()
location.replace()
location.reload()

话题方向

  • location 本身的 api 操作
  • 路由跳转:history or hash 模式
  • url 处理:正则

history
history.state
history.pushState()     // 跳转到指定状态
history.replaceState()  // 替换当前状态

history.pushState 不会触发浏览器页面的刷新,它只是改变了当前 url 的状态,会刷新页面的是改变了 location.href。

所以它也适合拿来做路由跳转。

navigator:浏览器信息大集合
navigator.userAgent // 就是一个字符串,获取当前用户相关基础信息

话题方向

  • UA读取信息可以做什么?数据采集、流量监控、浏览器兼容性优化......
  • 剪切板、键盘?如何剪切板,监听用户键盘输入

screen ⭐

话题方向

  • 判断区域大小
// 全局
window.innerHeight

// 文本
document.documentElement.clientHeight
document.body.clientHeight

// 网页
document.body.offsetHeight

// 定位
document.body.scrollTo

Event

最开始的时候有两套触发机制

  1. 冒泡,是微软发明的。p => div => body => HTML => document
  2. 捕获,是网景发明的。documet => HTML => body => div > p
<div id="app" >
  <p id="dom">Click</p>
</div>

el.addEventListener(event, function, useCapture) // useCapture 默认 - false

话题方向

  1. 如何阻止事件的传播,无论向上还是向下都是阻止的。但无法阻止默认事件
    event.stopProgation()
  2. 如何阻止默认事件
    event.preventDefault()
  3. 如何阻止相同节点绑定多个同类事件 => 兼容性问题 & 性能问题
    event.stopImmediatePropagation()
  4. 手写,实现一个多浏览器兼容的事件绑定
    attchEvent vs addEventListener区别:
        // a. 传参,attachEvent对于事件名需要加上一个‘on’
        // b. 执行顺序, attachEvent - 后绑定先执行;addEventListener - 先绑定先执行
        // c. 解绑 detachEvent vs removeEventListener
        // d. 阻断 e.cancelBubble = true vs e.stopPropagation()
        // e. 阻断默认事件 e.returnValue vs e.preventDefault
  5. 性能 - 手写事件代理

网络层

// 实例化
const xhr = new XMLHttpRequest()

// 初始化连接
xhr.open(method, url, async)

// send发送请求
xhr.send(data) // data - encodeURIComponent

// 接收
xhr.readyStatus
// 0 - 尚未调用open方法
// 1 - 已经调用了open
// 2 - 已经send
// 3 - 已经收到请求的返回数据了
// 4 - 请求已完成
xhr.onreadystatechange = () => {
    if (xhr.readyStatus === 4) {
        if (xhr.status >= 200 && xhr.status < 300 || xhr.status == 304) {
            console.log('success', xhr.responseText)
        }
    }
}

// 超时时间
xhr.timeout = 1000

xhr.ontimeout = () => {
    // 超时操作
}

话题方向

  • RESTFUL:GET POST PUT DELETE 操作意义
  • 跨域:CORS、JSONP。只存在浏览器中,因为跨域是浏览器设置的。img、iframe、只能用get请求。
  • 状态码、特别注意3xx,他是浏览器缓存:强缓存+协商缓存

浏览器执行

=> URL解析获取ip地址

=> 获取到具体的节点(服务器,CDN,云上)

=> 文档加载(JS、CSS、Document等)

=> 文件解析(DOM、CSSOM、JS逻辑)

=> render tree:DOM和CSSOM结合生成

=> layout tree:结合JS逻辑

=> paint:渲染出来

话题方向

  • 重排,减少 layout tree
  • 重绘,减少 paint
  • 避免反复重排、减少重绘。重排是可以避免的,但重绘很难减少。如 disply: none 和 visibility:hidden 

本文阐述的知识点主要出于代码和应用之间---浏览器是如何把我们的代码渲染出来的。↓↓↓

第一层:js => module => system

第二层:browser

第三层:page => application

 

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值