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

React Native 拆包原理和实践

metro 介绍和打包流程 metro 是一种支持 ReactNative 的打包工具,我们现在也是基于他来进行拆包的,metro 打包流程分为以下几个步骤: Resolution:Metro 需要从入口点构建所需的所有模块的图...,要从另一个文件中找到所需的文件,需要使用 Metro 解析器。...,export 编译后就就转换成了 __d 与 __r 三、拆包的后遗症 1、按序加载基础包和业务包 将 RN 的 js 业务拆出了公共模块之后,在 bridge 加载 bundle 的时候需要优先加载...如果有些模块需要在其他 App 内复用,建议采用携程的模式,他们对路由进行了优化(没开源),管理起来应该会方便些。 4、路由表的调整 拆包之后路由表怎么维护呢?...但后来突然想明白,拆包的本质就是通过设置多个入口文件将代码给分割,那调试的时候我们直接将入口文件都在放在 index.js 里不就行了么。这样就实现了跟RN单包一样的调试。

5K21

前端-手摸手,带你用合理的姿势使用webpack4(下)

比如我有一个管理后台,它大部分的页面都是表单和 Table,我使用了一个第三方 table 组件,几乎后台每个页面都需要它,但它的体积也就 15kb,不具备单独拆包的标准,它就这样被打包到每个页面的 bundle...,所以本身自己也会写很多共用组件,比如各种封装好的搜索查询组件,共用的业务模块等等,如果按照默认的拆包规则,结果就不怎么完美了。...我们不时的会升级 UI 组件库来解决一些现有的 bugs 或使用它的一些新功能。所以建议将 UI 组件库也单独拆成一个包。...还是将这些组件打包到各自的 bundle 中?还是调整一下 minChunks: 2( 最小共用次数)?或者修改一下它的拆包规则?...耗时远大于它的执行时间了,所以建议不要将它单独拆包,而是将它内联到我们的 index.html 之中(index.html 本来每次打包都会变)。

1.3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    体积太大,怎么拆包?--vite

    首先说第一个问题,一般而言,一个前端页面中的 JS 代码可以分为两个部分: Initital Chunk和Async Chunk,前者指页面首屏所需要的 JS 代码,而后者当前页面并不一定需要,一个典型的例子就是...我们先通过具体的项目来体验一下 Vite 拆包,示例项目我已经放到了小册的 Gihub 仓库中,你可以对照着来学习。...需要说明的是,这是 Vite 2.9 版本之前的做法,而在 Vite 2.9 及以后的版本,默认打包策略更加简单粗暴,将所有的 js 代码全部打包到 index.js 中。...['lodash-es'], // 将组件库的代码打包 'library': ['antd', '@arco-design/web-react'], }...其实也很好理解,我们之前在munaulChunks中仅仅将路径包含 react 的模块打包到react-vendor中,殊不知,像object-assign这种 react 本身的依赖并没有打包进react-vendor

    4.2K100

    干货 | 从0到1,搭建一个体系完善的前端React组件库

    本文将从组件库的基础搭建开始,从开发、打包、发布、拆包、优化、自动化测试等各方面,由浅及深地进行介绍,给大家分享一个相对完善的组件库落地的过程。...但在实践过程中发现,每个组件都需要单独打包时,UMD的打包方式,会显著增大每个文件的基础体积;而且我们99% 的场景下,其实已经并不用再去兼容AMD、CMD等模块加载方式。...在确保我们的代码一定是通过node模块方式加载的时候,我们只需要打出commonjs2的模块即可。这一步的调整,显著地提升了打包速度,也明显减小了各个文件的打包体积。...为了使组件库的功能更加独立且通用,让UI组件与功能模块之间更好地解耦,我们需要对组件库进行拆子包处理。...这种拆分组件包的开发形式,组件库不再是所有功能都揉在一个仓库中,开发和维护将变得更加灵活且易于扩展。 拆包前,core的部分将随着功能的增加而越来越臃肿: ? 拆包后的结构: ?

    1.8K30

    vue、rollup、sass、requirejs组成的vueManager

    多余的话不说,本人按照效果图介绍下自己的拙建,强烈希望各位给予建议和指正。 ? 说明: 标题:一个普通的vue组件,利用requirejs加载完成。...二级菜单:测试vue-route动态注入路由的能力 业务组件:测试和模块rollup编译后vue实现的子系统的接入(按需加载)。 源码:github地址,需要切换为framework分支。...webpack也有按需拆包和加载的能力,但考虑到后期组件的增加,会让webpack的编译压力更大,暂缓之。 三、根据代码说事 ?...,特别点在于第三方业务模块的加载,我需要require完成后才会执行路由的跳转。.../dest/test.js') }); }); 注意: external节点用于排除不需要打包的模块,可以第三方的,也可以是本地的。

    1.9K60

    ​我是如何将网页性能提升5倍的 — 构建优化篇

    另外,系统本身的逻辑打的包也达到了 600kb 分析依赖关系 我们可以借助 webpack-bundle-analyzer 将打包后的内容展示为方便交互的树状图,我们可以很直观的看到有哪些比较大的模块,...如果放在 body 外,则会在业务代码被加载之后加载,模块中使用了该模块将会报错。 拆 vendor ?...这时我们需要自己去 webpack 设置一些规则,将我们想拆出来的依赖单独打包一个 vendor。 ?...动态 import 将 vendor 拆分后,依赖仍然会在首屏被加载,如果依赖不在首屏使用,仍然会造成网络资源的浪费,并阻塞页面渲染,对于没必要在首屏进行加载的依赖,我们可以采用动态 import 的方式...最终优化后,会发现模块已经被我们拆的非常均匀,并且只会在对应页面渲染时加载对应模块,这对首屏渲染速度有显著提升。

    2.4K20

    动态表单之表单组件的插件式加载方案

    那么这就引出一个需求,表单组件的插件式加载并应用的能力。 组件插件式加载方案的现状 关于异步加载,各平台上一搜索,大多数出来的都是一些 Webpack 代码分拆相关的内容。...一、Webpack 懒加载 Webpack 懒加载,也就是 Webpack 的拆包按需加载功能,其主要使用 import 方法进行静态资源的异步加载,具体使用方法为,代码中采用如下方式引入需要被拆包的文件...插件需要能够被注入依赖,例如项目中已经包含有 Lodash 或者 AntD 组件库的包,这时候插件模块中使用 Lodash 或者 AntD 组件库的话我们当然希望能够直接引用项目中已有的,而不是插件模块中重新引入一个...三、模块打包标准 由于我们团队使用的是 Webpack 的打包体系,因此想要保持技术栈统一,则要先从 Webpack 的打包入手。让我们将 Webpack 的模块化打包都试一下看看能得出什么。...需要被打包的代码块: export default { test: ()=>{ console.log('测试模块打包!')

    2.5K40

    首屏体验提升之不一样的代码拆分+预加载实现应用性能及体验兼得

    要么就需要引入组件预加载机制。...DEMO 演示 在线体验地址[5]react.lazy 正常拆包并加载效果.gif route-resource-preload 拆包并预加载效果.gif 正常懒加载(react.lazy)普通组件...,还会将preloadKey(开发者自定义的预加载标识)、import-module-url(import 模块路径)、chunk(output产物)三者之间的关系以json形式进行保存,并允许应用端访问...module federation(模块联邦) 组件预加载: 对于 webpack 的 module federation(模块联邦)而言,由于 module federation 打包出来的资源默认采用了按需动态加载的方案...革新开发者对组件懒加载的了解,减少开发者心智负担:开发者可以简单粗暴地基于页面维度对某个路由渲染的组件进行懒加载,不再需要担心懒加载的资源过大以至于加载时间过长影响页面渲染时间,避免开发者需要从组件维度去分析哪些组件需要使用懒加载

    50720

    构建Vite知识体系-项目性能优化

    将数据分为多个二进制帧,多个请求和响应的数据帧在同一个 TCP 通道进行传输,解决了之前的队头阻塞问题。Server Push,即服务端推送能力。...不过在需要兼容安卓端微信的 webview 时,我们需要将 build.cssTarget 设置为 chrome61,以防止 vite 将 rgba() 颜色转化为 #RGBA 十六进制符号的形式,出现样式问题...图片压缩一般使用 vite-plugin-imagemin来进行图片压缩产物拆包如果不对产物进行代码分割(或者拆包),全部打包到一个 chunk 中,会产生如下的问题:首屏加载的代码体积过大,即使是当前页面不需要的代码也会进行加载...默认有一套拆包策略,将应用的代码和第三方库的代码分别打包成两份产物,并对于动态 import 的模块单独打包成一个 chunk。...当然,我们也可以通过manualChunks参数进行自定义配置按需加载在一个完整的 Web 应用中,对于某些模块当前页面可能并不需要,如果浏览器在加载当前页面的同时也需要加载这些不必要的模块,那么可能会带来严重的性能问题

    23900

    webpack4 之 cacheGroups 分包【究极奥义】

    前提 前提有两点,需要得到你的认同: 【后台管理系统】框架和 UI 组件库最强组合为 vue-element-admin + Element UI!...优化的结果 淦完后得出如下打包分析图: 本瓜成功的将打包大小从 3.1MB 变成了 2.36MB,文件数从 68个 打包到了 43个 !!!,既实现了拆包(拆公共库),也实现了并包(合并极小的包)。...虽然这不会是最终的结果,但本瓜可以先下一个结论: 配置 cacheGroups,权衡拆包与并包二者,便是 webpack 分包的究极奥义!...我们还应该从打包分析结果去回看我们的代码细节,调整业务代码来优化打包结果,或许是最直接有效的优化思路之一。包括:如何整合或解耦业务?如何做组件化?组件怎么引?插件怎么引?引多少?.........10 KB 至 100 KB 的包是小包,比较合适;100 KB 至 200 KB 的包只能是比较核心重要的包,需要重点关注,大于 200KB 的包就需要考虑拆包了。当然,也不排除一些特殊情况。

    1.3K20

    携程React Native实践

    因此,我们需要对 RN 官方的打包脚本做改造,将框架代码拆分出来,让所有业务使用一份框架代码。 开始拆分之前, 我们先以 Hello World 的 RN App 为基础介绍几个背景知识。 ?...上述是 Hello World RN App 打包之后 JSBundle 文件的结构,基本分为 3 部分: 头部:全局定义,主要是define、require等全局模块的定义; 中间:模块定义,RN 框架和业务的各个模块定义...为了实现该拆包方案,需要改造 React-Native 的打包命令; 基于 Fake App 打common.js包时,需要记录 RN 各个模块名和模块id之间的mapping关系; 打业务模块包时,判断...相对应的,iOS 开发了一个 prepack 的打包模式,简单点说,就是把所有的 JS 模块打包到一个文件里面,打包成一个二进制文件,并固定 0xFB0BD1E5 为文件开始,这个二进制文件里面有个 meta-table...然后我又进一步分析这一天的数据,按照页面加载时间区间分布统计。 ?

    2.2K70

    从既有系统到微服务架构

    Martin Fowler就曾在MicroservicePrerequisites一文中指出实施微服务所需要的先决条件,他用“个子是否够高”形象地比喻了微服务所需的技能门槛。...这本质上是将系统重新进行合理模块化的过程。...然而既有系统的模块合理化调整很难仅通过重新拆包达成!因为代码是有逻辑的,模块化的逻辑边界不可能刚刚好落在代码文件边界。...代码重构 软件重构目的是为了解耦新服务和既有系统之间的共享代码。共享代码一般分为如下几种形式: 1.共同依赖的组件或者类,这又分为如下几种情况: 稳定的基础功能代码。例如编解码库,加解密等等。...2.共同继承的接口或者类,这又分为如下几种情况: 继承是为了组合:需要将继承的公共处理重构为支撑组件,由不同的服务根据需要自行选择组合和使用方式。

    44320

    从既有系统到微服务架构

    Martin Fowler就曾在MicroservicePrerequisites一文中指出实施微服务所需要的先决条件,他用“个子是否够高”形象地比喻了微服务所需的技能门槛。...这本质上是将系统重新进行合理模块化的过程。...然而既有系统的模块合理化调整很难仅通过重新拆包达成!因为代码是有逻辑的,模块化的逻辑边界不可能刚刚好落在代码文件边界。...代码重构 软件重构目的是为了解耦新服务和既有系统之间的共享代码。共享代码一般分为如下几种形式: 1.共同依赖的组件或者类,这又分为如下几种情况: 稳定的基础功能代码。例如编解码库,加解密等等。...2.共同继承的接口或者类,这又分为如下几种情况: 继承是为了组合:需要将继承的公共处理重构为支撑组件,由不同的服务根据需要自行选择组合和使用方式。

    38130

    小程序打包体积优化

    为了避免包体积超限,你需要及时检查资源使用情况,不让未使用的资源占据体积。 不过,资源全部走远程加载我个人觉得是较优解,资源小对视觉的影响不会很大,多端资源还能统一管理。2....主包还是大,那就用组件异步化以上方式,保证了分包代码不会加入到主包中,但主包依旧有超限的可能。 比如 初始化逻辑太多、状态管理 store 函数太多、公共库不拆进分包、入口意图太多 等等。...除了组件异步,模块意图需要一些考量组件的改动基本只需要调整文件位置和配置即可,但 modules 的异步问题则可能需要一些考量了。...比如,怎样的模块是需要异步、这些模块是否能至于组件中去触发 onLoad 等等,不见得有比较通用的场景。...其他优化建议资源动态化:将一些非核心不紧急的资源文件移至CDN服务器,需要时再下载页面动态化:将非核心不紧急的页面转成H5,通过WebView来进行显示静态数据线上化:将一些不变的数据放到小程序项目内,

    16210

    RN沙龙 | 携程是如何做React Native优化的

    因此,我们需要对RN官方的打包脚本做改造,将框架代码拆分出来,让所有业务使用一份框架代码。 开始拆分之前, 我们先以HelloWorld的RNApp为基础介绍几个背景知识。 ?...上述是一个HelloWorld RNApp代码的结构,基本分为3部分: 头部:各依赖模块引用部分; 中间:入口模块和各业务模块定义部分; 尾部:入口模块注册部分; ?...上述是HelloWorld RNApp打包之后JSBundle文件的结构,基本分为3部分 头部:全局定义,主要是define,require等全局模块的定义; 中间:模块定义,RN框架和业务的各个模块定义...为了实现该拆包方案,需要改造react-native的打包命令; 1、基于FakeApp打common.js包的时候, 需要记录RN各个模块名和模块id之间的mapping关系; 2、打业务模块包的时候...相对应的,iOS开发了一个prepack的打包模式,简单点说,就是把所有的JS模块打包到一个文件里面,打包成一个二进制文件,并固定0xFB0BD1E5为文件开始,这个二进制文件里面有个meta-table

    3.9K90

    Vue打包优化之code spliting

    而如果我们对所有的代码进行合理的拆分,将首屏和非首屏的代码进行剥离,将业务代码和基础库代码进行拆分,在需要某段代码的时候再加载它,下次若再需要用则从缓存中读取,一来可以更好地使用浏览器缓存,再者就是可以提高首屏加载速度...按需异步加载 这个主要解决首屏请求大小的问题,我们在访问首屏的时候只需要加载首屏所需的逻辑,而不是加载所有路由的代码。.../src/main.js' }, 那这里又出现个问题了,我不可能手动去手动录入模块,这时我们可能需要 自动化分离 ventor,这里我们需要引入 minChunks,在配置中我们就可以对所有mode_module...但是新问题又来了,codemirror很大,而used-twice又是首屏需要的,这个打包在首屏肯定不是很好,这里我们要将system和dbmanage页面的codemirror组件改为异步加载,单独打包...总结 可能会有朋友会问,单独分拆vue和vuetify会导致请求数增加,这里我想补充下,我们的业务现在已经切换成http2了,由于多路复用,并且加上浏览器缓存,我们分拆出的请求数其实也算是控制在合理的范畴内

    4.2K100

    聊一聊如何搭建高性能网站哪一些事

    每一行的宽度, 代表浏览器发出请求并下载该资源的过程中所耗费的时间。...其它被我们设置了异步加载的页面或者组件变成了一个个chunk,也就是被打包成独立的bundle。...因为把这些插件“拆”开了。并没有一起打在bundle中。而是放在了CDN上。下面我举一个例子来解释一下。 假设:原本bundle包为2M,一次请求拉取。...在平常的开发中建议时常注意逻辑后移的情况,突出主体逻辑。可以极大的提升用户体验。 3.12 算法复杂度 在数据量大的应用场景中,需要着重注意算法复杂度问题。...在时间换空间,空间换时间的选择上,要根据业务场景来进行取舍。 3.13 组件渲染 拿react举例,组件分割方面不要太深。需要控制组件的渲染,尤其是深层组件的render。

    68220

    Webpack 持久化缓存实践

    所以如果你只是单纯地将所有内容打包成同一个文件,那么 hash 就能够满足你了,如果你的项目涉及到拆包,分模块进行加载等等,那么你需要用 chunkhash,来保证每次更新之后只有相关的文件 hash...那么如何进行拆包,分模块进行加载,这就需要 webpack 内置插件:CommonsChunkPlugin,下面我将通过一个例子,来诠释 webpack 该如何进行配置。...npminstall 阅读下面的内容之前我强烈建议你看下我之前的文章:深入理解 webpack 文件打包机制,理解 webpack 文件的打包的机制有助于你更好地实现持久化缓存。.../common/componentA'; // 使用到 jquery 第三方库,需要抽离,避免业务打包文件过大 import$from'jquery'; // 加载 css 文件,一部分为公共样式,一部分为独有样式...这里涉及的只是比较基础的模块拆分,还有一些其它情况没有考虑到,比如异步加载组件中包含公共模块,可以再次将公共模块进行抽离。形成异步公共 chunk 模块。

    1.4K50

    Vue.js中的延迟加载和代码拆分

    在本系列中,我将深入研究我们在实践中使用的Vue性能优化技术,并且您可以在Vue.js应用程序中使用它们,使应用程序快速加载并顺利执行。...现在我们知道webpack是如何打包的,很明显我们的项目越大,初始JavaScript bundle包就越大。 越大的初始bundle,下载和解析,我们的用户所需的时间就越长。...顾名思义,延迟加载是一个懒惰地加载应用程序的部分(块)的过程。换句话说 - 只有在我们真正需要它们时加载它们。代码拆分只是将应用程序拆分为多个延迟加载的代码块的一种处理方式。 ?...延迟加载允许我们拆分捆绑包并仅提供所需的部分,这样用户就不会浪费时间下载和解析不会使用的代码。...我们已经学习了如何使用Vue组件进行延迟加载。 在本系列的下一部分中,我将向您展示在任何Vue.js应用程序上获得显着性能提升的最有用(也是最快)的方法。

    7.8K10

    【Vuejs】317- 提升90%加载速度——Vuecli下的首屏性能优化

    在一开始就下载完所有路由对应的组件文件,这明显是不合适的,这就像下载一个 app了,所以我们就需要使用路由懒加载 ?.../components/ShowBlogs.vue') 以函数的形式动态引入,这样就可以把各自的路由文件分别打包,只有在解析给定的路由时,才会下载路由组件 ?...首屏需要加载的文件变成了橙色的部分,被小弟们分流出去了 300k 如果是在 vuecli 3中,我们还需要多做一步工作 因为 vuecli 3默认开启 prefetch(预先加载模块),提前获取用户未来可能会访问的内容...element-ui小了很多,不过看到那个显眼的 table.js后想到, table组件只有后台管理页面用到了,不需要全局注册,所以我们删除 main.js中 Table和 TablColumn的引用...,更高级的 SplitChunksPlugin代替 这也是为什么我要把项目迁移到 vuecli 3(使用 webpack4) 默认就做了优化,首页只会下载灰色的部分( 235K) gzip 拆完包之后,

    2.9K20
    领券