keven.wang

Results 3 comments of keven.wang

其实看怎么定义多路复用了,如果多路复用指的的事:一个 TCP 连接传输多个 HTTP 返回,HTTP 1.1 是有这个能力的,但因为 HTTP1.1 在一个 TCP 管道内的多个返回是采用排队的形式传送的,传输调度的单位是请求返回,所以一个返回阻塞了后面就要排队。而 HTTP2.0 对可以对 HTTP 响应内容的 Header 和 Body 拆分为数据帧,所以不会出现一个文件传输阻塞后,后面需要排队的问题。因为大家都拆分为数据帧了,传输后完成后才组装。 所以 HTTP1.1 和 HTTP2.0 都对一个 TCP 连接做了复用的优化,只是对传输的粒度控制不一样,HTTP2.0 粒度更小,效果更高,但丢包后的影响会更大,所以才有了 HTTP3.0 对整个进行优化。

说下我修改这段代码的意图:如果代码没有做改动,应该尽可能的让编译后的结果保持相同。但这个插件的moudule Id 是根据moudulePath生成的hash,因此只要路径有不同就会造成相同的代码编译出来的doule id 不一样,进而造成编译后的代码不一样。那那些因素会导致moudlePath不同呢?1. query。个别loader会允许通过指定文件的方式来对插件的功能做扩展或定制化,但如果配置不当这些扩展文件的路径可能会是绝对地址. 2. 版本号号,确实如你所说,有些情况下保留版本号是必要的,比如你确认依赖的了某个模块的文件。但还有一些情况则不一样,你依赖的只是一个loader,这些loader的不同版本编译出的结果可能是一样的,比如less。那么这种情况下保留版本号就没什么意义了。我觉得有两种可选的方案: 1. 把两个功能作为一个可选的feature,可以通过配置来开启 2. 始终启用这个功能,不同的版本通过锁版本之类的功能来解决

在我们项目内部,这两个问题都存在,而且这两两处引起错误的概率比造成问题的概率大的多,所以我提了这个PR。从另一个角度来讲,这个插件的功能是用来对引用的文件做编号的,决定这个编号的应该只和该文件位于项目中的位置有关系,至于版本、以及项目目录之外的一些因素应该没什么关系。就好比我的小区的行政分管单位变了或者我家装修了,但我的门牌号依然是有效的,快递员依然可以通过这个地址给我送快递。