当前位置: 首页 > news >正文

前端学习一

一 进程与线程

线程是进程执行的最小单位,进程是系统分配任务的最小单位。

一个进程可执行最少一个线程。线程分为子线程和主线程。

主线程关闭则子线程关闭。

二  浏览器进程

浏览器是多进程多线程应用。

进程包括:

  • 浏览器进程 负责程序交互
  • 渲染进程 负责执行js等
  • 网络进程 负责网络进程加载

渲染主线程负责执行js、vue,解释css、html等。

一个标签一个渲染进程。

渲染主线程执行最多次。

有线程将任务放到渲染主线程执行队列,渲染主线程执行队列从消息队列中获取任务执行。

同一类型任务在同一队列中。

消息队列包括:

  1. 微队列 执行优先级最高
  2. 交互队列 执行优先级中
  3. 延时队列 执行优先级低 执行回调

三 js异步理解

js为单进程语言。渲染主线程中执行js。

使用同步则可能导致渲染主进程堵塞。

渲染主线程执行队列其他任务无法执行。

浏览器采用异步方法可避免堵塞。

具体方法:

  1. 任务执行时,主线程将任务交给其他线程执行,主线程继续执行后续代码。
  2. 任务中回调函数,包装为任务,加入到延时队列中,待主进程执行。

以上方法最大限度保证单进程的流畅运行。

"主线程将任务交给其他线程执行"可以解释为,执行代码时,有线程将不同任务放到不同队列,根据队列执行优先级,主线程执行完全局任务后,获取任务执行。

交互事件任务进入交互队列。

Promise.resolve().then(function(){}) 将任务放入微队列。

三 js事件循环

渲染主线程循环执行,各个队列的任务,事件循环又叫消息循环。

类似于后端消息队列,有守护线程监听队列,其他线程执行对应数据,监听到有新数据就执行。

浏览器中开始死循环,执行消息队列中的任务,其他线程将任务插入队尾。

同类型的任务必须在同一队列,不同的任务应属于不同队列。

不同队列执行的优先级不同,微队列必须再存且执行优先级最高,其他队列优先级由浏览器自行决定。

四 js定时器是否精准

不精准

  1. 硬件没有原子钟
  2. 操作系统计时函数偏差,js计时执行操作系统函数
  3. 计时器实现时嵌套层级超过5层,则带有4毫秒时间差
  4. 受渲染主线程事件循环影响,计时器的回调在延时队列中,只能在渲染主线程空闲时运行,因此有偏差

原子钟为一个硬件设备,目前有芯片级原子钟。

国产芯片级微型原子钟:多领域应用,市场前景广阔!-电子发烧友网

五 示例

例:

const btn = document.getElementById("btn")function clickf(event){setTimeout(function(){console.log("setTimeout1")},0) Promise.resolve().then(function(){console.log("Promise1");})}btn.addEventListener('click', clickf(event));setTimeout(function(){btn.click(); },0)  Promise.resolve().then(function(){console.log("Promise2");})function sleep(times){const date = Date.now();let currentDate = null;do {currentDate = Date.now();} while (currentDate - date < times);}function showaf(){let a=1console.log(a)}function showa(func){if (typeof func === 'function') {func(); // 执行回调函数}}function settimeout1(){console.log("setTimeout2")Promise.resolve().then(function(){console.log("Promise3");})console.log("setTimeout3") }setTimeout(settimeout1,0) showa(showaf)sleep(1000)let b=2console.log(b) 

输出结果

调用顺序如下:

先是全局代码执行,依次推入延时队列任务1、微队列任务1、延时队列任务2。

根据推入顺序和队列的优先顺序,依次执行微队列任务1,延时队列任务1,延时队列任务2。

之后类推。

参考:

事件循环那点事_计算机硬件没有原子钟怎么理解-CSDN博客

 

相关文章:

前端学习一

一 进程与线程 线程是进程执行的最小单位&#xff0c;进程是系统分配任务的最小单位。 一个进程可执行最少一个线程。线程分为子线程和主线程。 主线程关闭则子线程关闭。 二 浏览器进程 浏览器是多进程多线程应用。 进程包括&#xff1a; 浏览器进程 负责程序交互渲染…...

【OSS】php使用oss存储

阿里云oss官方文档&#xff1a;文档 1、前期工作 创建阿里云账号&#xff0c;登录创建bucket&#xff0c;注意修改权限&#xff0c;要不然可能读取不到 申请accessKeyId和accessKeySecret accessKey 2、项目中安装OSS扩展 composer require aliyuncs/oss-sdk-php3、基础使…...

UE5 C+、C++、C# 构造方法区别示例

我们对比一下UE C、C 、C#的构造方法&#xff1a; 1. UE4 C例子&#xff1a; // 声明和构造合并在一起static ConstructorHelpers::FObjectFinder<UTexture2D> CrosshairTexObj(TEXT("/Game/Path"));// 使用加载的资源UTexture2D* Texture CrosshairTexObj.…...

leetcode-146.LRU缓存(易理解)

为了实现一个满足 LRU&#xff08;最近最少使用&#xff09;缓存约束的数据结构&#xff0c;我们需要在 (O(1)) 时间复杂度内完成 get 和 put 操作。这通常可以通过结合使用哈希表和双向链表来实现&#xff1a; 哈希表&#xff1a;用于在 (O(1)) 时间复杂度内实现对缓存中元素…...

JavaSe部分总结

我们先来了解一下Java语言,JavaSE是Java编程语言的标准版,主要是来学习Java的基本语法,书写方式,以及一些简单的逻辑循环和判断,包括一些关键字,特殊类(抽象类),特殊的方法(static修饰的方法,final修饰的方法)等等,最重要的是Java语言是比较C语言和C语言是比较简单的,Java是面向…...

iPhone批量删除照片的方法

对于每一个iPhone用户来说&#xff0c;照片管理是一项日常而重要的任务。随着时间的积累&#xff0c;无数的照片快速填满了我们的存储空间&#xff0c;从美丽的风景到重要的家庭聚会&#xff0c;每一张照片都记录着我们生活中的瞬间。然而&#xff0c;当存储空间即将耗尽时&…...

红日靶场vulnstack 7靶机的测试报告[细节](一)

目录 一、测试环境 1、系统环境 2、注意事项 3、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Redis未授权访问漏洞获取web1靶机系统权限 3、获取docker靶机系统权限 ①Laravel框架漏洞利用getshell ②Laravel主机的提权&&docker容器逃逸 提权…...

ubuntu+ros新手笔记(二):古月·ROS2入门21讲学习笔记

系统ubuntu22.04 ros2 humble 按照如下视频教程学习的&#xff1a;【古月居】古月ROS2入门21讲 | 带你认识一个全新的机器人操作系统 此处仅记录我报错的地方&#xff0c;以及相应的解决方案&#xff0c;没有出错的略过&#xff01; 对应的古月居ROS2入门21讲源码下载地址&a…...

Harmonyos之深浅模式适配

Harmonyos之换肤功能 概述实现原理颜色适配颜色资源配置工具类编写界面代码编写适配效果 概述 深色模式&#xff08;Dark Mode&#xff09;又称之为暗色模式&#xff0c;是与日常应用使用过程中的浅色模式&#xff08;Light Mode&#xff09;相对应的一种UI主题。 换肤功能应…...

牛客网 SQL2查询多列

SQL2查询多列 select device_id,gender,age,university //查询哪些字段 from user_profile //从哪个表中查找 每日问题 C 中面向对象编程如何处理异常&#xff1f; 在C中&#xff0c;面向对象编程&#xff08;OOP&#xff09;处理异常主要通过异常处理机制来实现。C 提供了…...

Angular由一个bug说起之十二:网页页面持续占用CPU过高

随着网络日益发达&#xff0c;网页的内容也更加丰富&#xff0c;形式也更加多样化。而随之而来的性能问题也不容小觑。这篇文章我会根据我在实践中遇到的一个问题来总结&#xff0c;我在面对性能问题的一些解决步骤&#xff0c;希望能对大家有所启发。 查找问题原因 我接触的…...

【从零开始入门unity游戏开发之——C#篇05】转义字符、@处理多行文本或者不使用转义字符、随机数

文章目录 一、转义字符1、什么是转义字符&#xff1f;2、常见的转义字符3、总结 二、使用处理多行文本或者不使用转义字符1、多行字符串2、不使用转义字符 三、随机数1、Random.Next()生成随机整数示例&#xff1a;生成一个随机整数生成指定范围内的随机整数 2、Random.NextSin…...

我们来对接蓝凌OA --报文格式

题记 数智化办公专家、国家高新技术企业、知识管理国家标准制定者、信创供应商10强…等等&#xff0c;这些和咱们有关系吗&#xff01;&#xff01;不好意思&#xff0c;走错片场了&#xff0c;刚和项目经理在甲方那边吹牛B想想刚刚的大饼&#xff0c;看看支付宝余额&#xff…...

旅游系统旅游小程序PHP+Uniapp

旅游门票预订系统&#xff0c;支持景点门票、导游产品便捷预订、美食打卡、景点分享、旅游笔记分享等综合系统 更新日志 V1.3.0 1、修复富文本标签 2、新增景点入驻【高级版本】3、新增门票核销【高级版】4、新增门票端口【高级版】...

Pytest-Bdd-Playwright 系列教程(15):背景(Background)

Pytest-Bdd-Playwright 系列教程&#xff08;15&#xff09;&#xff1a;背景&#xff08;Background&#xff09; 前言一、什么是背景&#xff08;Background&#xff09;二、特性文件三、测试脚本四、运行测试总结 前言 在测试的过程中&#xff0c;我们往往会遇到这样的问题&…...

ionic V6 安装ios所需

npm install capacitor/ios添加ios平台 ruby要求3.0以上 rvm use ruby-3.1.0 --default npx cap add ios打开xcode看看创建的项目 npx cap open ios没有capacitor指定的位置, 估计之前pod(cocoapods)安装搞得Ruby环境很乱了......cocoapods整的我麻了... App/App/capacitor…...

3d模型展示-初探

由于工作原因&#xff0c;近一年没怎么写代码&#xff0c;有朋友问你做过3D模型展示吗&#xff0c;之前都是做以vue为框架做定制业务&#xff0c;这次抽时间试试3d模型展示。 软件功能 使用ThreeJS框架实现加载GLB模型&#xff0c;并添加动画效果&#xff0c;实现3d展示模型。…...

OpenLinkSaas 2025年1月开发计划

先来看看OpenLinkSaas的大目标 在OpenLinkSaas的产品目标中&#xff0c;让开发人员更加方便的使用云资源是目标之一。通过各大云厂商的API&#xff0c;来可视化云上基础设施的数据是远远不够的。我们准备在2025年1月份增加方便管理和运营研发场景下服务器的能力。 这部分的功能…...

C# 用封装dll 调用c++ dll 使用winapi

这里用c net 封装winapi函数 pch.h // pch.h: 这是预编译标头文件。 // 下方列出的文件仅编译一次&#xff0c;提高了将来生成的生成性能。 // 这还将影响 IntelliSense 性能&#xff0c;包括代码完成和许多代码浏览功能。 // 但是&#xff0c;如果此处列出的文件中的任何一个…...

XML基础学习

参考文章链接: XML基础学习 在w3school看到了XML的教程,想到以前工作学习中也接触到了XML,但只是简单搜索了解了下,没有认真去学习XML的基础,所以现在认真看下其基础部分,并写篇博客作为笔记记录下。 XML 简介 XML 被设计用来传输和存储数据。 什么是 XML? XML 指可…...

英雄联盟身份定制完全指南:3步打造专属游戏形象

英雄联盟身份定制完全指南&#xff1a;3步打造专属游戏形象 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 想在英雄联盟中展示与众不同的游戏形象吗&#xff1f;LeaguePrank正是你寻找的解决方案&#xff01;这个开源工具通过…...

18年产品经理生涯精华:从交付到规划,项目管理、解决方案、业务理解深度解析!

本期访谈只有1位老师&#xff0c;大海老师&#xff0c;18年工作经验&#xff0c;从干交付&#xff0c;到项目管理&#xff0c;再到资深技术专家、解决方案专家&#xff0c;目前做的更多的是业务规划、产品规划&#xff0c;是从一线实战走到真正的专家层面&#xff0c;老师分享的…...

SeqGPT-560m生成效果实测:在中文语法纠错与润色任务中的表现

SeqGPT-560m生成效果实测&#xff1a;在中文语法纠错与润色任务中的表现 1. 项目背景介绍 今天我们来实测一个特别实用的AI工具——SeqGPT-560m在中文语法纠错与文本润色方面的表现。这个轻量级模型虽然参数不多&#xff0c;但在处理中文文本时展现出了令人惊喜的能力。 本项…...

Wan2.2-I2V-A14B多场景应用:文旅宣传/电商主图/社交媒体动态生成

Wan2.2-I2V-A14B多场景应用&#xff1a;文旅宣传/电商主图/社交媒体动态生成 1. 开箱即用的视频创作利器 想象一下&#xff0c;你只需要输入一段文字描述&#xff0c;就能自动生成一段高清视频。这就是Wan2.2-I2V-A14B文生视频模型带来的革命性体验。无论你是文旅行业的宣传人…...

电影票销售管理|基于springboot + vue电影票销售管理系统(源码+数据库+文档)

电影票销售管理系统 目录 基于springboot vue电影票销售管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue电影票销售管理系统 一、前言 博主…...

嵌入式面试最重要的是项目经历

很多嵌入式应届生面试&#xff0c;我发现大家都挂在同一个地方 项目一开口&#xff0c;就让人听不下去了。 不是项目太少&#xff0c;而是项目太普通。 不是完全没做&#xff0c;而是讲不出自己到底做了什么。 不是技术栈不对&#xff0c;而是没法证明你的能力真的能落到工作里…...

2026届毕业生推荐的五大AI写作助手推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 维普AIGC检测系统&#xff0c;作为学术不端防范方面重要的工具&#xff0c;在高校与科研机构…...

从脉冲到CAN总线:一文搞懂Emm42 V5.0步进闭环驱动的四种控制方式(含Arduino/PLC接线示例)

从脉冲到CAN总线&#xff1a;Emm42 V5.0步进闭环驱动的四种控制方式深度解析 在工业自动化和嵌入式开发领域&#xff0c;步进电机的精确控制一直是工程师们关注的重点。Emm42 V5.0步进闭环驱动器作为新一代高性能驱动解决方案&#xff0c;凭借其丰富的控制接口和先进的FOC矢量…...

StreamIO:Arduino嵌入式统一I/O流与缓冲区抽象库

1. StreamIO 库概述StreamIO 是一个面向嵌入式 Arduino 生态的轻量级 I/O 抽象封装库&#xff0c;其核心设计目标是统一处理流式数据&#xff08;Stream&#xff09;与静态内存缓冲区&#xff08;array buffer&#xff09;的读写操作。在传统 Arduino 开发中&#xff0c;开发者…...

002、游戏画面捕获与预处理:屏幕抓取、图像增强与目标区域锁定

# ## 一、深夜调试:为什么我的YOLO总是漏掉BOSS? 上周三凌晨两点,我盯着屏幕上的暗黑风格游戏画面,第37次跑通了训练好的YOLOv5模型。结果让人沮丧——在快速移动的战斗场景中,模型对BOSS的识别率不到60%。不是模型不行,而是喂给模型的图像质量太差:屏幕截图模糊、颜色…...