大前端开发——前端知识渐变分层讲解 利用金字塔原理简化前端知识体系

Web开发基础

核心概念

  1. HTML、CSS和JavaScript:Web开发的三大基石,分别负责结构、样式和行为。

  2. 代码管理:随着项目规模扩大,需要将代码拆分成小块,便于维护。

  3. 作用域污染:早期所有代码共享全局作用域,容易导致变量和函数名冲突。

细化解释

在Web开发的初期,开发者通常将HTML、CSS和JavaScript写在一个文件(如index.html)中。这种方式简单,但当代码量增加时,文件变得臃肿,维护困难。为了解决这个问题,开发者开始将JavaScript拆分成多个文件,通过<script>标签引入。然而,所有代码仍共享全局作用域,如果多个文件中定义了同名变量或函数,就会相互覆盖,导致“作用域污染”。

模块化与打包工具

核心概念

  1. 模块化:将代码拆分为独立模块,每个模块有自己的作用域,避免全局污染。

  2. 打包工具:如Webpack,将多个模块整合成一个或多个文件,便于部署。

  3. Webpack:主流打包工具,支持前端和后端代码的统一处理。

细化解释

模块化开发通过将功能封装到独立的模块中,避免了全局作用域的冲突。每个模块可以导出功能(如函数或变量),其他模块通过导入使用这些功能。Webpack作为打包工具,能够分析模块间的依赖关系,将所有模块打包成一个bundle.js文件,浏览器可以直接加载运行。

后端引入方式与AMD/CMD协议

核心概念

  1. require:Node.js中同步加载模块的方式。

  2. AMD(异步模块定义):浏览器端异步加载模块的标准。

  3. CMD(通用模块定义):在AMD基础上改进,提供更灵活的加载方式。

细化解释

在Node.js中,require同步加载模块,适合服务器端,但在浏览器端由于网络延迟,同步加载效率低下。AMD通过define定义模块,支持异步加载依赖,适用于前端。CMD在AMD基础上优化,允许按需加载依赖,并通过缓存减少重复请求。

Webpack的统一打包功能

核心概念

  1. 统一打包:支持不同模块标准(如CommonJS、ES Modules)的代码整合。

  2. 入口文件:从指定入口开始,构建依赖图并打包。

细化解释

Webpack能够处理使用require(CommonJS)或import(ES Modules)的代码,将其统一打包为一个文件。开发者无需担心模块标准的差异,只需指定入口文件,Webpack会自动解析依赖并生成bundle.js。

单页面应用和多页面应用

核心概念

  1. 网页加载:浏览器通过URL向服务器请求资源。

  2. 缓存机制:存储静态资源,减少重复请求。

  3. 单页面应用(SPA):一个HTML文件,通过JavaScript动态渲染。

  4. 多页面应用(MPA):多个独立HTML文件,适合SEO。

细化解释

传统MPA中,每个页面对应一个HTML文件,导航时重新请求。SPA只有一个HTML,通过JavaScript动态更新内容,提升用户体验。缓存机制通过存储JS、CSS等静态文件,加速后续加载。

单页面应用框架

React、Angular、Vue

  1. React、Angular、Vue:主流SPA框架,提供组件化开发。

  2. 与Webpack结合:优化代码打包和资源管理。

细化解释

这些框架通过组件化方式组织代码,与Webpack结合实现模块化开发和高效打包。React以声明式UI著称,Vue易上手,Angular功能全面。

组件化的概念

  1. 单页面应用采用的方式都是构建一个大组件,然后再把这个大组件挂载到一个名叫 div#app 下面去

    1. 这里几乎是所有初中级前端迈不过去的概念了,他们不知道可以多创建一个 div,然后通过改写 main.js 将多个 Vue 组件挂载到多个 div 下,因为一般情况下完全不需要这样做,但是在谷歌插件开发,需要增强一个网页功能时,恰巧需要这个概念,若没有这个概念,就很难搞了,如下图红框里面这些小图标

  1. 将单页面的打包理解为一个大 Vue 组件的 js 代码用 Webpack 打包的过程,才能更好的理解谷歌插件开发,否则很难对谷歌插件知识进行分层,最终将插件知识和 Webpack + Vue 打包知识混合在一起,那就让你脑袋大了。

谷歌插件开发基础

popup.html,option.html,background.js,content script,inject script

  1. 谷歌插件:实现多页面间数据通信。

  2. 结构:

    • background:后台脚本,处理持久数据。

    • popup:弹出界面。

    • content script:注入网页,监听消息。

    • inject script:处理业务逻辑。

细化解释

谷歌插件通过多个组件协作实现功能。background脚本常驻后台,popup提供用户交互,content script访问网页DOM,inject script执行具体逻辑。多端通信涉及1:n关系(如插件到多个tab)。

background.js 特殊存在,为何谷歌称它 serviceworker.js

  1. background.js 最早期 MV2 版本时,它就是一个独立 page 和其他页面没啥区别,也即意味着原来谷歌浏览器需要给 background.html 提供 V8 运行环境,提供一些毫无用处的 DOM 全局变量的概念,但是 background.js 是个不可见的纯提供服务的概念,追加 window 和 DOM 以及其他 html5 API 都没有任何实质意义,还增加了性能开销,这东西需要常驻以便为其他页面提供服务;

  2. 那为何不把 background.html 做成一个简单的 worker.js 呢?用的时候加载进来,不用的时候卸载掉?不就不存在性能损耗了吗?不就可以让谷歌浏览器同时支持上百个插件在运行了吗?既然如此那必须干!于是 background.html 变成了 background.js,成为其他页面通信中转和数据增删改查的服务;

谷歌插件的知识分层

  1. 知道谷歌插件由 popup.html,option.html,background.js,content script,inject script 5 个部分构成,其中 popup.html,option.html 是单页面,content script 和 inject script 是组件化打包之后挂载到网页的某个 div 上实现具体功能的存在,而 background.js 是负责通信中转和数据增删改查的概念,但以上概念,均可以通过 webpack 进行打包,且 target:"web",因为这 5 个概念都没有偏离 web 下运行的范畴;

  2. 你要掌握的谷歌插件知识只有

    1. 5 个部分如何通信?

    2. content script 和 inject script 不共用一个作用域

    3. inject script 是与网页共享一个 window 作用域

    4. content script 在复杂开发中,只充当通信中转器,因为网页环境无法直接跟某个插件直接通信,因为网页和插件是 1:n 的概念,window.postmessage 到底发给哪个插件,浏览器不得而知,你必须有个 content script 接收这个消息才能保证网页和插件的对应。

    5. 所有的数据持久化,必须通过 background.js,因为其他那 4 个都不能保证稳定性和对应性,例如 inject script 只能存到 localstorage 里面,是针对某个网页的,与插件的存储范围不一样。

    6. 了解 chrome.storage 所有增删改查的使用方法;

  3. 至于 vuex,vue-router,vue 脚手架的使用压根跟谷歌插件开发没有关系,但若你一开始就从一个谷歌插件脚手架开始,迷惑也很正常;

Electron桌面应用开发

主进程 Main 和渲染进程 renderer

  1. 主进程:管理操作系统功能,类似于 background.js

  2. 渲染进程:类似于 popup.html option.html

    1. webview 渲染进程:类似于网页+inject script

    2. 渲染进程的 preload.js:类似于网页+content script

  3. 归根结底,你只需要了解两个概念,主进程和渲染进程,其他都是进一步的细化

细化解释

Electron结合Node.js(主进程)和Chromium(渲染进程),支持跨平台开发。主进程处理文件操作等,渲染进程负责界面展示,二者通过IPC通信。

主进程 Main

  1. node.js 环境下的运行脚本,electron.exe main.js 进行启动

  2. 相当于 electron.js 程序运行到一定步骤后,使用 eval 函数,将 main.js 加载后执行

渲染进程 Renderer

  1. main.js 启动 V8 环境构建出来的网页环境,这个环境可以直接执行里面的 html 和 js,那说明 web 打包那一套又可以直接拿来用了,比如 vue 脚手架打包一个单页面,直接丢进来就能用了

  2. 特殊的渲染进程 webview,会对具体的网页进行渲染,通过将 Vue 打包成组件挂载到网页的具体 div 上面,实现网页功能的增强

进程间通信

核心概念

  1. 进程间通信(IPC):主进程与渲染进程间的消息传递。

  2. 服务间通信:主进程与外部服务的交互。

  3. 通信方式:监听、发送消息、第三方中转。

细化解释

在Electron中,IPC通过ipcMain和ipcRenderer实现进程间通信。服务间通信可能涉及HTTP或WebSocket,复杂场景可借助消息队列。

服务间通信

  1. 如果将所有的逻辑都放在 main.js 中,比如数据库的增删改查操作,就会让主进程变得特别冗杂,冗杂就会导致出错率增大,针对渲染进程和 webview 进程闪退,都会自动重启,而主进程因为异常而闪退,则没有任何机会重启,因此降低主进程的代码复杂量,非常必要。

  2. 但是将逻辑抽离出来,单独形成 http 本地服务实现数据库增删改查,但随之而来的问题,是主进程和 http 本地服务就无法通信了,此时可以将主进程和 http 本地服务都理解为独立的服务,两个服务之间可通过订阅一个独立的服务消息,实现消息的实时通信,例如 Redis 或者 zeroMQ

总结

看似非常复杂的大前端开发,最终无非就是在解决两个问题:

  1. 解决不同层级下的通信问题

    1. 同页面下的通信,例如 vue 的父子通信,或者 vuex

    2. 不同页面下的通信,例如谷歌插件不同页面的 chrome.runtime.sendMessage

    3. 不同进程下的通信,例如 electron 的 ipcRenderer.invoke

    4. 不同服务下的通信,例如 electron 的 main.js 和本地 http.exe

  2. 解决数据的存储问题

    1. 同页面下的数据存储,例如 vuex 和 localStorage

    2. 不同页面下的数据存储,例如 chrome.storage

    3. 不同进程下的数据存储,例如 config.json 和 sqlite

其他东西都是这两大问题的具体细化过程,以及 web 方面的开发知识,如果你觉得很难,那基本是 web 本身的基础就不牢靠,学得似是而非。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mixture-of-Experts(MoE)原理与在DeepSeek中的应用

MoE机制简介 Mixture-of-Experts(MoE,混合专家)是一种“分而治之”的神经网络架构思想。在MoE模型中,存在多个并行的子网络,被称为“专家”。每个专家通常擅长处理特定类型的输入特征或知识片段。而在模型前向计算时,并非激活所有专家参与运算,而是通过一个专门的门控网…

SpringCloud学习笔记

个人学习进度&#xff1a;视频跟敲笔记&#xff08;12天&#xff09; 学习视频&#xff1a;尚硅谷微服务速通&#xff08;7小时左右课程&#xff09; 资源&#xff1a; 1.pdf&#xff1a;微服务pdf&#xff08;课程&#xff09;&#xff1a;https://pan.baidu.com/s/1g_TAuBjQ…

【大模型】Coze AI 智能体工作流从配置到使用实战详解

目录 一、前言 二、工作流介绍 2.1 什么是工作流 2.2 工作流与对话流 2.2.1 两者区别 2.3 工作流节点介绍 2.3.1 工作流节点说明 2.3.2 开始节点与结束节点 2.4 工作流入口 2.4.1 自定义智能体入口 2.4.2 从资源库新增工作流 2.5 工作流使用限制 三、工作流配置与使…

Discord多账号注册登录:如何同时管理多个账户?

Discord是许多人、特别是游戏玩家和社区管理者的重要沟通工具。随着用户需求的增长&#xff0c;越来越多的人开始在Discord上注册多个账号进行管理。例如&#xff0c;个人和工作账号的区分&#xff0c;多个游戏社区的参与&#xff0c;或者通过不同的身份进行更灵活的社交互动。…

前端如何使用Mock模拟数据实现前后端并行开发,提升项目整体效率

1. 安装 Mock.js npm install mockjs --save-dev # 或使用 CDN <script src"https://cdn.bootcdn.net/ajax/libs/Mock.js/1.0.0/mock-min.js"></script>2. 创建 Mock 数据文件 在项目中新建 mock 目录&#xff0c;创建 mock.js 文件&#xff1a; // m…

AimRT 从零到一:官方示例精讲 —— 二、HelloWorld示例.md

HelloWorld示例 官方仓库&#xff1a;helloworld 配置文件&#xff08;configuration_helloworld.yaml​ &#xff09; 依据官方示例项目结构自行编写YAML配置文件 # 基础信息 base_info:project_name: helloworld # 项目名称build_mode_tags: ["EXAMPLE", &quo…

Tauri 跨平台开发指南及实战:用前端技术征服桌面应用(合集-万字长文)

厌倦了笨重的Electron应用&#xff1f;想要构建体积小、性能高、安全可靠的跨平台桌面应用&#xff1f;Tauri将是你的不二之选&#xff01;本教程带你从入门到精通&#xff0c;掌握这个下一代桌面应用开发框架&#xff0c;并通过实战APK分析工具项目&#xff0c;将理论知识转化…

【LeetCode 热题 100】矩阵置零 / 螺旋矩阵 / 旋转图像 / 搜索二维矩阵 II

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;LeetCode 热题 100 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 矩阵矩阵置零螺旋矩阵旋转图像搜索二维矩阵 II 矩阵 矩阵置零 矩阵置零 用两个数组分别标记行和列&#xff0c;判断…

JavaScript进阶(三十一): === 与 == 比较运算符

文章目录 一、前言二、严格相等运算符 ()三、宽松相等运算符 ()四、推荐做法五、特殊情况 一、前言 在 JavaScript 中&#xff0c; 和 都是比较运算符&#xff0c;但它们在比较时有重要区别&#xff1a; 二、严格相等运算符 () 不进行类型转换只有当两个操作数的值和类型都…

HTML与安全性:XSS、防御与最佳实践

HTML 与安全性&#xff1a;XSS、防御与最佳实践 前言 现代 Web 应用程序无处不在&#xff0c;而 HTML 作为其基础结构&#xff0c;承载着巨大的安全责任。跨站脚本攻击&#xff08;XSS&#xff09;仍然是 OWASP Top 10 安全威胁之一&#xff0c;对用户数据和网站完整性构成严…

安达发|破解医疗器械多BOM困局:APS生产计划排产软件解决方案

在医疗器械设备制造行业&#xff0c;生产计划与排程&#xff08;Advanced Planning and Scheduling, APS&#xff09;系统的应用至关重要。由于医疗器械行业具有严格的法规要求&#xff08;如FDA、ISO 13485&#xff09;、复杂的多级BOM&#xff08;Bill of Materials&#xff…

组件轮播与样式结构重用实验

任务一&#xff1a;使用“Swiper 轮播组件”对自行选择的图片和文本素材分别进行轮播&#xff0c;且调整对应的“loop”、“autoPlay”“interval”、“vertical”属性&#xff0c;实现不同的轮播效果&#xff0c;使用Swiper 样式自定义&#xff0c;修改默认小圆点和被选中小圆…

【Stable Diffusion】文生图进阶指南:采样器、噪声调度与迭代步数的解析

在Stable Diffusion文生图(Text-to-Image)的创作过程中,采样器(Sampler)、噪声调度器(Schedule type)和采样迭代步数(Steps)是影响生成效果的核心参数。本文将从技术原理、参数优化到实践应用,深入剖析DPM++ 2M采样器、Automatic噪声调度器以及采样步数的设计逻辑与协…

第一天 车联网定义、发展历程与生态体系

前言 车联网&#xff08;Internet of Vehicles, IoV&#xff09;作为物联网&#xff08;IoT&#xff09;在汽车领域的延伸&#xff0c;正在彻底改变人们的出行方式。无论是自动驾驶、远程诊断&#xff0c;还是实时交通优化&#xff0c;车联网技术都扮演着核心角色。本文将从零…

foc控制 - clarke变换和park变换

1. foc控制框图 下图是foc控制框图&#xff0c;本文主要是讲解foc控制中的larke变换和park变换clarke变换将 静止的 a b c abc abc坐标系 变换到 静止的 α β αβ αβ坐标系&#xff0c;本质上还是以 定子 为基准的坐标系park变换 则将 α β αβ αβ坐标系 变换到 随 转…

软件系统容量管理:反模式剖析与模式应用

在数字化时代&#xff0c;软件系统的重要性日益凸显。随着业务的不断拓展和用户数量的持续增长&#xff0c;软件系统的容量管理成为保障其高效运行的关键因素。《发布&#xff01;软件的设计与部署》第二部分围绕容量展开深入探讨&#xff0c;系统地阐述了容量的定义、范围&…

23种设计模式-行为型模式之解释器模式(Java版本)

Java 解释器模式&#xff08;Interpreter Pattern&#xff09;详解 &#x1f9e0; 什么是解释器模式&#xff1f; 解释器模式是一种行为型设计模式&#xff0c;主要用于解释和执行语言的语法规则。它定义了一个解释器来处理特定的语言句法&#xff0c;并通过一个抽象语法树来…

基于Springboot + vue + 爬虫实现的高考志愿智能推荐系统

项目描述 本系统包含管理员和学生两个角色。 管理员角色&#xff1a; 个人中心管理&#xff1a;管理员可以管理自己的个人信息。 高校信息管理&#xff1a;管理员可以查询、添加或删除高校信息&#xff0c;并查看高校详细信息。 学生管理&#xff1a;管理员可以查询、添加或…

五种机器学习方法深度比较与案例实现(以手写数字识别为例)

正如人们有各种各样的学习方法一样&#xff0c;机器学习也有多种学习方法。若按学习时所用的方法进行分类&#xff0c;则机器学习可分为机械式学习、指导式学习、示例学习、类比学习、解释学习等。这是温斯顿在1977年提出的一种分类方法。 有关机器学习的基本概念&#xff0c;…

Blender插件 三维人物角色动作自动绑定 Auto-Rig Pro V3.68.44 + Quick Rig V1.26.16

Auto-Rig Pro是一个集角色绑定、动画重定向和Unity、Unreal Engine的Fbx导出于一体的全能解决方案。最初作为我个人的内部角色绑定工具开发&#xff0c;我几年前将其发布&#xff0c;并自那时起增加了许多新功能。 Blender插件介绍 Auto-Rig Pro插件简介 Auto-Rig Pro是一个强…