后端懒加载示例(以分页加载数据为例)

admin11个月前 (04-02)it知识756

场景描述

假设有一个博客系统,每页显示10篇文章,用户滚动到底部时加载下一页的文章。

前端请求代码(使用Fetch API)

let page = 1;const limit = 10;let loading = false;window.addEventListener("scroll", function() {    if (loading) return;    if (window.innerHeight + window.scrollY >= document.body.offsetHeight - 500) {        loading = true;        loadMoreArticles(page, limit);    }});function loadMoreArticles(page, limit) {    fetch(`/api/articles?page=${page}&limit=${limit}`)        .then(response => response.json())        .then(data => {            data.articles.forEach(article => {                // 将文章数据渲染到页面上                const articleElement = document.createElement("div");                articleElement.innerHTML = `<h2>${article.title}</h2><p>${article.content}</p>`;                document.body.appendChild(articleElement);            });            if (data.hasMore) {                page++;            } else {                window.removeEventListener("scroll", arguments.callee); // 移除滚动事件监听器(或使用其他方式避免重复加载)            }            loading = false;        })        .catch(error => {            console.error("Error loading articles:", error);            loading = false;        });}


后端代码(Node.js + Express 示例)

const express = require("express");const app = express();// 模拟数据库中的文章数据const articles = Array.from({ length: 100 }, (_, i) => ({    id: i + 1,    title: `Article ${i + 1}`,    content: `This is the content of article ${i + 1}.`}));app.get("/api/articles", (req, res) => {    const page = parseInt(req.query.page) || 1;    const limit = parseInt(req.query.limit) || 10;    const startIndex = (page - 1) * limit;    const endIndex = page * limit;    const resultArticles = articles.slice(startIndex, endIndex);    const hasMore = endIndex < articles.length;    res.json({        articles: resultArticles,        hasMore: hasMore    });});app.listen(3000, () => {    console.log("Server is running on port 3000");});

解释‌:

  • 前端部分‌:

    • 监听scroll事件,当用户滚动到底部时,发送请求加载下一页的文章。

    • 使用fetch API请求后端API,获取文章数据并渲染到页面上。

    • 使用loading变量避免重复请求。

  • 后端部分‌:

    • 接收前端请求,根据pagelimit参数返回相应的文章数据。

    • 判断是否还有更多文章,返回hasMore字段。


三、懒加载的优势

  1. 提高性能‌:减少初始加载时间,降低服务器压力。

  2. 节省带宽‌:只加载用户当前需要的数据或资源。

  3. 提升用户体验‌:加快页面响应速度,避免卡顿。

四、注意事项

  1. SEO影响‌:对于需要SEO的内容,确保懒加载的内容能被搜索引擎抓取(如使用noscript标签或SSR)。

  2. 兼容性‌:确保懒加载技术在目标浏览器上兼容(如使用IntersectionObserver API或polyfill)。

  3. 错误处理‌:处理加载失败的情况,提供备用方案或重试机制。



标签: 分享IT知识

相关文章

故事分解结构

故事分解结构是一种用于分析、设计和编写故事的方法,它可以将故事分解为不同的层次,从而更好地理解故事的内在逻辑和结构。下面是故事分解结构的详细解释:节拍(beat):是故事的最小单位,包含动作和反应两个...

黄金秋季

黄金秋季,这是一个充满色彩和韵味的季节。天空湛蓝,阳光明媚,微风轻拂,树叶由绿变黄,由黄变红,最终落叶归根。这是一个大自然最美丽的时刻,一切都在这一刻达到了高潮。秋天的阳光特别柔和,它不像夏天那样灼热...

javascript 数据处理方法

以下是 JavaScript 中常用的数据处理方法整理,涵盖数组、字符串、对象、数字及数据类型判断等场景:一、数组处理‌遍历与转换‌map():遍历数组并返回新数组,常用于数据映射(如数值加倍)fil...

前端消息队列技术解析

一、核心应用场景‌异步任务处理‌用户行为日志上报、实时通知推送等场景,通过消息队列实现非阻塞式通信,避免页面卡顿‌典型代码模式对比:// 传统同步模式(阻塞页面) async f...

前端常用的技术

一、核心基础技术HTML5 - 定义网页结构和语义化标签,支持多媒体与离线存储等特性‌CSS3 - 实现响应式布局(Flexbox/Grid)、动画和过渡效果‌JavaScript (ES6+) -...

2025年最赚钱的冷门职业

以下是2025年最具潜力的冷门高薪职业清单,综合政策导向、市场需求及薪资水平分析:一、‌科技前沿领域‌‌氢能科学与工程专家‌新能源政策推动下人才缺口达6.4万,应届生年薪20万起,资深工程师薪资涨幅超...