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博客。
目录
相关文章
|
11天前
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
45 0
|
16天前
|
缓存 前端开发 JavaScript
优化前端性能:从理论到实践的全面指南
前端性能优化是提升用户体验的关键环节,但这一过程常被技术细节和优化策略所困扰。本文将系统地探讨前端性能优化的理论基础及实践技巧,包括关键性能指标、有效的优化策略、以及常见工具的应用。我们将从最基本的优化方法入手,逐步深入到高级技巧,为开发者提供一套全面的性能提升方案,以实现更快的加载时间、更流畅的用户交互体验。
|
20天前
|
缓存 前端开发 JavaScript
微前端集成优化:让所有子应用体积更小,加载更快!
【8月更文挑战第17天】微前端集成优化:让所有子应用体积更小,加载更快!
32 1
微前端集成优化:让所有子应用体积更小,加载更快!
|
10天前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
20 1
|
23天前
|
缓存 前端开发 JavaScript
优化前端性能的十大最佳实践
在现代网页开发中,前端性能优化不仅仅是为了提升用户体验,还能显著提高网站的加载速度和响应时间。本文探讨了十大最佳实践,从优化资源加载到减少网络请求,再到提高页面渲染效率,每个实践都旨在解决常见的性能瓶颈。通过实现这些策略,开发者可以显著提升前端性能,提升用户满意度,并确保网站在各种设备上的流畅运行。
|
19天前
|
设计模式 JavaScript 前端开发
Vue.js 组件设计模式:在前端热潮中找到归属感,打造可复用组件库,开启高效开发之旅!
【8月更文挑战第22天】Vue.js 以其高效构建单页应用著称,更可通过精良的组件设计打造可复用组件库。组件应职责单一、边界清晰,如一个显示文本并触发事件的按钮组件,通过 props 传递标签文本,利用插槽增强灵活性,允许父组件注入动态内容。结合 CSS 预处理器管理和封装独立模块,配以详尽文档,有效提升开发效率及代码可维护性。合理设计模式下,组件库既灵活又强大,持续实践可优化项目工作流。
31 1
|
21天前
|
缓存 前端开发 Linux
哇塞!NPM 缓存竟成开发拦路虎?快来掌握清空秘籍,开启前端开发逆袭之旅!
【8月更文挑战第20天】NPM是前端开发中管理依赖的关键工具。有时需清空其缓存以解决版本不一致或包损坏等问题,确保使用最新依赖。可通过命令`npm cache clean --force`强制清空全部缓存,或手动删除各系统下的缓存文件夹。注意清空缓存可能延长后续安装时间,建议事先备份依赖或确保可重新安装。正确管理缓存有助于提升开发效率。
31 1
|
23天前
|
缓存 前端开发 JavaScript
高效开发现代 Web 应用:从前端到后端的最佳实践
在开发现代 Web 应用时,前端和后端技术的选择对项目的性能、可维护性和用户体验至关重要。本文将探讨如何通过现代工具和框架来优化前端和后端开发流程。我们将分析前端技术(如 React 和 Vue.js)与后端技术(如 Node.js 和 Django)的集成,并提供实际案例来展示如何实现高效开发。无论是对新手还是经验丰富的开发者,本指南都提供了宝贵的洞见和实用的技巧,以帮助提高开发效率并构建出色的 Web 应用。
|
23天前
|
缓存 编解码 前端开发
优化Web应用性能的前端技巧:从加载时间到用户体验
在现代Web开发中,提升前端性能不仅仅是为了缩短页面加载时间,更是为了提供更流畅的用户体验。本文将探讨几种有效的前端优化技术,包括懒加载、代码拆分、资源压缩以及浏览器缓存策略。通过具体实例和最佳实践,读者将能够掌握如何系统地提高Web应用的响应速度,减少资源消耗,并最终改善用户的整体体验。
|
3天前
|
前端开发 JavaScript API
前端性能优化-控制并发
【9月更文挑战第7天】前端性能优化-控制并发
11 0
下一篇
DDNS