前端性能优化三十七:花裤衩模板路由懒加载

2023-12-25 20:52

本文主要是介绍前端性能优化三十七:花裤衩模板路由懒加载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(1). 目的:

1. 让包不需要一次把所有的页面的加载进来,只加载当前页面的路由组件即可.

(2). 3种引入方式:

export default new Router({routes: [{path: '/',name: "index",// 1. 普通引用component: index// 2. 路由懒加载component: resolve => require(['@/views/index.vue'], resolve)// 3. 路由懒加载,并且命名chunk名字,结合webpack的import使用component: () => import(/* webpackChunkName: 'index' */ '@/views/index.vue') }]
})

(3). 移除prefetch、Preload:

. prefetch、Preload的作用:a. 当首屏加载时,会一次性下载完所有的路由文件,导致首屏请求内容很多,首屏加载变慢.b. 当访问路由时再去加载该模块,把静态引入方式改为动态引入方式.. 在vue cli3中,需要手动移除这两个.. 举例:module.exports = {chainWebpack: config => {// 移除 prefetch 插件config.plugins.delete('prefetch')// 移除 preload 插件config.plugins.delete('preload');}}

scss文件引入

我们通常会把scss文件抽离出来,一些共用样式,主题等,然后会在每个需要的组件中引入会显得繁琐,我们可以借助scss-loader进行预处理

例如我们有 resetTable.scss 文件,可以在vue.config.js中引入

module.exports = {chainWebpack: config => {config.plugin('webpack-bundle-analyzer').use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)config.plugin('html').tap(args => {if (process.env.NODE_ENV === 'production') {args[0].cdn = cdn}return args})// 移除 prefetch 插件config.plugins.delete('prefetch')// 移除 preload 插件config.plugins.delete('preload');},configureWebpack: config => {if (process.env.NODE_ENV === 'production') {return {externals: externals,plugins: [//gzip压缩new CompressionPlugin({test: /\.js∣¨E92E.html|\.html∣¨E92E.html|.\css/, //匹配文件名threshold: 10240, //对超过10k的数据压缩deleteOriginalAssets: false //不删除源文件})],performance: {hints: false}};}},// scss设置css: {loaderOptions: {sass: {//我是放在 assets/commcss 目录下data: '@import "@assets/commcss/resetTable.scss";'}},},
}

使用uglifyjs-webpack-plugin插件代替webpack自带UglifyJsPlugin插件
两个插件都不支持es6压缩,所以使用此插件前需要用工具(如babel-loader)转换es6代码

问题描述:项目中使用iview时,导致使用UglifyJsPlugin压缩报错
因为iview某插件中包含es6语法。然而两个插件都不支持es6压缩
解决方法如下:

修改webpack配置文件,使用babel-loader转换一下iview插件中的es6语法

module.exports = {entry: {app: './src/main.js'},output: {path: config.build.assetsRoot,filename: '[name].js',publicPath: process.env.NODE_ENV === 'production'? config.build.assetsPublicPath: config.dev.assetsPublicPath},
...module: {loaders: [{ test: /iview.src.*?js$/, loader: 'babel' },{ test: /\.js$/, loader: 'babel', exclude: /node_modules/ }],rules: [...{test: /\.js$/,loader: 'babel-loader',// resolve('/node_modules/iview/src'),resolve('/node_modules/iview/packages')解决iview打包时UglifyJs报错include: [resolve('src'), resolve('test'), resolve('/node_modules/iview/src'),resolve('/node_modules/iview/packages')]}...]}
}
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
...new UglifyJsPlugin({// 使用外部引入的新版本的js压缩工具parallel: true,uglifyOptions: {ie8: false, // 启用IE8支持ecma: 6, // 支持的ECMAScript的版本(5,6,7或8)。影响parse,compress&& output选项warnings: false, // 显示警告mangle: true, // debug falseoutput: {comments: false,beautify: false, // debug true},compress: {// 在UglifyJs删除没有用到的代码时不输出警告warnings: false,// 删除所有的 `console` 语句// 还可以兼容ie浏览器drop_console: true,// 内嵌定义了但是只用到一次的变量collapse_vars: true,// 提取出出现多次但是没有定义成变量去引用的静态值reduce_vars: true,}}}),// new webpack.optimize.UglifyJsPlugin({//   compress: {//     warnings: false//   },//   sourceMap: true// }),```

这篇关于前端性能优化三十七:花裤衩模板路由懒加载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/536908

相关文章

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动