- 操作系统
- 未知
- 开发语言
- 开源协议
- 未知
-
2019-06-13 22:38:28
前言
在实际应用场景中,很多时候我们会用到字典集的查找。通过一个键值key,去拿到它对应的值对象。这种方法确实很高效,很快,但是这里有个问题,当字典集储存的键值很多的情况时,毫无疑问,这里会消耗掉大量的内存空间。这个在我们做基数计数的统计应用时,这个空间会膨胀地特别厉害。本节笔者将要谈论的是对于基数统计来说,使用上更为适用的1种数据结构Trie Tree以及它的衍生优化版Radix Tree。
Trie Tree
我们先来看第一种树结构Trie Tree,名叫字典树。Trie Tree的原理是将每个key拆分成每个单位长度字符,然后对应到每个分支上,分支所在的节点对应为从根节点到当前节点的拼接出的key的值。它的结构图如下所示。
上图中每个节点存储的值为一个数值,当然这不是绝对的,我们可以假想这可以是key值所对应的任何值对象。只是计数统计在平时使用中更为常见一些。那么问题来了,相比较于字典集的存储方式,Trie Tree将key以树型结构构造,有什么用意呢?一个最大的帮助是公共的前缀被共享了,这样可以避免被重复地存储了。而在普通的字典集结构中,这种重复key前缀都是独立被包含在每个key内的。假设当字典集中所存储的key都带有大量重复的前缀时,Trie Tree将会消耗比普通字典结构更少的空间。
如上述所描述的,通过共享公共前缀的方式空间省了不少,但是它的查询效率如何呢?按照树的查询方式,一个查询key长度m,首先我们会将key拆分成m个字符,然后对应每个长度,从根节点依次向下,总共会进行到m次查找。因此我们可以得出,它的查询时间复杂度为O(m),随着查询key长度的增加,它所消耗的时间将会线性增长。
往深层面来看查询时间的问题,其实本质上这是树的深度引起的问题,对于长key而言,它的key对应的节点构造的深度过深。那么如果说我们将这“棵”树构造得更紧凑一些,会如何呢?于是我们有了另外一个衍生版本树:Radix Tree(基数树)。
Radix Tree
Radix Tree名为基数树,它的计数统计原理和Trie Tree极为相似,一个最大的区别点在于它不是按照每个字符长度做节点拆分,而是可以以1个或多个字符叠加作为一个分支。这就避免了长字符key会分出深度很深的节点。Radix Tree的结构构造如下图所示:
从上图我们可以看到,上面每个分支可以是局部部分字符串。以简单的字符查找为例,Radix Tree的搜索查找过程如下:针对Radix Tree的构造规则,它的节点插入和删除行为相比较于Trie Tree来说,略有不同。
- 对于节点插入而言,当有新的key进来,需要拆分原有公共前缀分支。
- 对于节点删除而言,当删除一个现有key后,发现其父节点只有另外一个子节点key,则此子节点可以和父节点合并为一个新的节点,以此减少树的比较深度。
Radix Tree的insert过程如下图所示:
Trie Tree、Radix Tree的局限性
的确Trie Tree、Radix Tree在某些应用场景可以帮助我们节省内存使用空间,但是它们也有其使用的局限性。比如这类树结构无法适用于所有的数据类型,目前来看主要适用于能够用string字符等可作为表达式查询key的场景。
引用
[1].https://en.wikipedia.org/wiki/Radix_tree
[2].https://en.wikipedia.org/wiki/Trie更多相关内容 -
AngularJS的tree控件
2016-02-26 14:25:53Angularjs,自己整理个tree的控件,非常好用 -
jsTree中文文档
2015-03-14 19:50:43jsTree中文文档 -
安利一款Python开发的仿Linux树形显示目录tree命令
2021-07-27 19:39:03文章目录Linux与Windows的tree命令Linux的tree命令演示Windows的tree命令Python自制tree命令os模块基础代码Rich库关于tree模块的官方示例调用Tree模块实现仿Linux树形显示目录效果安装自定义tree模块 首先看看Linux...大家好,我是小小明,今天我要给大家分享一个用python实现的仿Linux的tree命令。
详见:https://pypi.org/project/filestools/
通过以下命令安装即可直接使用:
pip install filestools -U
安装后的使用示例:
对如何编码实现感兴趣的童鞋可以继续往下看。
文章目录
首先看看Linux下的tree命令效果如何:Linux与Windows的tree命令
Linux的tree命令演示
在CentOS的Linux系统下,我们可以再使用yum命令安装tree之后使用tree。安装命令:
yum install tree
然后使用tree命令的树形显示效果:
[root@iZwz9afmmytm54pshbwmebZ 018]# tree . ├── css │ ├── abstract\ blue\ lights\ orange\ bokeh\ gaussian\ blur\ 1920x1200\ wallpaper_www.wallpaperhi.com_43.jpg │ ├── default.css │ ├── font │ │ ├── DS-DIGIB.TTF │ │ ├── DS-DIGII.TTF │ │ ├── DS-DIGI.TTF │ │ └── DS-DIGIT.TTF │ ├── jquery-ui.css │ ├── mobile.css │ ├── normalize.css │ └── style.css ├── images │ ├── btn01slider2.png │ ├── charts.png │ ├── logofont.png │ ├── logoline1.png │ ├── logoline2.png │ ├── logoline3.png │ └── logoline.png ├── index.html ├── js │ ├── common.js │ ├── index.js │ ├── jquery-1.8.3.min.js │ └── jquery_and_jqueryui.js └── less └── style.less
加上-C参数对各种类型加上不同的颜色:
加上-s参数能额外列出文件或目录的大小,-h参数用于自动修正显示单位:
tree命令参数说明:
- -a 显示所有文件和目录。
- -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合。
- -C 在文件和目录清单加上色彩,便于区分各种类型。
- -d 显示目录名称而非内容。
- -D 列出文件或目录的更改时间。
- -f 在每个文件或目录之前,显示完整的相对路径名称。
- -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|"号。
- -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。
- -i 不以阶梯状列出文件或目录名称。
- -L level 限制目录显示层级。
- -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。
- -n 不在文件和目录清单加上色彩。
- -N 直接列出文件和目录名称,包括控制字符。
- -p 列出权限标示。
- -P<范本样式> 只显示符合范本样式的文件或目录名称。
- -q 用"?"号取代控制字符,列出文件和目录名称。
- -s 列出文件或目录大小。
- -t 用文件和目录的更改时间排序。
- -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。
- -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。
Windows的tree命令
Windows上也有tree命令,只不过没有Linux平台的tree命令强大。
我们看看显示效果:
D:\QMDownload\source\test>tree /F 文件夹 PATH 列表 卷序列号为 5A3F-F8A8 D:. │ index.html │ ├─css │ │ abstract blue lights orange bokeh gaussian blur 1920x1200 wallpaper_www.wallpaperhi.com_43.jpg │ │ default.css │ │ jquery-ui.css │ │ mobile.css │ │ normalize.css │ │ style.css │ │ │ └─font │ DS-DIGI.TTF │ DS-DIGIB.TTF │ DS-DIGII.TTF │ DS-DIGIT.TTF │ ├─images │ btn01slider2.png │ charts.png │ logofont.png │ logoline.png │ logoline1.png │ logoline2.png │ logoline3.png │ ├─js │ common.js │ index.js │ jquery-1.8.3.min.js │ jquery_and_jqueryui.js │ └─less style.less
个人只能说勉强还行吧,也能看清楚树形结构。
Python自制tree命令
下面呢,我们考虑使用Python来仿制这样的命令。
os模块基础代码
关于Python打印树形目录结构,我已经在4年前使用Java写过一个不够完善的代码。19年国庆学python的时候才用os模块重写了一下:
import os def show_dir(path, layer=0): listdir = os.listdir(path) for i, file in enumerate(listdir, 1): file_path = os.path.join(path, file) print("│ " * (layer - 1), end="") if (layer > 0): print("└─" if i == len(listdir) else "├─", end="") print(file) if (os.path.isdir(file_path)): show_dir(file_path, layer + 1) show_dir("test")
结果:
css ├─abstract blue lights orange bokeh gaussian blur 1920x1200 wallpaper_www.wallpaperhi.com_43.jpg ├─default.css ├─font │ ├─DS-DIGI.TTF │ ├─DS-DIGIB.TTF │ ├─DS-DIGII.TTF │ └─DS-DIGIT.TTF ├─jquery-ui.css ├─mobile.css ├─normalize.css └─style.css images ├─btn01slider2.png ├─charts.png ├─logofont.png ├─logoline.png ├─logoline1.png ├─logoline2.png └─logoline3.png index.html js ├─common.js ├─index.js ├─jquery-1.8.3.min.js └─jquery_and_jqueryui.js less └─style.less
还行,但是对于很深的目录缺点也很明显,例如出现这样的显示情况:
Rich库的使用示例
要自行完全实现Linux的树形目录比较复杂,所幸python有个第三方库
rich
中的Tree模块能支持彩色和树形输出。安装命令:
pip install rich
详细使用方式可以参考官方文档:https://rich.readthedocs.io/en/stable/
Tree模块的使用示例:https://github.com/willmcgugan/rich/blob/master/examples/tree.py
这个官方的代码示例就是专门用来树形显示目录的,我们可以复制粘贴到jupyter中稍微改改玩一下。
上述代码底部修改的部分:
directory = os.path.abspath("test") tree = Tree( f":open_file_folder: [link file://{directory}]{directory}", guide_style="bold bright_blue", ) walk_directory(pathlib.Path(directory), tree) print(tree)
显示效果比Linux的tree命令更秀。不过这个脚本兼容性较差,Windows控制台并不支持显示图标之类的,导致会出现乱码:
调用Tree模块实现仿Linux树形显示目录效果
由于官方自带案例秀过头了兼容性不太好,所以我们自行编码:
""" 小小明的代码 CSDN主页:https://blog.csdn.net/as604049322 """ __author__ = '小小明' import os import sys import rich from rich.text import Text from rich.tree import Tree def get_file_size(file): size = os.path.getsize(file) if size == 0: return "空文件" num = 0 while size > 1024: size /= 1024 num += 1 unit = ["", "KB", "MB", "GB", "TB"] return f"{size:.2f}".rstrip(".0") + unit[num] def show_dir(path, tree=None): if tree is None: tree = Tree(f"[bold magenta]{os.path.abspath(path)}") for file in os.listdir(path): file_path = os.path.join(path, file) if (os.path.isdir(file_path)): parent = tree.add(f"[bold magenta]{file}") show_dir(file_path, parent) else: text_filename = Text(file, "green") text_filename.highlight_regex(r"\.[^.]+$", "bold red") text_filename.append(f" ({get_file_size(file_path)})", "bold blue") tree.add(text_filename) return tree if __name__ == '__main__': rich.print(show_dir(sys.argv[1]))
将以上代码保存为
tree.py
,然后在jupyter中执行:from tree import show_dir import rich rich.print(show_dir("test"))
在Windows控制台中的执行结果:
python tree.py test
将脚本上传到Linux看下Linux下的执行效果:
可以看到我们自行编写的脚本已经能够同时适用于windows和Linux平台。
这就是tree模块核心逻辑的开发,至此我们的目标就已经达成。
-
Linux tree命令实例详解
2021-05-08 21:05:49关于treetree以树状格式列出目录的内容。 这是一个非常简洁实用的程序,您可以在命令行中使用它来查看文件系统的结构。描述tree是一个递归目录列表程序,它生成一个深度缩进的文件列表(如果设置了LS_COLORS环境变量...关于tree
tree以树状格式列出目录的内容。 这是一个非常简洁实用的程序,您可以在命令行中使用它来查看文件系统的结构。
描述
tree是一个递归目录列表程序,它生成一个深度缩进的文件列表(如果设置了LS_COLORS环境变量,则会着色)并输出为tty。 如果没有参数,树将列出当前目录中的文件。 当给出目录参数时,树依次列出在给定目录中找到的所有文件和/或目录。 树然后返回列出的文件和/或目录的总数。
默认情况下,遇到符号链接时,符号链接引用的路径将以以下格式打印在链接名称之后:
name -> real-path
如果给出`-l'选项并且符号链接指的是实际目录,则树将遵循符号链接的路径,就像它是真实目录一样。
安装
linuxidc@linuxidc:~$ sudo apt install tree
版本
linuxidc@linuxidc:~$ tree --version
tree v1.7.0 (c) 1996 - 2014 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro
tree语法
tree [-adfgilnopqrstuxACDFNS] [-L level [-R]] [-H baseHREF] [-T title]
[-o file name] [--nolinks] [-P pattern] [-I pattern] [--inodes]
[--device] [--noreport] [--dirsfirst] [--version] [--help]
[--filelimit #] [--si] [--prune] [--du] [--timefmt format]
[directory ...]
选项
--help
输出详细的使用情况列表。
--version
输出tree的版本。
-a
打印所有文件。 默认情况下,tree不会打印隐藏文件(以点“.”开头的文件)。 在任何情况下,tree都不会打印文件系统构造`.' (当前目录)和`..'(上一个目录)。
-d
仅列出目录。
-f
打印每个文件的完整路径前缀。
-i
tree不会打印缩进线。 与-f选项一起使用时很有用。
-l
跟随目录的符号链接,就像它们是目录一样。 避免了导致递归循环的链接。
-x
仅保留当前文件系统,与find -xdev一样。
-P pattern
仅列出与通配符模式匹配的文件。 注意:您必须使用-a选项来考虑以点“。”开头的那些文件。 匹配。 有效的通配符运算符是“*”(任何零个或多个字符),“?” (任何单个字符),`[...]'(括号内列出的任何单个字符(可选 - - 破折号)可用于字符范围:ex:[AZ])和`[^ ...]'( 任何单个字符未在括号中列出)和“|”分隔交替模式。
-I pattern
不要列出与通配符模式匹配的文件。
--prune
从输出中创建tree修剪空目录,与-P或-I一起使用时非常有用。
--filelimit #
不要下载包含多个#条目的目录。
--timefmt format
打印(隐含-D)并根据使用strftime语法的格式字符串格式化日期。
--noreport
忽略在tree列表末尾打印文件和目录报告。
-p
打印每个文件的保护(根据ls -l)。
-s
打印每个文件的大小以及名称。
-u
打印文件的用户名或UID #(如果没有可用的用户名)。
-g
打印文件的组名称或GID #(如果没有可用的组名称)。
-D
打印列出文件的上次修改时间的日期。
--inodes
打印文件或目录的inode编号
--device
打印文件或目录所属的设备编号
-F
根据ls -F,为目录添加一个' /',为套接字文件添加一个' =',为可执行文件添加一个' *',为FIFO添加一个' |'
-q
将文件名中的不可打印字符作为问号打印,而不是使用默认胡萝卜表示法。
-N
按原样打印不可打印的字符,而不是默认的胡萝卜表示法。
-r
按反向字母顺序对输出进行排序。
-t
按上次修改时间而不是按字母顺序对输出进行排序。
--dirsfirst
在文件之前列出目录。
-n
始终关闭着色,由-C选项覆盖。
-C
如果未设置LS_COLORS环境变量,则使用内置颜色默认值始终打开颜色。 用于将输出着色到管道。
-A
当打印压痕线时,打开ANSI线图形hack。
-S
打开ASCII线图形(使用linux控制台模式字体时很有用)。 此选项现在等效于`charset=IBM437',最终将被折旧。
-L level
目录树的最大显示深度。
-R
递归地遍历树的每个级别目录(请参见-L选项),并在每个目录下执行树,再次添加`-o 00Tree.html'作为一个新选项。
-H baseHREF
打开HTML输出,包括HTTP引用。适用于ftp站点。当使用HTML输出时,baseHREF给出基本ftp位置。也就是说,本地目录可能是“/local/ftp/pub”,但是它必须被引用为“ftp://hostname.organiz.domain/pub”(baseHREF应该是“ftp://hostname.organiz.domain”)。提示:不要使用带有此选项的ANSI行,并且在目录列表中不要给出多个目录。如果您想通过CSS样式表使用颜色,除了这个选项外,还可以使用-C选项强制输出颜色。
-T title
在HTML输出模式下设置标题和H1标题字符串。
--charset charset
设置输出HTML和绘图时使用的字符集。
--nolinks
关闭HTML输出中的超链接。
-o file name
将输出发送到文件名。
tree 实例
linuxidc@linuxidc:~$ tree
显示tree中当前目录和子目录的内容。 输出采用图形形式,类似于以下示例:
.
├── examples.desktop
├── linuxidc.com
│ ├── linuxidc
│ ├── linuxidc.c
│ ├── linuxidc.com
│ ├── linuxidc.sh
│ └── share
│ ├── Linux公社.txt
│ ├── Linux公社www.linuxidc.com测试文件.txt
│ └── www.linuxidc.com.png
├── linux.linuxidc.com
├── www.linuxidc.com
├── 公共的
├── 模板
├── 视频
├── 图片
├── 文档
├── 下载
├── 音乐
└── 桌面
├── linuxidc.com
├── linux.linuxidc.com
├── m.linuxidc.com
├── www.linuxidc.com
└── www.linuxidc.com.png
16 directories, 9 files
linuxidc@linuxidc:~/linuxidc.com$ tree -I 'linuxidc*|bin|lib'
显示树,没有以linuxidc开头,也没有包含模式中指定的'bin'或'lib'。
linuxidc@linuxidc:~$ tree -P 'l*'
使用大写“P”,您可以列出带有模式的文件。 此模式示例显示仅包含以l开头的目录的树或包含以l开头的文件的目录。
linuxidc@linuxidc:~$ tree -p
使用小写的“p”,您可以列出一个树,它也显示文件权限。
只显示一层目录
linuxidc@linuxidc:~$ tree -Ld 1 /home/
或者
linuxidc@linuxidc:~$ tree -L 1 -d /home/linuxidc
查看某一个目录的文件结构
linuxidc@linuxidc:~$ tree /home/linuxidc
-
Tree Shaking概念详解
2020-09-28 11:13:57Tree Shaking 值的就是当我引入一个模块的时候,我不引入这个模块的所有代码,我只引入我需要的代码,这就需要借助 webpack 里面自带的 Tree Shaking 这个功能来帮我们实现。 官方有标准的说法:Tree-shaking的本质...这篇文章写于两年前,前端的发展日新月异,新的构建工具已经开始崭露头角。Vite已经出来很久了,新版本也比较稳定,推荐大家学习这一款构建工具。
Tree Shaking 指的就是当我引入一个模块的时候,我不引入这个模块的所有代码,我只引入我需要的代码,这就需要借助 webpack 里面自带的 Tree Shaking 这个功能来帮我们实现。
官方有标准的说法:Tree-shaking的本质是消除无用的js代码。无用代码消除在广泛存在于传统的编程语言编译器中,编译器可以判断出某些代码根本不影响输出,然后消除这些代码,这个称之为DCE(dead code elimination)
在 webpack 项目中,有一个入口文件,相当于一棵树的主干,入口文件有很多依赖的模块,相当于树枝。实际情况中,虽然依赖了某个模块,但其实只使用其中的某些功能。通过 Tree-Shaking,将没有使用的模块摇掉,这样来达到删除无用代码的目的。
在production 模式下不用在webpack.config.js中配置
optimization: {
usedExports: true}
当在development模式下配置tree shaking时:
webpack.config.js//HtmlWebpackPlugin //当我们整个打包过程结束的时候,自动生成一个html文件, //并把打包生成的自动引入到html这个文件中; var HtmlWebpackPlugin = require('html-webpack-plugin') const path = require('path') const { CleanWebpackPlugin } = require('clean-webpack-plugin') const webpack = require('webpack') module.exports = { //打包模式,当为‘production’,打包后的文件会被压缩, //当为‘development’时打包后的文件不会被压缩,按照开发环境进行打包 mode: 'development', //在开发者模式中SourceMap默认已经被配置在项目里了。 // devtool: 'none', //关闭SourceMap //cheap:在生成SourceMap的时候,可以不带列信息,只带行信息,不要包含loader里面的SourceMap的生成, //只对业务代码进行SourceMap的生成 //module:对loader里面的代码也进行一个SourceMap的生成 //eval:eval是一种执行方式 devtool: 'cheap-module-eval-source-map', //打开SourceMap // devtool: 'cheap-module-source-map', //要线上的代码可以映射 // 打包的入口文件 entry: './src/index2.js', // entry: { // main: './src/index2.js' // }, devServer: { contentBase: './dist', //我们要在哪一个目录下去启动这个服务器 open: true, //会自动的打开一个浏览器,然后自动访问服务器的地址(localhost:8080) hot: true, //指是否支持热更新(hmr) hotOnly: true, //即使不支持hmr或者hmr有问题,也不刷新浏览器 proxy: { '/api': { //当访问localhost:8080/api的时,它会直接帮你转发到http://localhost:3000 target: 'http://localhost:3000', pathRewrite: { '^/api': '' } } } }, module: { rules: [{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' }, { test: /\.(png|jpg|gif)$/, use: { loader: 'url-loader', options: { //url-loader会把图片转化成一个base64的字符串, //然后直接放到bundle.js里,而不是单独生成一个图片文件, //好处:不用再额外的请求图片的地址,省了一次http请求; //缺点:如果图片特别大过大,打包生成的js文件就会很大, //那么加载js文件的时间就会很长,所以在一开始很长的时间里,页面上什么都显示不出来; //所以,url-loader最佳的使用方式:加一个limit //如果图片小于limit的值就把图片变为一个base64的字符串放到打包好的js中, //若大于limit的值,就以file-loader的生成一个图片放到dist目录下。 limit: 8192, //好处是可以对小图片的http请求数减少,提升网页加载数度 name: 'images/[name].[hash].[ext]' } } }, { test: /\.(css|scss|less)$/, //"css-loader":会帮我们分析出几个css文件之间的关系,最终把这些css文件合并成一段css; //"style-loader":会把‘css-loader’生成的内容挂在到页面的head部分 //在webpack的配置中,loader是有先后执行顺序的, //loader的执行顺序是从下到上,从右到左; //“sass-loader”会先对sass代码进行翻译,翻译为css代码后给到css-loader, //都处理好了之后再交给‘style-loader’挂在到页面上 //postcss-loader会自动添加css3的厂商前缀;比如: transform: translate(100px, 100px) use: [ 'style-loader', { loader: 'css-loader', options: { importLoaders: 2, modules: true //使得css模块化, } }, 'postcss-loader', 'sass-loader' ] }, { // 可以打包字体文件 test: /\.(eot|ttf|svg)$/, use: { loader: 'file-loader' } } ] }, // 打包的出口文件 output: { // 打包后的文件名 // filename: 'bundle.js', filename: '[name].js', //name就是entry值的key:'main','sub' // 打包后的文件目录为'dist' path: path.resolve(__dirname, 'dist'), publicPath: '/' //表示的是我所有的打包生成的文件之间的引用前面都加一个根路径 }, //plugin可以在webpack运行到某个时刻的时候,帮你做一些事情(类似生命周期函数) plugins: [ // CleanWebpackPlugin可以在每次打包的时候帮我们对dist目录做一个清空 new CleanWebpackPlugin(), new HtmlWebpackPlugin({ //HtmlWebpackPlugin帮我们自动的生成一个dist目录下的html文件 template: './src/index.html' }), //HotModuleReplacementPlugin帮我们实现HMR new webpack.HotModuleReplacementPlugin() ], //在开发模式下配置 tree shakeing optimization: { usedExports: true } }
在 package.json 中配置:
{ "name": "webpack-demo", //@babel/polyfill和css文件不使用tree shaking "sideEffects": [ "@babel/polyfill", "*.css" ], "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "bundle": "webpack", "watch": "webpack --watch", "start": "webpack-dev-server", "server": "node server.js" }, "author": "susie", "license": "ISC", "devDependencies": { "@babel/core": "^7.5.4", "@babel/plugin-transform-runtime": "^7.5.0", "@babel/preset-env": "^7.5.4", "@babel/preset-react": "^7.0.0", "autoprefixer": "^9.6.1", "babel-loader": "^8.0.6", "clean-webpack-plugin": "^3.0.0", "css-loader": "^3.0.0", "file-loader": "^4.0.0", "html-webpack-plugin": "^3.2.0", "node-sass": "^4.12.0", "postcss-loader": "^3.0.0", "sass-loader": "^7.1.0", "style-loader": "^0.23.1", "url-loader": "^2.0.1", "webpack": "^4.35.3", "webpack-cli": "^3.3.5", "webpack-dev-server": "^3.7.2" }, "dependencies": { "@babel/polyfill": "^7.4.4", "@babel/runtime": "^7.5.4", "@babel/runtime-corejs2": "^7.5.4", "react": "^16.8.6", "react-dom": "^16.8.6" } }
如果需要对某个模块不进行Tree Shaking
"sideEffects": ["@babel/poly-fill"], //该模块不进行Tree Shaking
为什么某些引入模块不希望进行Tree Shaking呢?
下面引入的style.css模块,如果也使用tree shaking,由于css文件没有导出任何模块,那么就有可能在打包的时候该引入模块就被摇晃掉了,导致bug。
在package.json中进行配置,即匹配到的任何css文件都不进行Tree Shaking
不使用Tree Shaking打包时,可以看到打包文件中exports provided: add, mins两种方法前端的学习不是一蹴而就,不积跬步无以至千里,不积小流无以成江海。持续不断的努力才能让你我有所收获,专业的知识还得到机构去学习,培训机构的设立有其存在的必然性,你钱花对了吗?
推荐阅读:
5分钟学会 vue 路由守卫
10分钟搞懂vuex
浅谈hooks
vue 组件设计原则
深入解读 vue 修饰符 sync -
AVLTree遍历
2020-04-13 10:55:37//因为BF为正,因此我们将整个树进行右旋(顺时针旋转), if (height(tree.left) - height(tree.right) == 2) {//打破平衡 if (key.compareTo(tree.left.key) ){//新插入的值和将要插在某个节点下面的值进行比较 , /... -
Vue实现一个Tree组件
2020-12-26 23:20:39Tree组件在实际应用中非常广泛,例如省市县地域的展现.一般一些包含从属关系的数据都可以使用Tree组件来进行展示,下面通过一个实战的demo来深入学一下实现一个Tree组件所要了解的原理和实现细节.本文实现的功能包含... -
OpenCV实现SIFT+KD tree+RANSAC图像拼接
2014-09-29 22:31:22在VC2010环境下实现sift+kd tree+RANSAC图像拼接,本人已经成功调试。 -
两棵el-tree的节点跨树拖拽实现
2020-09-17 09:40:30在使用element-ui框架时,我们经常会用到el-tree组件。该组件支持在树上任意拖拽节点,但默认不支持将节点拖拽到树的外部,如一个外部div内,或另一棵el-tree上。 关于如何将树上的节点拖拽到一个外部容器内(如一个... -
Tree-Shaking原理
2020-02-10 22:42:25Tree-Shaking性能优化实践 - 原理篇 一. 什么是Tree-shaking 先来看一下Tree-shaking原始的本意 上图形象的解释了Tree-shaking 的本意,本文所说的前端中的tree-shaking可以理解为通过工具"摇"我们的JS... -
深入理解MySQL索引之B+Tree
2019-01-13 21:17:25B+Tree是B TREE的变种,B TREE能解决的问题,B+TREE也能够解决(降低树的高度,增大节点存储数据量) B+Tree扫库和扫表能力更强。如果我们要根据索引去进行数据表的扫描,对B TREE进行扫描,需要把整棵树遍历一遍,... -
Python Tree库绘制多叉树的用法介绍
2020-09-18 21:28:18Python Tree库绘制多叉树的用法介绍 -
BTree和B+Tree详解
2019-09-01 10:28:43BTree和B+Tree详解二叉查找树二叉树的性质平衡二叉树(AVL Tree)B-Tree(平衡多路查找树)B+TreeB+Tree和B-Tree的区别 最近想重新复习数据结构的知识,想了解B树和B+树的区别,看了挺多篇博文的,但看了还是懵懵的... -
B-Tree和B+Tree
2019-08-12 10:49:48目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree作为索引结构,在本文的下一节会结合存储器原理及计算机存取原理讨论为什么B-Tree和B+Tree在被如此广泛用于索引,这一节先单纯从数据结构角度描述它们。... -
Python小白记录2:Decision Tree中tree.plot_tree参数解释
2021-10-24 19:16:551.参考网站:sklearn.tree.plot_tree — scikit-learn 1.0 documentationhttps://scikit-learn.org/stable/modules/generated/sklearn.tree.plot_tree.html2. 中英文解释(自己 Parameters: 1. decision_tree:... -
vue el-select与el-tree的结合使用 支持可搜索树型
2022-03-10 17:47:33引入selectTree组件 import { selectTree } from '@/components' export default { components: { selectTree }, data() { defaultData:{ managementStationId:'1478570186653609986', ... -
Android中Tree的使用
2022-01-29 20:31:00Android中Tree的使用: Tree的简单实例: 01.创建Tree //创建二叉树数据结构:节点值、左节点、右节点 data class TreeNode(var leftNode: TreeNode? = null, var value: Int? = null, var rightNode: TreeNode?... -
SpeedTree 003
2022-02-21 15:40:541.树的粗细 2.树的继承关系 3.重力 4.独立显示某一部分 独立显示——选中并按下F 显示全部——选中独立显示的部分并按下 CTRL+F...speedtree中的材质栏中先新建一个材质,然后将材质包中的图片对应... -
react实现tree组件
2019-09-06 14:58:22return (<CreatNode handle={this.props.handle} tree={this.totree(this.props.data,0)}/>); } totree(list,parId) { let obj = {}; let result = []; //将数组中数据转为键值对结构 (这里的数组和obj会相互... -
【每天一个 Linux 命令】tree命令
2022-01-06 22:47:01本文主要讲解Linux系统上的tree命令的详细使用方法。 tree 命令是一个小型的跨平台命令行程序,用于递归地以树状格式列出或显示目录的内容。它输出每个子目录中的目录路径和文件,以及子目录和文件总数的摘要。 tree... -
jstree文档简介
2018-04-26 14:32:12jstree中文github文档2017年04月11日 15:22:51阅读数:29839jstreeBala...bala...这段就不翻译了. jstree就是个基于JQUERY的树形控件.jsTree is jquery plugin, that provides interactive trees. It is absolutely... -
vue 实现 tree 树形大量数据的多功能虚拟滚动-Virtual Tree
2021-11-01 16:09:07由于业务开发过程中有树形数据,因此需要用到tree树形组件,鉴于项目是基于vue的,前期的ui组件库选型就是element-ui,于是采用了el-tree组件。但在实际使用过程中出现了几个意外。 卡顿假死 server端返回全部数据... -
深入理解什么是LSM-Tree
2019-05-21 20:03:23BigTable(2006年),为开源界在大数据领域带来了无数的灵感,其中在 “BigTable” 的论文中很多很酷的方面之一就是它所使用的文件组织方式,这个方法更一般的名字叫 Log Structured-Merge Tree。在面对亿级别之上的... -
iview下拉菜单树的iview-select-tree的使用以及iview-select-tree的实现的源代码
2020-04-01 15:59:10iview下拉菜单树的iview-select-tree的使用以及iview-select-tree的实现的源代码公众号前言单选效果多选效果validate验证效果iview-select-tree的集成的npm的地址集成iview-select-tree 公众号 大家可以直接微信... -
【tree shaking】Tree-shaking之副作用
2021-11-23 15:18:02由于Tree-shaking主要依赖于ES6的模块化import和export,我们都知道ES6的module只能是顶层出现,和运行时无关,不能运行时加载,Tree-shaking主要就是依靠这个基础进行静态分析,不执行代码就从字面量对代码进行分析... -
LayUI—tree树形结构的使用
2019-09-01 21:46:46树形结构在实际开发中很长用到,...官网地址:https://www.layui.com/v1/doc/modules/tree.html 先看一下显示的效果图。 点击节点右面会显示对应部门的详情信息,可以修改。可以自定义按钮添加部门,也可以直接... -
BTree和B+Tree区别
2019-04-15 17:28:44在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。 二叉查找树 二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大... -
[CGAL] 3D快速相交和距离计算(AABB_tree)- 三角形碰撞检测
2020-08-06 16:18:04官方文档:3D Fast Intersection and Distance Computation (AABB Tree) AABB Tree简介 「AABB Tree」AABB树组件提供了静态数据结构和算法,以支持对有限的3D对象集执行相交和距离查询。可以查询存储在数据结构中的...