业务开发算法 50 讲
黄清昊
Hashdata 数据库内核工程师,LeetCode 高赞答主,公众号微扰理论作者
23292 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 51 讲
业务开发算法 50 讲
15
15
1.0x
00:00/00:00
登录|注册

12|拓扑排序:Webpack是如何确定构建顺序的?

后序遍历确保依赖顺序
递归访问未遍历节点
构建邻接表
更新入度并选择新的可修读课程
选择无先修课程的课修读
构建邻接表和入度表
v4.0之后引入chunkGroup概念,不再需要拓扑排序
v3.2.0版本使用拓扑排序
复杂度:O(V+E)
步骤:
基于深度优先搜索(DFS)
复杂度:O(V+E)
步骤:
基于贪心和广度优先搜索(BFS)
Webpack版本变迁
探讨判断环路存在的高效方法
DFS算法:访问过程中遇到已访问节点表示环路存在
Khan算法:未输出节点表示环路存在
DFS算法
Khan算法
打包成浏览器可理解的bundle
递归构建依赖关系图
模块化前端开发
适用条件:有向无环图(DAG)
应用场景:解决有依赖关系任务的排序问题
定义:保证有向图中,若路径P从A指向B,则A在序列中出现在B之前
参考资料
课后作业
环路检测
拓扑排序实现
Webpack构建顺序
拓扑排序概念
拓扑排序与Webpack构建顺序

该思维导图由 AI 生成,仅供参考

你好,我是微扰君。
Webpack 是现在最流行的前端构建工具,见证了前端工程化在过去十年里的繁荣发展。如果你是前端工程师,相信你在日常工作中应该会经常使用到。
Webpack 让我们可以模块化地进行现代 Web 应用的前端开发,并基于我们的简单配置,从入口开始,递归地自动构建出复杂的依赖关系图,最终把所有的模块打包成若干个浏览器可理解的 bundle。
整个过程比较复杂,但是其中显然会有一个构建顺序的问题需要处理。以 html-webpack-plugin v3.2.0 为例,我们用 Webpack 打包 HTML 文件的时候,文件之间会有一定的引用依赖关系,因而所构建的 chunk 之间也会有相应的依赖关系。
那问题就来了,打包的时候,按照什么样的顺序去打包才更合理呢?这就是拓扑排序需要解决
我的第一份工作就是前端工程师,对前端开发感情挺深,也一直觉得其实前端里用到算法的地方绝对不在少数。所以今天我们就以 Webpack 为例,一起来学习拓扑排序在实战中所发挥的威力。
当然,如果你对 Webpack 了解不多,也不用担心,完全可以把这个问题看成如何在一堆有依赖关系的源文件中找到合适的加载或者编译的顺序,和你常用的 maven、makefile 这类编译和依赖管理工具,去编译项目的原理并无二致。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了基于DFS的拓扑排序算法在Webpack中的应用。首先解释了拓扑排序的重要性和Khan算法在任务排序中的作用。随后通过详细的代码解析,阐述了基于DFS的拓扑排序算法的实现过程。文章还对拓扑排序算法的关键变量进行了解释,并讨论了如何判断有向图中的环路。通过对实际代码的解读,读者能够深入理解DFS算法在拓扑排序中的应用。此外,文章还对两种算法的时间复杂度和空间复杂度进行了比较,并提出了课后作业,引发读者思考。总的来说,本文逻辑清晰,代码分析详细,帮助读者快速了解基于DFS的拓扑排序算法的实现原理及其在Webpack中的具体应用。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《业务开发算法 50 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • Paul Shan
    深度优先遍历可以引入颜色的概念,也就是一开始的颜色为白色,遍历的时候颜色为灰色,遍历完成的颜色为黑色。如果遍历过程中发现一个新节点的颜色为灰色,即可判断有环。

    作者回复: 是的;其实就是标记出这一轮搜索中的节点,已经搜索过的节点,和还没有搜索的节点。

    2022-01-06
    2
    3
  • Amber
    可不可以提供完整的能运行的例子呢,文章提供的都是片段

    作者回复: Amber 你好;khan算法的代码可以直接提交到 leetcode 210。 Webpack的代码可以直接参考 npm包的源码 https://www.npmjs.com/package/toposort

    2022-01-12
  • Jump
    感觉dfs把topsort函数贴出来就可以了
    2022-04-03
    1
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部