vivianli

Results 5 comments of vivianli

### Q1:描述异步模块加载实现原理,amd/cmd中的实现方案,webpack中的实现方案 在此先说说思路,在看异步加载之前,需要先熟悉同步加载的机制,我看了YouTube一个讲解视频[Ronen Amiel - Build Your Own Webpack](https://www.youtube.com/watch?v=Gc9-7PBqOC8&list=LLHK1mTHpwrUeYgF5gu-Kd4g),研究懂原理后,在最基本的同步加载之上,处理了module缓存跟循环引用的问题,实现代码见[https://github.com/lipeiwei-szu/minipack](https://github.com/lipeiwei-szu/minipack)。 然后说到异步加载,我喜欢根据结果推断实现逻辑,这样子比较快。所以我基于webpack写了一个异步加载的demo,分析了输出的代码,从而得知是通过**promise + jsonp**实现。**如果这个异步模块没有加载过,会通过jsonp去请求,然后缓存到同步的modules中**。这是大致的思路。具体原理及研究过程我写在了这篇文章中[如何实现一个支持异步加载的打包工具(二)](https://github.com/lipeiwei-szu/blog/issues/3),文章底下还画了一个流程图。 一共有三篇文章 [如何实现一个支持异步加载的打包工具(一)](https://github.com/lipeiwei-szu/blog/issues/2) 基于[Ronen Amiel - Build Your Own Webpack](https://www.youtube.com/watch?v=Gc9-7PBqOC8&list=LLHK1mTHpwrUeYgF5gu-Kd4g)实现的minipack,并处理了module缓存跟循环引用的问题 [如何实现一个支持异步加载的打包工具(二)](https://github.com/lipeiwei-szu/blog/issues/3) 分析webpack的异步加载机制 ~~[如何实现一个支持异步加载的打包工具(三)](https://github.com/lipeiwei-szu/blog/issues/4)~~(**todo**) 完善[https://github.com/lipeiwei-szu/minipack](https://github.com/lipeiwei-szu/minipack),参考webpack的实现,为其加上异步加载的功能 (**cmd/amd的实现方案还没看,先欠着**)

### Q2:举几个你认为非常经典的案例,来说明前端基础知识在日常工作中的作用 起初看到这个问题,我不知道磐冲大佬这个前端基础的定义具体指啥,感觉这道题可以从“输入URL到页面显示经历了什么”这道题扩展开来,前端基础会涉及到这问题的整个链路,包括javascript/html/css、浏览器、网络等 **(http缓存)=> dns解析 => tcp连接 => http连接 => 解析并渲染(并逐步请求页面中的其它资源)** **我认为,前端基础知识能够将web的整个知识面串联起来,以点成面,并从中找到可以优化的点** 以下将列举一些 #### 浏览器缓存 1. 为了使客户端尽快显示页面,客户端跟服务端之间有指定的一套缓存机制,比如在一定时间内直接使用浏览器缓存(**http强缓存**),超过指定时间后用文件指纹(**if-none-match/etag**)或文件修改时间(**if-modified-since/last-modified**)去请求服务端校验(协商缓存)。如果熟知这一点,想要利用http缓存,那么就得给资源文件设置独一无二的路径名称。假设一个图标更改前名称是`icon.png`,更改后还是叫`icon.png`,那么至少在强缓存期间,这个文件不可能得到更新。这也是**文件指纹**的重要性,目前多种打包工具都会提供这种功能。 #### 浏览器层面的tcp连接限制 1. 如果处于http1.1 1. 既然对同一域名做了限制,那么可以**切分为多个域名**,有的放图片,有的放视频,这不就可以突破限制了吗!这里还有一点好处,在原来未切分域名的时候,就算是请求一个小图标,主站的cookie也会被带上,十分浪费流量。 2. 减少连接数,我们也可以将一些体积较小的资源合并起来,这也就是**雪碧图**、**资源内联**等 2. 升级**http2**,从而实现单个tcp连接并行发送http #### dns预解析 1....

### Q3:画一张业务大图,来说明目前负责的业务与公司整体业务的关系 在公司主要是负责面向用户的app跟web,简而言之就是资金的入口,为用户提供出借的渠道。然后还配合着各种运营策略等等 ![image](https://user-images.githubusercontent.com/6500078/76858886-424c4f80-6893-11ea-8735-982777ce1fea.png)

建议用 https://github.com/promises-aplus/promises-tests 的测试用例跑一下,还是有一些错误的。这个测试用例可以帮助找出问题。可以看看文档,添加的测试代码如下 ```javascript // 测试代码 start /** * Promise/A+规范测试,见https://github.com/promises-aplus/promises-tests * install:npm i -g promises-aplus-tests * test:promises-aplus-tests xxx.js */ Promise.deferred = function () { // 延迟对象 const defer = {}...

后面那点补充说明让我解除了困惑,之前实现Promise的时候就觉得promise.then不是微任务吗,那里面用的怎么还是setTimeout呢。原来是没办法模拟微任务