首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

webpack提取公共js

一、基础概念

Webpack是一个模块打包工具。在构建过程中,将多个模块(如JavaScript文件)按照一定的规则组合在一起。提取公共JS是指把多个入口文件或者模块中共同引用的JavaScript代码抽取出来,形成一个单独的文件。这样做的好处是可以减少代码冗余,提高缓存利用率,加快页面加载速度。

二、优势

  1. 减少文件大小
    • 避免在每个页面或模块中重复包含相同的代码,从而减小最终打包文件的大小。
  • 提高缓存命中率
    • 当公共JS被单独提取出来后,只要公共JS没有改变,在不同的页面加载时浏览器可以直接从缓存中读取,而不需要重新下载。

三、类型(从提取方式角度)

  1. 按需提取
    • 根据入口点的依赖关系,精确地提取每个入口点共享的代码。例如,在多页面应用中,不同页面可能有部分相同的第三方库或者工具函数,按需提取可以确保这些公共部分被单独打包。
  • 整体提取
    • 将所有模块中可能共享的代码统一提取到一个公共文件中。这种方式相对简单,但可能会导致公共文件包含一些不必要的代码。

四、应用场景

  1. 多页面应用
    • 在一个包含多个HTML页面且每个页面都有自己独立的JavaScript入口文件的应用中,不同页面可能会引用相同的库(如jQuery)或者通用的工具函数。通过提取公共JS,可以优化整个应用的加载性能。
  • 大型单页面应用
    • 当应用规模较大,模块众多时,不同功能模块之间可能存在共享代码,提取公共JS有助于提高构建效率和运行时的性能。

五、可能出现的问题及解决方法

  1. 公共JS文件过大
    • 原因:可能是因为提取规则过于宽泛,导致一些不必要的代码被包含进来。
    • 解决方法:仔细调整Webpack的配置中的splitChunks参数。例如,可以设置最小共享大小(minSize),只有当模块被引用的次数超过一定阈值(minChunks)且模块大小达到最小共享大小时才被提取到公共JS中。
    • 示例代码(在Webpack配置文件中的optimization.splitChunks部分):
    • 示例代码(在Webpack配置文件中的optimization.splitChunks部分):
  • 缓存失效问题
    • 原因:如果公共JS文件频繁改变,即使只是其中一小部分代码改变,整个公共JS文件都会重新构建并导致缓存失效。
    • 解决方法:可以使用内容哈希(contenthash)。Webpack会根据文件内容生成唯一的哈希值,当文件内容改变时,哈希值也会改变。
    • 示例代码(在输出配置部分):
    • 示例代码(在输出配置部分):
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • React多页面应用3(webpack性能提升,包括打包性能、提取公共包等)

    3.React多页面应用3(webpack性能提升,包括打包性能、提取公共包等)----2017.12.30 4.React多页面应用4(webpack自动化生成多入口页面)----2017.12.31...2.提取公共包 首先我们看下 首页 和 商城页 相同部分很不同部分 ? 几乎一模一样,好!...我们提取公共部分,放入一个组件中 我们在 app-> component -> common 目录下 新建 Seconds.jsx 公共组件 import React from 'react'; class...一切正常 3.开始提取 目标是: react react-dom 我们打包成 vendor.js 因为他们是第三方部,几乎不会变,除非你升级 组件的公共部分 我们打包成 common.js 组件独立的业务代码我们打包在对应的...npm run dev 看下效果 没提取之前 ? 提取之后 ? 一切正常 ?

    1.8K80

    React多页面应用4(webpack4 提取第三方包及公共组件)

    )---2018.04.08 3、React多页面应用3(webpack4 多页面实现)---2018.04.09 4、React多页面应用4(webpack4 提取第三方包及公共组件)---2018.04.10...今天我们来把 react,react-dom 放到 vendor.js,公共组件部分放到common.js, 因为 webpack3 的 CommonsChunkPlugin 被移除,所有今天我们要用到...1、公用代码做成公共组件 我们先来分析下什么算是公用代码? ? 红色部分是不一样的!其余部分重复了,我们可以做成公用组件!...6、重点部分,提取第三方包及公共组件 config-> webpack -> webpack.dev.conf.js 新增如下代码 optimization: { //包清单 runtimeChunk...多出来 三个文件分别是: manifest.js(包清单) vendor.js(第三方包,明显体积很大,这是开发环境,生产环境会再压缩) common.js(公共组件) 此时浏览器应该是空白,因为缺少这三个文件

    1.9K50

    ArcGIS根据相邻关系提取相邻面&提取面公共线

    如何把有相邻面的面全部给提出来 提取公共边 面转线 提取相邻边界公共线,注意勾选识别和存储面邻域信息 生成的线要素属性表中LEFT_FID 和 RIGHT_FID字段均不为-1即是该相邻面的公共线...按属性选择LEFT_FID为-1的字段,然后切换选择,导出要素即可获得公共边 公共边如图所示 原理(参考arcgis帮助) 1.在面几何中,外边界始终以顺时针方向存储。...3.如果两个面共用一部分边界,则将生成一条输出线表示该公共线段。该线的方向可以是任意的;LEFT_FID 和 RIGHT_FID 将相应地设置为左侧或右侧面要素 ID。...可以看出如果两个面之间如果存在公共边界,则输出的属性字段为该线左侧或右侧面要素 ID。...而要素ID不能为复数,故LEFT_FID 和 RIGHT_FID均为正数的字段即为公共边 提取相邻面 使用公共边选择建筑面图层即可提取出有相邻面的面 而提取不相邻的面只需要切换选择即可

    1.6K10

    Twitter是如何部署公共JS组件的?

    Twitter有一个对外开放的JS组件,widgets.js,其他站长可以把这个js嵌入到自己的网页中,就可以有Twitter的一些功能(类似新浪微博开放的JS组件) 为了让站长简单方便的集成,所有功能都在这一个...js文件中,引用时也不需要版本号 widgets.js 的访问量巨大,每秒30万次 所以,这个js的更新部署是个比较麻烦的任务,如何安全的部署新版,出现问题时把影响范围尽量降低?...CDN IP1 的请求会从源1获取 widgets.js,IP2 的请求会从源2获取 3....Origin 源 是上传 widgets.js 的地方,CDN 会从 Origin 获取最新的 widgets.js Origin 1 上是旧版,Origin 2 上是新版,流量被逐渐转移到 Origin...2,当部署完全成功后,widgets.js 会被拷贝到 Origin 1,然后把所有流量都转到 Origin 1 部署过程中发现问题的话,立即把所有流量转到 Origin 1,实现快速回退 widgets.js

    1.4K80

    在找一份相对完整的Webpack项目配置指南么?这里有

    文件,提取公共文件,模块热更新替换,开发与线上环境区分,使用jQuery插件的方式、页面资源引入路径自动生成(可指定生成位置),热更新编译模版文件自动生成webpack服务器中的资源路径,编写一个简单的插件...plugins设置webpack配置过程中所用到的插件 比如下方为使用webpack自带的提取公共JS模块的插件 // 插件配置 plugins: [ // 提取公共模块文件...设置公共模块 公共模块其实可以分为JS和CSS两部分(如果有提取CSS文件的话) 在公共文件的plugin中加入 // 提取公共模块文件 new webpack.optimize.CommonsChunkPlugin...[chunkhash:8]' : ''), name: 'common' }), 设置公共文件的提取源模块chunks,以及最终的公共文件模块名 公共模块的文件的提取规则是.../src/js/detail', // 提取jquery入公共文件 common: ['jquery'] }, 5.

    3.5K10
    领券