结尾
学习html5、css、javascript这些基础知识,学习的渠道很多,就不多说了,例如,一些其他的优秀博客。但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
这个概念,我相信大多数同学都是了解的。什么,你不懂?
不懂没关系,我可以教你啊(不过那是另外的价钱,哈哈 ???)
走远了,兄弟,让我们言归正传:tree shaking
如何工作的呢?
tree shaking
如何工作的呢?
虽然 tree shaking
的概念在 1990 就提出了,但直到 ES6
的 ES6-style
模块出现后才真正被利用起来。
在ES6
以前,我们可以使用CommonJS
引入模块:require()
,这种引入是动态的,也意味着我们可以基于条件来导入需要的代码:
let dynamicModule;
// 动态导入
if (condition) {
myDynamicModule = require(“foo”);
} else {
myDynamicModule = require(“bar”);
}
但是CommonJS
规范无法确定在实际运行前需要或者不需要某些模块,所以CommonJS
不适合tree-shaking
机制。在 ES6
中,引入了完全静态的导入语法:import
。这也意味着下面的导入是不可行的:
// 不可行,ES6 的import是完全静态的
if (condition) {
myDynamicModule = require(“foo”);
} else {
myDynamicModule = require(“bar”);
}
我们只能通过导入所有的包后再进行条件获取。如下:
import foo from “foo”;
import bar from “bar”;
if (condition) {
// foo.xxxx
} else {
// bar.xxx
}
ES6
的import
语法可以完美使用tree shaking
,因为可以在代码不运行的情况下就能分析出不需要的代码。
看完上面的分析,你可能还是有点懵,这里我简单做下总结:因为tree shaking
只能在静态modules
下工作。ECMAScript 6
模块加载是静态的,因此整个依赖树可以被静态地推导出解析语法树。所以在 ES6
中使用 tree shaking
是非常容易的。
tree shaking
的原理是什么?
看完上面的分析,相信这里你可以很容易的得出题目的答案了:
-
ES6 Module
引入进行静态分析,故而编译的时候正确判断到底加载了那些模块 -
静态分析程序流,判断那些模块和变量未被使用或者引用,进而删除对应代码
common.js 和 es6 中模块引入的区别?
但到这里,本篇文章还没结束。从这道题目我们可以很容易的引申出来另外一道“明星”面试题:common.js 和 es6 中模块引入的区别?
这道题目来自冴羽
大佬的阿里前端攻城狮们写了一份前端面试题答案,请查收[1]
这里就直接贴下他给出的答案了:
CommonJS
是一种模块规范,最初被应用于 Nodejs
,成为 Nodejs
的模块规范。运行在浏览器端的 JavaScript
由于也缺少类似的规范,在 ES6
出来之前,前端也实现了一套相同的模块规范 (例如: AMD
),用来对前端模块进行管理。自 ES6
起,引入了一套新的 ES6 Module
规范,在语言标准的层面上实现了模块功能,而且实现得相当简单,有望成为浏览器和服务器通用的模块解决方案。但目前浏览器对 ES6 Module
兼容还不太好,我们平时在 Webpack
中使用的 export
和 import
,会经过 Babel
转换为 CommonJS
规范。在使用上的差别主要有:
1、CommonJS
模块输出的是一个值的拷贝,ES6
模块输出的是值的引用。
后话
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
对于面试,说几句个人观点。
面试,说到底是一种考试。正如我们一直批判应试教育脱离教育的本质,为了面试学习技术也脱离了技术的初心。但考试对于人才选拔的有效性是毋庸置疑的,几千年来一直如此。除非你有实力向公司证明你足够优秀,否则,还是得乖乖准备面试。这也并不妨碍你在通过面试之后按自己的方式学习。
其实在面试准备阶段,个人的收获是很大的,我也认为这是一种不错的学习方式。首先,面试问题大部分基础而且深入,这些是平时工作的基础。就好像我们之前一直不明白学习语文的意义,但它的意义就在每天的谈话间。
所谓面试造火箭,工作拧螺丝。面试往往有更高的要求,也迫使我们更专心更深入地去学习一些知识,也何尝不是一种好事。