cnblogs——从主题开发浅谈前端性能优化

简介: cnblogs——从主题开发浅谈前端性能优化

前言

cnblogs-theme是我当前使用的主题,主题基于BNDong开源的进行魔改,但是这为什么会说到性能优化呢?那必然是页面加载存在缓慢的问题呗;

!> 本文的一些优化都是基于主题的情况来进行优化的,实际生产中可能有所不同;在生产中要切记,免费的永远是最贵的!

比如:优化过程中iconfont使用的是iconfont的CDN,但是这个在生产中我建议使用本地或者自身的CDN,这样就算iconfont的挂了也不会有啥影响;

内容

按着我自己的针对主题优化的步骤:

  1. 分析打包文件;
  2. 优化资源文件;
  3. 优化代码;
  4. 通过性能分析工具分析;

webpack

?> 用webpack-bundle-analyzer对制品进行分析,通过分析能够轻而易举的知道代码中模块占比,从而进行简化;

webpack-bundle-analyzer 配置使用

1). 删除不需要的包,或者使用更好更简洁的方法去替代;

比如去除主题axios,使用fetch代替,因为本身主题存在的请求没有过多的复杂,fetch足以;

export async function request(url = '', method = 'GET', data = {}, headers = {}) {
    let options = {
        method: method,
        mode: 'cors',
        redirect: 'follow',
        referrerPolicy: 'no-referrer',
    }
    if (Object.keys(headers).length) {
        options.headers = headers
    }
    if (Object.keys(data).length) {
        options.body = JSON.stringify(data)
    }
    const response = await fetch(url, options)
    return response.json()
}

2). 抽离第三方npm包,配置国内的CDN资源,通过ajax方式动态的引入资源;

这一步完成后已经大幅的减少了制品的大小;

/**
 * 动态加载JS文件
 * @param url {String} JavaScript文件地址
 *
 */
function dynamicLoadingJs(url) {
    return new Promise((resolve, reject) => {
        $.ajax({
            type: 'GET',
            dataType: 'script',
            cache: true,
            url,
            success: function (data) {
                resolve(data)
            },
            error: function (err) {
                reject(err)
            },
        })
    })
}

3). 按需加载,通过import对资源进行按需加载和预加载,webpackPrefetch会在浏览器空闲的时候缓存所需资源,优先级低于webpackPreload;

import(/* webpackChunkName: "code-hljs" */ /* webpackPrefetch: true */ './lib/hljs').then(module => {
                const codeMain = module.default;
                codeMain(setCodeLine);
            });

4). 代码压缩

通过terser-webpack-plugin,css-minimizer-webpack-plugin,``compression-webpack-plugin对主题的js,css代码进行压缩;

gzip压缩在实际的环境中需要和nginx进行配合使用,这里也是因为博客园本身开启了gzip,所以我才在webpack中进行了相应的配置;

let webpackProdConfig = {
    mode: 'production',
    entry: './src/main.js',
    output: {
        filename: 'simple-memory.js',
        chunkFilename:'script/[name].[contenthash:8].js',
        path: path.resolve(__dirname, '../dist'),
        clean: true
    },
    devtool: false,
    optimization: {
        minimize: true,
        minimizer: [
            new terserPlugin({
                parallel: true,
                extractComments: false,
            }),
            new cssMinimizerPlugin({
                minimizerOptions: {
                    preset: ["default", {
                        discardComments: { removeAll: true },
                    },
                    ],
                },
                parallel: true,
            }),
            new CompressionPlugin({
                algorithm: 'gzip',
                test: /\.js$|\.html$|\.css$/,
                minRatio: 1,
                threshold: 10240,
                deleteOriginalAssets: false,
            })
        ],
    },
};

资源文件

全部使用本地的资源文件的话,通过jsdelivr去进行加载会十分缓慢,所以这里会将一些资源文件替换为对应的可访问的CDN资源;

1). 字体文件

使用官方CDN代替本地google fonts字体文件;

2). 字体图标

使用iconfont的CDN代替本地资源;

3). 图片文件

对所有的图片文件进行了webp压缩,并上传到博客园相册,利用博客园本身的CDN;

4). js文件

这里的js文件,主要针对的是npm包第三方的js文件; 因为有些资源在国内的CDN平台是没有,所以这时候就要上传到博客园的文件里再引用了;

代码优化

可以再初步的优化之后,再使用代码扫描工具进行扫描完善;

1). 对代码进行清理,删除无用代码;

2). 对代码进行优化,模块化,组件化;

3). 善于利用ES一些新特性来优化当前代码;

性能分析

通过Lighthouse或者一些在线的都可以,我一般直接用lighthouse,然后根据提示再进行一波优化;

学无止境,谦卑而行.

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
13天前
|
缓存 边缘计算 监控
2024年前端性能优化的新策略
【10月更文挑战第3天】本文分享了一些2024年前端性能优化的新策略,希望能够为前端开发者提供实用的参考和指导。在实际开发中,应根据应用的具体需求和场景选择合适的优化方法。
|
7天前
|
前端开发 JavaScript UED
深入了解前端性能优化:提高用户体验的关键
【10月更文挑战第9天】深入了解前端性能优化:提高用户体验的关键
27 5
|
13天前
|
缓存 前端开发 JavaScript
前端性能优化:从基础到进阶的实践指南
【10月更文挑战第4天】在前端开发中,性能优化至关重要,尤其随着Web应用的复杂化,用户对加载速度和响应性的要求日益提高。本文从基础知识入手,涵盖代码压缩、图片优化及缓存策略,并深入探讨代码拆分、懒加载和Web Workers等进阶技巧,帮助开发者全面提升Web应用的用户体验。通过这些方法,不仅能够减少页面加载时间,还能提升响应性和渲染性能,为用户提供更流畅的使用体验。
39 1
|
13天前
|
缓存 前端开发 JavaScript
前端性能优化:提升用户体验的关键策略
【10月更文挑战第4天】前端性能优化:提升用户体验的关键策略
34 1
|
10天前
|
负载均衡 前端开发 JavaScript
前端研发链路之开发
本文首发于微信公众号“前端徐徐”,作者徐徐。文章介绍了前端研发链路中的开发部分,重点探讨了开发服务器(dev-server)、热更新(hot-reload)、数据模拟(mock)和代理(proxy)等关键技术,帮助开发者理解其基本原理和应用场景,提升开发效率和代码质量。
23 2
前端研发链路之开发
|
7天前
|
缓存 前端开发 JavaScript
前端性能优化策略
【10月更文挑战第9天】前端性能优化策略
17 6
|
4天前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
4天前
|
人工智能 前端开发 测试技术
探索前端与 AI 的结合:如何用 GPT-4 助力开发效率
本文介绍了 GPT-4 如何成为前端开发者的“神队友”,让开发变得更加高效愉快。无论是需求到代码的自动生成、快速调试和性能优化,还是自动化测试和技术选型,GPT-4 都能提供极大的帮助。通过智能生成代码、捕捉 BUG、优化性能、自动化测试生成以及技术支持,GPT-4 成为开发者不可或缺的工具,帮助他们从繁重的手动任务中解脱出来,专注于创新和创意。GPT-4 正在彻底改变开发流程,让开发者从“辛苦码农”转变为“效率王者”。
12 0
探索前端与 AI 的结合:如何用 GPT-4 助力开发效率
|
10天前
|
存储 缓存 监控
|
12天前
|
缓存 前端开发 JavaScript
探索现代Web开发中的前端性能优化策略
【10月更文挑战第5天】探索现代Web开发中的前端性能优化策略