性能优化:加载优化——提升用户体验的关键

性能优化:加载优化------提升用户体验的关键

加载优化对于用户体验起着决定性作用。它能够极大幅度地缩短用户等待时间,让页面瞬间呈现,彻底告别长时间面对空白屏幕的焦虑。同时,为用户精心营造出流畅顺滑的浏览感受,不管是滚动页面、点击链接,还是进行其他交互操作,都如丝般流畅,毫无卡顿阻碍。而且,能确保交互响应近乎即时送达,用户操作指令迅速得到执行,真正实现随心操作。一个加载迅速的网站或应用,犹如夜空中最亮的星,在众多竞品中崭露头角,吸引并留住更多用户。

加载优化的方法有很多种,比如压缩与合并资源优化代码懒加载和预加载优化缓存等等

接下来,我们来探究懒加载预加载缓存优化这几项至关重要的加载优化技术。

一、懒加载

懒加载,又称延迟加载或按需加载。其核心要义在于延迟加载页面中的各类资源,特别是图片以及其他非关键资源,以此缓解初始加载压力,削减用户等待时长。例如在图片密集型页面,或是内容冗长需滚动浏览的页面中,懒加载的优势展露无遗。常见应用场景涵盖电商网站商品图片加载、社交媒体平台动态内容展示等。

实现懒加载的方式主要有以下两种:

1. 基于事件监听

通过严密监听页面滚动事件,当页面滚动时,精准抓取那些设置了特定属性(如 data-src )的图片元素,仔细判断其位置与视口高度的关联。一旦图片进入可视区域 ,立即将其 data-src 属性中的图片路径赋予 给 src 属性,完成图片加载,同时清除 data-src 属性,杜绝重复加载。示例代码如下:

js 复制代码
<body>
    <div>
        <img src='./imgs/01.jpg' alt=""></img>
        <img data-src='./imgs/02.jpg' alt=""></img>
        <img data-src='./imgs/03.jpg' alt=""></img>
    </div>
    <script>
        // 监听滚动事件
        window.addEventListener('scroll', () => {
            const images = document.querySelectorAll('img[data-src]')
            images.forEach(image => {
                // 获取图片的位置和视口的高度
                const rect = image.getBoundingClientRect()
                if (rect.top < window.innerHeight + document.body.scrollTop) {
                    // 如果图片的顶部已经进入视口,则加载图片
                    image.src = image.getAttribute('data-src')
                    // 移除data-src属性,避免重复加载
                    image.removeAttribute('data-src')
                }
            })
        })
    </script>
</body>
2. 基于 IntersectionObserver API

利用这个强大的 API 来实时监测目标元素与视口的交叉状况,当目标元素进入视口时,迅速执行相应加载操作,诸如获取数据等。示例代码如下:

js 复制代码
const intersectionObserver = new IntersectionObserver((entries) => {
    // 如果 intersectionRatio 为 0,则目标在视野外,
    // 我们不需要做任何事情。
    if (entries[0].intersectionRatio <= 0) {
        return console.log('当前视图不可见')
    }
    console.log('当前视图可见')
    // 获取数据
    // 这里调用axios请求获取数据
    // 让后端给我的接口分段
    stop()  // 停止监听防止重复请求
})
// 开始监听
intersectionObserver.observe(document.querySelector(".scrollerFooter"))

二、预加载

预加载,实则是一种提前规划资源加载的精妙策略。在实际启用某些资源之前,就抢先将它们加载到内存或缓存中。比如在网页里提前加载后续页面可能用到的图片、视频、脚本,亦或是在软件、游戏中提前储备即将用到的各类素材等。

预加载的实现方式:

在 HTML 页面中,借助这个标签能够明确指定需要预加载的资源,像 CSS 文件、JavaScript 文件、图片等,并且可以按需设置资源的优先级 ,助力浏览器科学安排加载顺序。示例如下:

html 复制代码
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>优化后的页面示例</title>
    <!-- 关键样式表,高优先级加载 -->
    <link rel="stylesheet" href="main-layout.css" as="style" importance="high">
    <!-- 预加载首屏图片资源 -->
    <link rel="preload" href="img" as="image">
    <!-- 预加载脚本资源,低优先级,因为对首屏非关键影响 -->
    <link rel="preload" href="script.js" as="script" importance="low">
    <!-- 其他非关键样式表,中优先级 -->
    <link rel="stylesheet" href="secondary-styles.css" as="style" importance="medium">
</head>

<body>
    <!-- 页面内容 -->
    <img src="img" alt="示例图片">
    <script src="script.js"></script>
</body>

在上述实例中,我们巧用 <link rel="preload"> 标签预加载 CSS 文件、JavaScript 文件和图片。浏览器解析 HTML 时,会依据这些标签提前获取相应资源,进而缩减后续加载时间。使用 <link> 标签预加载时,通过 importance 属性设定资源优先级,实现对资源加载顺序的精准掌控。

2.使用JavaScript

将需要预加载的图片资源的 URL 保存在数组里,循环遍历 URL 数组执行以下步骤,直到结束,创建一个 image 对象 new Image(),将 image 对象的 src 属性的值指定为预加载图片的 URL

js 复制代码
<script>
        const imgs = [
            "img",
            "img",
            "...",
        ]
        let i = 0
        const img = document.querySelector('#img')
        // 页面一开始加载图片数组的第一个元素
        preload(imgs[i]).then((data) => { })
        // 点击切换
        img.addEventListener("click", () => {
            if (i < imgs.length) {
                img.src = imgs[i]
                i++
                if (i < imgs.length) {
                    preload(imgs[i])
                }
            }
        })
        // 预加载
        function preload(src) {
            return new Promise((resolve, reject) => {
                const image = new Image();
                image.addEventListener("load", () => resolve(image))
                image.addEventListener("error", (error) => reject(error))
                image.src = src
            })
        }
    </script>

三、懒加载与预加载的区别

二者最为关键的区别体现在加载时机 上。懒加载属于延迟加载,依据用户的实际操作与浏览行为动态加载资源;而预加载则是提前布局,先行获取资源。懒加载旨在全力提升 页面初始加载速度 ,减轻服务器负担,优化用户初次访问体验;预加载则着眼于减少 用户后续操作时的等待时间,当用户需要调用某些资源时,可直接从缓存中调取,避开重新向服务器发起请求的繁琐流程。

四、缓存的助力

本地存储(Local Storage 和 Session Storage)在加载优化中扮演着举足轻重的角色。对于一些体量小巧且鲜少变动的数据,诸如用户的偏好设置、简易表单数据等,我们大可将其存储在本地。当用户再度访问页面时,直接从本地存储中读取数据,无需向服务器重新发出请求,如此便能显著加快页面加载与响应速度。封装了两个函数如下:

js 复制代码
// 存储数据到本地
function setSessionData(key, value) {
    sessionStorage.setItem(key, JSON.stringify(value))
}
// 从本地获取数据
function getSessionData(key) {
    const data = sessionStorage.getItem(key)
    return JSON.parse(data)
}

总而言之,加载优化是我们打磨产品性能、提升用户体验的核心利器。在当今快节奏的数字时代,用户对于网页和应用的响应速度要求愈发严苛,每一秒的延迟都可能导致用户的流失。通过巧妙运用懒加载、预加载以及缓存等技术,我们能够为用户打造一个极速流畅的交互环境,让网站和应用脱颖而出,在激烈的竞争中拔得头筹。这不仅是技术层面的精进,更是对用户需求的深度尊重与满足。持续深耕加载优化领域,紧跟技术发展潮流,不断探索创新方法,方能使产品在市场浪潮中始终站稳脚跟,赢得用户的长久青睐与信任。

相关推荐
ObjectX前端实验室6 分钟前
交互式md文档渲染实现
前端·github·markdown
励志成为大佬的小杨1 小时前
c语言中的枚举类型
java·c语言·前端
前端熊猫1 小时前
Element Plus 日期时间选择器大于当天时间置灰
前端·javascript·vue.js
傻小胖2 小时前
React 组件通信完整指南 以及 自定义事件发布订阅系统
前端·javascript·react.js
JaxNext2 小时前
开发 AI 应用的无敌配方,半小时手搓学英语利器
前端·javascript·aigc
万亿少女的梦1682 小时前
高校网络安全存在的问题与对策研究
java·开发语言·前端·网络·数据库·python
Python私教2 小时前
Vue3中的`ref`与`reactive`:定义、区别、适用场景及总结
前端·javascript·vue.js
CQU_JIAKE2 小时前
12.12【java exp4】react table全局搜索tailwindcss 布局 (Layout) css美化 3. (rowId: number
前端·javascript·react.js
Jiude3 小时前
调试Cesium源码分析并解决在Vite中使用遇到的问题
前端·架构·cesium
m0_748236583 小时前
Django 后端数据传给前端
前端·数据库·django