浏览器-知识点总结

拦截浏览器后退方法以及独家干货知识点 JavaScript Promise和异步编程:Promise是一种用于处理异步操作的技术,它提供了一种更简洁和可读性更好的方式来处理异步代码。使用Promise,您可以更好地控制异步操作的流程,并处理成功和失败的情况。Promise和异步编程:Promise是一种用于处理异步操作的技术,它提供了一种更简洁和可读性更好的方式来处理异步代码。使用Promise,您可以更好地控制异步操作的流程,并处理成功和失败的情况。在JavaScript中,我们经常需要控制浏览器的后退功能,以便在特定的情况下执行自定义操作。 阅读详情

浏览器的内存模型

  • 浏览器进程(主进程)
  • 网络进程(子进程)
  • 渲染进程(子进程)
    每打开一个新的标签页 都会由主进程开启子进程 其中渲染进程开启渲染主线程 在其中执行所有的前端代码

渲染主线程

浏览器内最繁忙的线程 里面的执行机制——事件循环在这里插入图片描述

事件循环

先微后宏

  • 微任务
    process.nextTick(与普通微任务有区别,在微任务队列执行之前执行)
    new Promise().then(回调)等。
  • 宏仁务
    web worker
    setTimeout
    setInterval
    setImmediate
    script(整体代码)
    I/O 操作等

现在的新说法:因为任务的类型越来越多 同样的任务需要放在同一个队列 所以宏仁务的概念改成了队列优先级:(保留微任务的说法)微任务>交互队列(点击事件)>延时队列(定/延时器)

URL到整个页面加载完毕显示在屏幕上的整个流程

主要是2个过程:网络(获取HTML文档)+渲染(解析HTML文档)

网络的过程:

输入网址
DNS解析
客户端与服务端3次握手建立TCP连接
客户端发送HTTP请求
服务器处理并响应请求
客户端获取到HTML文档

当网络线程获取了HTML文档后,会产生1个渲染任务,传递到渲染主线程的消息队列;
在事件循环机制的作用下,渲染主线程拿出消息队列的该渲染任务并执行
在这里插入图片描述

渲染的过程:

根据html代码生成DOM树
根据css代码生成CSSOM
将DOM树和CSSOM整合形成Render树
根据render树渲染页面
遇到script标签则暂停渲染
优先加载并执行js代码
直至渲染完成Render树

在这里插入图片描述

页面展示过程

Javascript:负责业务交互逻辑
Style:根据CSS对每个DOM元素匹配样式
Layout:计算DOM元素显示在屏幕的位置大小
Paint:由多个渲染层完成DOM元素的可视效果
Composite:每层绘制完成后将所有的层依序合并为一个图层显示到屏幕

DNS 预解析

DNS Prefetching:具有此属性的域名不需要用户点击链接就在后台解析,而域名解析和内容载入是串行的网络操作,减少等待时间,提升用户体验

浏览器对网站第一次的域名DNS解析查找流程依次为:
浏览器缓存
系统缓存
路由器缓存
ISP缓存
递归搜索
DNS预解析的实现
  1. meta标签告知浏览器需要DNS预解析:
<meta http-equiv="x-dns-prefetch-control" content="on" />
  1. link标签强制对DNS预解析:
<link rel="dns-prefetch" href="http://bdimg.share.baidu.com" />

注意:dns-prefetch需慎用,多页面重复DNS预解析会增加重复DNS查询次数

垃圾回收机制(GC)

  • 标记清除
  • 引用计数

常见的内存泄露

  1. 闭包
  2. 全局变量
  3. 事件绑定没有移除
  4. 定时器setInterval() 、setTimeout()
  5. jQuery里对 DOM 的引用
  6. 控制台日志 console
  7. 彼此引用的对象产生的循环(需要手动断开引用)

解决方法:

  • 重复测试单一脚本
  • 在开发者工具里手动GC
  • 借助浏览器的任务管理器分析内存占用

跨域

出于浏览器的同源策略Sameoriginpolicy限制:协议(protocol),主机/域名(host)和端口号(port)三者任一不同

解决方法

  1. JSONP
  2. CORS
  3. WebSockets
  4. WebPack协议跨域
  5. Proxy代理
  6. Nginx反向代理
  7. 跨文档通信API:window.postMessage()
  8. 设置document.domain解决无法读取非同源网页的 Cookie问题(仅限主域相同,子域不同的跨域应用场景)

解决方法

  1. JSONP
  2. CORS(必须与服务器一起配置)
  3. WebSockets
  4. WebPack协议跨域
  5. Proxy代理
  6. Nginx反向代理
  7. 跨文档通信API:window.postMessage()
  8. 设置document.domain解决无法读取非同源网页的 Cookie问题(仅限主域相同,子域不同的跨域应用场景)

JSONP实现原理

后端将数据转换成JSON格式然后包装成函数,通过js传递给前端进行对应的函数解析(利用了浏览器对标签的限制较小)

  • 缺点:只能进行GET请求
  • 优点:兼容性好,在一些古老的浏览器中都可以运行
// 定义解析函数
function jsonpCallback(data) {
  console.log(data);
}

// 动态创建script标签并设置src
function fetchJSONP(url) {
  const script = document.createElement('script');
  script.src = url;
  script.onload=function(){
    script.remove();
  };
  document.body.appendChild(script);
}

// 调用JSONP请求
fetchJSONP('http://example.com/api/data?callback=jsonpCallback');
const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
    const queryData = url.parse(req.url, true).query;
    const callback = queryData.callback;

    // 数据
    const data = {
        name: 'John',
        age: 30
    };

    // 将数据转换成JSONP格式
    const jsonData = JSON.stringify(data);
    const responseText = `${callback}(${jsonData})`;

    // 设置响应头
    res.writeHead(200, {'Content-Type': 'application/javascript'});
    res.end(responseText);
});

const PORT = 3000;
server.listen(PORT, () => {
    console.log(`Server running on port ${PORT}`);
});

Ngnix反向代理

Ngnix反向代理
监听localhost主机的2222端口;
api的所有请求都转发到3333端口,同时加上header请求头

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

iframe 跨域登录的优点

  1. 用户体验:用户可以在不离开当前页面的情况下,完成另一个域上的登录操作,提供了更为流畅的用户体验。
  2. 安全性:由于登录操作是在iframe中进行的,可以限制敏感信息的暴露,通过设置相应的安全策略(如CSP),减少XSS攻击的风险。
  3. 隔离性:iframe的内容与父页面是隔离的,这意味着即使iframe中的页面出现安全问题,也不会直接影响到父页面的安全。
  4. 统一认证:对于拥有多个子域的大型网站,可以通过iframe跨域登录实现单点登录(SSO),用户在一个域登录后,可以无缝访问其他子域。
  5. 易于实现:相比于其他跨域认证方案,iframe跨域登录实现起来较为简单,只需在父页面中嵌入一个指向登录页面的iframe即可。
  6. 维护性:当需要更新登录逻辑时,只需在登录页面进行更改,而不需要修改所有使用iframe的页面。
    然而,需要注意的是,虽然iframe跨域登录有其优点,但也存在一些潜在的安全风险,例如点击劫持(Clickjacking)攻击,因此需要采取适当的安全措施来防范这些风险。

LocalStorage、SessionStorage、Cookie、Session、Token

在这里插入图片描述

LocalStorageSessionStorageCookieSessionToken
存储位置客户端客户端/服务端
存储类型字符串任意类型
增/改、删、查、清setItem()、getItem()、removeItem()、clear()都是操作document.cookie/
存储大小10M5M4K/
兼容性H5H4 / H5/
语法简易复杂/
有效期永久:需手动清除仅当前会话有效在设置的有效期后过期由服务器管理/
与服务端通信×携带在HTTP请求头信息中无需额外措施需要额外措施,如 CSRF Token
页面共享√不同顶级窗口不共享同域名不同端口可共享不可直接访问JS可直接访问
易用性可以接受原生/封装接口,对Object/Array支持更好原生接口不友好,需要手动封装不可直接访问
适用场景不需要与服务端通信的数据需要与服务端通信的数据
数据传输/在请求头传输在请求头/请求体传输/
前端访问JS可直接访问不可直接访问JS可直接访问
CSRF防护需要额外措施,如设置同源策略/需要额外措施,如 CSRF Token/需要额外措施,如 CSRF Token
安全性相对较高,但仍存在 XSS 攻击风险低,容易受到 XSS 攻击相对较低,容易受到 CSRF、XSS 攻击相对较高,但仍存在 XSS 攻击风险高,提供 CSRF 防护机制
IoTDB时序数据库在Windows下的保姆级安装教程(含环境变量配置避坑指南) 本文提供Apache IoTDB时序数据库在Windows系统下的详细安装与配置指南。教程涵盖从Java环境检查、软件下载解压,到环境变量配置的深度避坑,并详解了服务的启动、停止、连接测试及基础数据操作,帮助物联网开发者在Windows平台快速搭建稳定的时序数据库环境。 阅读详情

相关推荐

家庭网络中,路由器和交换机的连接顺序

它的目的是给路由器增加端口,用户访问互联网的速度比情况一要快,常用于办公网络、家庭成员多的场景。光纤入户首先连接的肯定是光猫,而在光猫的后面,是先连接交换机?还是应该接路由器呢?家庭网络中路由器和交换机的先后连接顺序。它目的是让更多的用户访问互联网。常用于一些超大型机房、网吧等。至于路由器和交换机的区别。两者之间很多功能都有兼容。但用户上网速度相对较慢。在技术日益迭代的今天。

m0_74075744的博客 1万+

浅析浏览器渲染进程主线程中的事件循环、消息队列和异步的关系

程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程。每个 应用有自己专属的进程,进程之间是相互隔离的,但是在双方同意的情况下,可以进行通信。有了进程后,就有了内存空间,线程可以理解为内存空间中运行代码的地方需要注意的是,一个进程至少得有一个线程,在进程开启后会自动创建一个线程来运行代码,该线程就被称为主线程如果主线程结束,整个程序就已经结束了。

Code_King006的博客 927

Materials - UE5中的PivotPainter

可以使用3DS Max Script中的脚本(Pivot Painter)对模型进行处理,让每个Element都有自己的Pivot Point,来方便控制和制作一些特殊的顶点动画效果;

GT的虚幻引擎文档 1288

浏览器 事件循环 从 宏队列和微队列 到 延时队列、交互队列、微队列 | js 执行机制 异步程序

同步程序执行完,再执行异步。会出现定时器不准的情况js 会阻塞渲染 是因为它们运行在同一个线程上JS 是单线程。因为js只能运行在浏览器的渲染主线程中,而渲染主线程只有一个,而渲染主线程承担着非常的多的事情 , 渲染页面 , 执行js啥啥的 都在里面执行浏览器的渲染进程 采用何种方式处理定时器任务、交互任务,任务执行顺序的依据 —— 事件循环。

海胆的博客 1676

Yolov5s可视化网络结构图

Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:点击查看 ...

江南研习社 15万+

小龙虾 OpenClaw 安装全攻略:本地部署 AI 智能体一步到位

OpenClaw(昵称小龙虾)是一款 MIT 开源协议的本地优先 AI 智能体执行网关,支持多平台接入、本地部署,能实现自然语言驱动的设备自动化操作,区别于纯对话 AI,可直接操控系统执行实际任务,数据全程本地存储更安全。本文带来 2026 最新版 OpenClaw 安装教程,适配 Windows/macOS/Linux 全系统,新手也能一键搞定。

lujiawei00的专栏 1976

你应该掌握的浏览器相关知识

文章目录一.浏览器安全1. XSS攻击2. CSRF攻击3.有哪些可能引起的前端安全的问题二.浏览器缓存机制1.对缓存的理解2.浏览器缓存的分类强缓存协商缓存3.浏览器的缓存机制的全过程三.浏览器渲染原理1.浏览器渲染引擎的主要模块以及渲染过程3. style样式渲染4. link样式渲染5.阻塞渲染**关于CSS的阻塞**关于js的阻塞四.浏览器本地存储1. sessionStorage,LocalStorage和CookieCookieLocalStorageSessionStorage2.浏览器的跨页

M_Edison的博客 1042

Arduino蜂鸣器播放《Astronomia》:从乐谱到代码的嵌入式音乐实现

在嵌入式系统开发中,通过编程控制硬件执行特定任务是核心基础。其原理在于利用微控制器生成精确的时序和频率信号,驱动执行器(如蜂鸣器、电机)完成预定动作。这项技术的价值在于实现了软件逻辑与物理世界的直接交互,是物联网设备、智能硬件开发的基石。常见的应用场景包括电子玩具的音效生成、报警器设计以及交互式艺术装置。本文以热门歌曲《Astronomia》的播放为例,具体展示了如何运用Arduino的`tone()`函数和数组数据结构,将抽象的乐谱转化为可执行的频率与延时控制代码,完整呈现了从**核心硬件解析**到**软

weixin_29796279的博客 348

二、浏览器--事件循环(也叫事件环,也叫event loop)--任务队列(等待执行的任务(存放的定时器,http,事件等进程))--渲染三者的关系

二、浏览器--事件循环(也叫事件环,也叫event loop)--任务队列(等待执行的任务)--渲染三者的关系

qq_43631129的博客 1035

详解AUTOSAR:AUTOSAR架构中的配置文件(拓展篇—7)

查看AUTOSAR代码包时会发现一些这样格式的文件:xxx_PBcfg.c、xxx_Lcfg.c和xxx_Cfg.h,本篇博文讲一讲这几个配置文件的作用和特点。

不脱发的程序猿 2147

基于Simulink进行微电网中DC-DC变换器的仿真建模

微电网:包括可再生能源发电设备、储能系统和负载,可以独立于大电网运行,也可以并网运行。重要性提高能源可靠性:通过本地化供电减少对外部电网的依赖。促进可再生能源利用:支持高效整合多种可再生能源。挑战多源管理:不同类型的能源产生方式各异,需设计灵活的电源管理系统。能量转换效率:需要高效的能量转换装置来确保能源的有效利用。首先明确要模拟的任务内容。设计一个能够在不同输入条件下为微电网提供稳定输出电压的DC-DC变换器。根据微电网的工作状态调整控制策略以维持最佳性能。

amy_mhd的博客 155

JS事件循环机制,从浏览器进程模型、主线程工作模式、各种队列执行顺序等全面讲解

事件循环又叫做消息循环,是浏览器渲染主线程的工作方式。在 Chrome 的源码中,它开启一个不会结束的 for 循环,每次循环从消息队列中取出第一个任务执行,而其他线程只需要在合适的时候将任务加入到队列末尾即可。过去把消息队列简单分为宏队列和微队列,这种说法目前已无法满足复杂的浏览器环境,取而代之的是一种更加灵活多变的处理方式。根据 W3C 官方的解释,每个任务有不同的类型,同类型的任务必须在同一个队列,不同的任务可以属于不同的队列。

求上得中,求中得下 1441

configure: error: no acceptable C compiler found in $PATH解决方案

本文主要介绍了configure: error: no acceptable C compiler found in $PATH解决方案,希望能对使用Linux的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 4万+

浏览器基础知识点

浏览器基础知识点 https://blog.youkuaiyun.com/Welkin_qing/article/details/88957803 转载于:https://www.cnblogs.com/iamspecialone/p/11220074.html

weixin_30418341的博客 84

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

浏览器知识点整理(1) 开篇

作为前端开发,但是一直对浏览器的执行方式模棱两可,对浏览器的执行也接近于黑盒,现在终于下定决心重新梳理一遍,前端对浏览器器知识点的梳理,来加深对浏览器相关知识点的理解。废话少说,开搞!!! ...

web_ding的博客 207

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

浏览器缓存机制详细知识点梳理

浏览器缓存

github_39096247的博客 128

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

浏览器相关知识点

事件传播有三个阶段:1、

HGX-DJK 378

前端面试知识点大全——浏览器篇

总纲:前端面试知识点大全 目录 1.浏览器工作原理 2.浏览器如何解析css,如何渲染css的 2.1 构建DOM树 2.2 构建CSSOM规则树(就是css规则树) 2.3 渲染阻塞 2.4 构建渲染树 2.5 布局渲染树 2.6 绘制渲染树 3. CSS阻塞和JS阻塞 3.1 js 的阻塞特性 3.2 CSS阻塞特性 3.3 嵌入JS的放置位置 3.4 Javasc...

随风丶逆风的博客 1235

浏览器基础知识点及常考面试题

浏览器基础知识点及常考面试题 https://www.cnblogs.com/donve/p/10231629.html 转载于:https://www.cnblogs.com/iamspecialone/p/11195312.html

weixin_30726161的博客 137

浏览器的一些基础知识点

进程是。

aizzl97的博客 319

浏览器缓存知识点总结

bug提交,开发:是不是你浏览器有缓存,我这边试都是可以的呀,你涮新缓存看一下吧。来看看今天分享的知识点。对了,大家反应的功能资料,和新手入门资料链接失效已经补了,大家可以自行获取吧。 浏览器缓存知识点总结 浏览器缓存,也就是客户端缓存,既是网页性能优化里面静态资源相关优化的一大利器,也是无数web开发人员在工作过程不可避免的一大问题,所以在产品开发的时候我们总是想...

Pitbull2014的博客 261

浏览器原理 缓存 前端浏览器知识点

浏览器原理 缓存 前端浏览器知识点

weixin_46443526的博客 2801

浏览器知识点

前端浏览器知识点

weixin_43526403的博客 343

浏览器:相关知识点

进程与线程 进程是操作系统资源分配的基本单位,进程中包含线程。 线程是由进程所管理的。为了提升浏览器的稳定性和安全性,浏览器采用了多进程模型。 从输入URL到浏览器显示页面发生了什么? 浏览器查找当前URL是否存在缓存,如果有缓存、并且缓存未过期,直接从缓存中返回 查看域名是否已经被解析过了,没有解析过进行DNS解析将域名解析成IP地址,并增加端口号 如果请求是HTTPS,进行SSL协商 利用IP地址进行寻址 服务器创建TCP链接 (三次握手) 服务器响应结果 渲染流程 需要将HTML转化成DOM

mosowe 541

web浏览器知识点

网页是怎么形成的 前端的代码(英文字母)---->浏览器渲染------- > 客户眼中的效果 浏览器(显示代码) 游览器是网页显示,运行的平台,常用的的游览器有IE(Edge)、火狐(FireFox)、谷歌(Chrome)、Safari和Opera等,我们称五大游览器 游览器占有的市场份额网站:https://tongji.baidu.com/research/sit...

啊对对对的博客 240
上一篇: TypeScript
下一篇: 前端的常见开发思想
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘泽宇Developer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值