首页 > 其他分享 >复习一下构建工具,淘天集团前端一面

复习一下构建工具,淘天集团前端一面

时间:2024-01-28 18:37:42浏览次数:23  
标签:淘天 浏览器 复习 前端 Webpack HTML 构建 代码 加载

1. Webpack的构建原理

Webpack的构建原理就是将多个模块打包成一个或多个静态资源文件的过程。它的构建原理可以简单概括为以下几个步骤:

  1. 入口点:Webpack通过指定一个或多个入口点来启动构建过程。每个入口点表示一个模块,可以是JavaScript、CSS、图片等任何类型的文件。
  2. 模块解析:Webpack会根据入口点,递归地解析所有依赖的模块。它会分析模块之间的依赖关系,并构建一个依赖关系图。
  3. 加载器:Webpack使用加载器来处理不同类型的文件。加载器允许你在打包过程中对模块进行转换和处理。例如,你可以使用Babel加载器将ES6代码转换为ES5代码,或者使用CSS加载器处理CSS文件。
  4. 插件:Webpack还提供了插件系统,可以用于扩展其功能。插件可以用于优化打包结果、压缩代码、生成HTML文件等。你可以根据需要选择和配置各种插件。
  5. 资源输出:通过配置输出选项,Webpack会将打包后的结果输出到指定的目录。你可以选择输出为一个或多个文件,也可以选择输出为内存中的虚拟文件。
  6. 构建优化:Webpack会根据配置进行一系列的构建优化。例如,它可以按需加载模块,减少打包结果的体积;还可以使用缓存机制,加快再次构建的速度。

2. 如何优化Webpack?

  1. 升级 webpack 版本,3升4,实测是提升了几十秒的打包速度
  2. 使用Tree Shaking和Scope Hoisting来减少代码体积和模块构建时间,其中Tree Shaking可以去除未使用的代码,而Scope Hoisting可以将模块内的代码尽量合并到一个函数(单一作用域)中,以减少函数声明和闭包的数量。
  3. 使用splitChunksPlugin插件来将公共代码抽离成单独的chunk,以减少代码重复和提高缓存命中率。
  4. 合理配置resolve.alias和resolve.extensions选项来减少Webpack查找文件的时间。
  5. 针对生产环境,可以开启代码压缩以及多进程并行处理等优化方式,以减少构建时间和服务器负载。
  6. 使用DLLPlugin和DllReferencePlugin来预先编译一些稳定不变的代码,以减少每次构建的时间。
  7. 使用HappyPack来启用多线程并发处理,以加速代码构建和增强开发体验。
  8. 对于图片、字体等资源文件,可以通过url-loader和file-loader等loader设置较小的limit值,将文件转换成base64编码的字符串内嵌在js文件中,以减少http请求次数。

3. Webpack 和 Vite相比,Vite有哪些优势?

    • 优点:
      • 快速的冷启动: 采用No Bundleesbuild预构建,速度远快于Webpack
      • 高效的热更新:基于ESM实现,同时利用HTTP头来加速整个页面的重新加载,增加缓存策略
      • 真正的按需加载: 基于浏览器ESM的支持,实现真正的按需加载

  • 缺点
    • 生态:目前Vite的生态不如Webapck,不过我觉得生态也只是时间上的问题。
    • 生产环境由于esbuildcss和代码分割不友好使用Rollup进行打包

4. 从浏览器拿到Html树到渲染是什么样的?

从浏览器拿到 HTML 树到最终渲染的过程包括解析 HTML、构建 CSSOM、创建渲染树、布局、绘制以及合成与显示。

  1. 解析 HTML:浏览器使用解析器将 HTML 代码解析成 DOM(文档对象模型)树。DOM 树是一个以层级结构表示 HTML 文档的对象树,它将 HTML 元素及其属性、文本内容等表示为节点,这些节点之间具有父子关系。
  2. 构建 CSSOM:在解析 HTML 的同时,浏览器还会构建 CSSOM(CSS 对象模型)。CSSOM 是表示 CSS 样式信息的对象树,它包含了样式规则、选择器和对应的属性值。浏览器会根据 CSSOM 将样式应用到 DOM 树上的相应元素。
  3. 创建渲染树:浏览器将 DOM 树和 CSSOM 结合起来,创建渲染树(Render Tree)。渲染树只包含需要显示的元素,例如可见的 HTML 元素和应用了样式的元素,而不包含隐藏的元素或不可见的元素(如display: none)。
  4. 布局(回流):浏览器会计算每个渲染树节点的几何信息,例如位置、大小等,并确定它们在屏幕上的精确位置。这个过程称为布局或回流(Layout or Reflow)。当布局发生变化时,浏览器需要重新计算并更新渲染树和页面的几何信息。
  5. 绘制:浏览器使用渲染树和布局信息进行绘制,将每个节点转换为屏幕上的实际像素。这个过程称为绘制(Painting)。
  6. 合成与显示:浏览器会将绘制好的图像发送给 GPU(图形处理单元),由 GPU 加速合成并显示在屏幕上。GPU 能够更高效地处理图像合成,提高页面的渲染性能。

5. v8垃圾回收处理机制

V8 的垃圾回收机制主要基于以下两个原则:

  1. 分代回收:V8 将内存对象分为几个不同的代(Generation),通常是新生代(New Generation)和老生代(Old Generation)。新生代包含较短寿命的对象,而老生代包含较长寿命的对象。由于大多数对象在短时间内就会变得不可达,因此将对象分类可以更有效地进行垃圾回收。
  2. 停止-复制式垃圾回收:V8 使用了一种称为停止-复制(Stop-The-World Copying)的垃圾回收算法。这种算法将堆内存分为两个空间,一个是活动空间(From Space),一个是空闲空间(To Space)。在垃圾回收过程中,V8 会先暂停 JavaScript 执行,然后将所有还存活的对象从活动空间复制到空闲空间,并且对它们进行整理和压缩。最后,活动空间和空闲空间的角色会互换,完成垃圾回收过程。
wx公众号:大厂前端面试真题,免费查看百余篇大厂前端面试真题!

6. 跨域问题怎么产生,如何解决?

跨域问题是因为浏览器的同源策略产生的。 同源指的是两个 URL 的协议、主机和端口号都相同。

常用的跨域解决方案包括:

  1. CORS:跨域资源共享(Cross-Origin Resource Sharing),是一种允许浏览器向跨域服务器发送 Ajax 请求的机制,支持现代浏览器,服务器端需要设置 Access-Control-Allow-Origin 头信息,指定允许的源或通配符,从而实现跨域请求。
  2. 代理:在同源页面内部发送 AJAX 请求到同域服务器,由服务器代理转发请求到跨域服务器,最后再将结果返回给同源页面。

7. 浏览器中的performance监控工具怎么用的?

  1. 打开谷歌浏览器并导航到你要进行性能分析的网页。
  2. 按下 F12 键或右键单击页面上的任何位置并选择 "检查"(Inspect)来打开开发者工具。
  3. 在开发者工具中,点击顶部的 "Performance" 选项卡。
  4. 点击 "Record" 按钮开始记录性能数据。在记录期间,你可以进行一些与性能相关的操作,例如加载网页、执行某些用户操作等。
  5. 当你完成了需要分析的操作后,点击 "Stop" 按钮停止记录。
  6. 分析性能数据。在 Performance 面板上,你将看到一个时间轴,显示了从记录开始到结束期间的各种事件和活动。你可以使用鼠标滚轮缩放时间轴,以便更详细地查看。
  7. 你可以通过不同的图表和面板来查看详细的性能数据,例如 CPU 使用情况、网络请求、内存使用等。点击相应的标签和图表可以查看更多信息。
  8. 根据分析结果,你可以识别出潜在的性能问题,并采取相应的优化措施。例如,你可以查看长时间执行的 JavaScript 代码、大量的网络请求或内存泄漏等。
wx公众号:大厂前端面试真题,免费查看百余篇大厂前端面试真题!

标签:淘天,浏览器,复习,前端,Webpack,HTML,构建,代码,加载
From: https://www.cnblogs.com/dhjy123/p/17993116

相关文章

  • 前端VUE
    1、   export和exportdefault的区别exportdefaultxxximportxxxfrom'./'exportxxximport{xxx}from'./'在一个文件或模块中,export、import可以有多个,exportdefault仅有一个通过export方式导出,在导入时要加{},exportdefault则不需要 2、    vuenextt......
  • 前端
    1、   性能优化(1)减少http请求次数:CSSSprites,JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存,图片服务器。(2)前端模板JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数(3)用innerHTML代替DOM操作,减少......
  • (坚持每天写算法)算法复习与学习part1基础算法part1-12——双指针算法
    双指针是一种思路,很多题都可能用得到,这里我就只选取Acwing网站的三道题(事实上我最近就是在这里刷题,leetcode反而不怎么去了,刷完这个网站的我就会去leetcode刷了)双指针一般来讲会在数组有序的情况下应用,但是如果是无序的也是有可能的,两个指针会遍历整个数组(如果条件允许的......
  • 如何通过观测云的RUM找到前端加载的瓶颈--可观测性入门篇
    声明与保证本文写作于2023年6月,性能优化的评价标准和优化方式仅适用于当前观测云控制台,当然随着产品迭代及技术更新,本文也会应要求适当更新。创建、修订时间创建修改人版本2023/6/24观测云***v1.0.01.网站性能评价的发展史(近20年)讲到网站性能优化,离不开网站技术发展史,更离不开网站......
  • 期权一张纸-不争连纸都没有-立足当下-观测未来-33岁前端程序员年终总结
    文章基本按照时间顺序,约5千字,内容讲的是:一场意外被辞,一场说走就走的旅游,一份5年亲密陪伴,下水捞过鱼,吃了“金蝉子”,野外路过营,举办了几次技术直播,我会简单陈述一下2022,希望明年总结能有一些精彩。因为是参赛文章,所以希望您能点赞、评论、转发或者评论666离职背景程序员被忽悠,期权大......
  • 我们前端同学最该关注什么-附评分思路
    来点实际的吧说一下我的想法(吐槽),我们是否对过程太过痴迷,忘记了我们要什么?文末给出我认为的好的标准比如:大家仿佛都在看框架、工具包和开发过程中的内容,这点可能是因为工期紧张,留给前端开发的时间不够,但996已经常态化的情况下,我们是不是该审查一下我们的结果:页面是否秒开?页面报错多......
  • 前端奇怪bug日记02
    出现问题: 鼠标点哪里哪里就出现光标,找了一个多小时,发现并不是代码问题:    解决方案:按一下键盘F7即可解决。......
  • 一对一源码,前端页面权限和按钮权限控制
    一对一源码,前端页面权限和按钮权限控制页面权限是一对一源码后台系统中非常常见的需求,在前端实现页面权限和按钮权限是为了确保用户只能访问其有权访问的页面,并执行其有权执行的操作。本文介绍前端实现页面权限和按钮权限控制的流程和逻辑。1.获取用户当前权限并且存在全......
  • 完美解决 - 前端发版后浏览器缓存问题
    一、简介开发完发布新版本后,在有些电脑上总需要强刷才能获取到最新版本的内容,太恶心了。浏览器缓存(BrowserCaching)是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面......
  • 转 | 我是一名前端,部门想让我转webgl方向,要不要考虑一下?
    https://www.zhihu.com/question/640467378/answers/updated 作者:Medy丶ghost链接:https://www.zhihu.com/question/640467378/answer/3372989459来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。说一个大部分前端无法接受的事实。90%的前端搞不......