Open vianvio opened 4 years ago
在此先说说思路,在看异步加载之前,需要先熟悉同步加载的机制,我看了YouTube一个讲解视频Ronen Amiel - Build Your Own Webpack,研究懂原理后,在最基本的同步加载之上,处理了module缓存跟循环引用的问题,实现代码见https://github.com/lipeiwei-szu/minipack。
然后说到异步加载,我喜欢根据结果推断实现逻辑,这样子比较快。所以我基于webpack写了一个异步加载的demo,分析了输出的代码,从而得知是通过promise + jsonp实现。如果这个异步模块没有加载过,会通过jsonp去请求,然后缓存到同步的modules中。这是大致的思路。具体原理及研究过程我写在了这篇文章中如何实现一个支持异步加载的打包工具(二),文章底下还画了一个流程图。
一共有三篇文章
如何实现一个支持异步加载的打包工具(一) 基于Ronen Amiel - Build Your Own Webpack实现的minipack,并处理了module缓存跟循环引用的问题
如何实现一个支持异步加载的打包工具(二) 分析webpack的异步加载机制
如何实现一个支持异步加载的打包工具(三)(todo)
完善https://github.com/lipeiwei-szu/minipack,参考webpack的实现,为其加上异步加载的功能
(cmd/amd的实现方案还没看,先欠着)
起初看到这个问题,我不知道磐冲大佬这个前端基础的定义具体指啥,感觉这道题可以从“输入URL到页面显示经历了什么”这道题扩展开来,前端基础会涉及到这问题的整个链路,包括javascript/html/css、浏览器、网络等
(http缓存)=> dns解析 => tcp连接 => http连接 => 解析并渲染(并逐步请求页面中的其它资源)
我认为,前端基础知识能够将web的整个知识面串联起来,以点成面,并从中找到可以优化的点
以下将列举一些
icon.png
,更改后还是叫icon.png
,那么至少在强缓存期间,这个文件不可能得到更新。这也是文件指纹的重要性,目前多种打包工具都会提供这种功能。这里涉及到的基础点是事件循环机制,也就是one macro task => all micro task => render这一套循环。这里需要提到fps(frame per second)这个概念,如果能达到60fps(一秒钟渲染60次,也就是每16.6ms渲染一次),页面将会很流畅。所以我们要保证每个循环中的macro task
、micro task
不要超过16.6ms,不然页面就会卡顿,比如用户的输入没有及时显示出来、用户点击后无及时响应等等。在此我想到了react 16的fiber分片渲染,让交互响应更快就是它出现的缘由
在公司主要是负责面向用户的app跟web,简而言之就是资金的入口,为用户提供出借的渠道。然后还配合着各种运营策略等等
Q1的文章沉淀非常细致,而且还加上了简易版的webpack,点个赞,后面如果补上amd和cmd的话,整个动态模块能力基本都全了。
Q2是因为觉得你在基础部分经常有深入,所以希望能通过你的实际例子,结合日常工作,给其他同学证明一下,研究基础和底层不是只为了面试的。答案里聊到fiber部分是一个很好的例子,不过还是里我们日常有点远,有时间可以再举几个接地气的。
问题列表: