📜  骨架加载 (1)

📅  最后修改于: 2023-12-03 15:28:59.529000             🧑  作者: Mango

骨架加载

在 Web 应用程序开发中,骨架加载(Skeletal Loading)是一种技术,它可以让 Web 应用程序快速加载,并在后台加载应用程序的主要内容。骨架加载的核心思想是,先呈现一个基础的站点模板,再在后台加载应用程序的主要内容,这样用户可以更快地与站点交互。

什么是骨架加载?

骨架加载是一个简单有效的技术,可以大幅提高浏览器首次渲染速度。它的实现方式是:在网页内容完全生成前,先让浏览器加载一个基础骨架框架,然后以异步的方式加载主要内容,让用户可以在等待的同时进行交互,从而获得更好的用户体验。

在实际应用中,骨架加载可以用于许多场景,包括:

  • 高消耗资源的web应用程序
  • 低网速下的访问
  • 移动设备上的访问
骨架加载的优点

使用骨架加载可以获得以下几个优点:

改善用户体验

通过骨架加载,用户可以更快地看到站点的基本结构,减少等待时间,提高满意度。

提高网站的用户留存率

由于较快的渲染速度和更好的用户体验,用户更可能留在网站上,进行进一步的浏览、交互。

提高SEO效果

搜索引擎的爬虫可以更顺畅地爬取站点的基本结构,从而更好地理解网站的主题和结构。

骨架加载的实现

骨架加载的实现分为两个方面:

骨架加载模板的设计

骨架加载模板是网站的基础模板,通常由非依赖性的HTML、CSS和JS组成。在这个模板中,可以使用占位符来占据主要内容的位置。

主要内容的异步加载

骨架加载的核心就是异步加载主要内容。在网页生成时,主要内容并不会立即下载和呈现到页面上,而是在基础模板生成后,以异步的方式加载主要内容。

骨架加载的代码示例

以下是一个简单的骨架加载代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Skeletal Loading Demo</title>
    <script src="skeleton.js"></script>
    <link rel="stylesheet" href="skeleton.css">
</head>
<body>
    <header>
        <!-- header content -->
    </header>
    <div id="main">
        <div class="skeleton">
            <!-- skeleton for main content -->
        </div>
    </div>
    <footer>
        <!-- footer content -->
    </footer>
    <script>
        var skeleton = new Skeleton({
            container: '#main',
            contentUrl: '/api/content',
            skeletonUrl: '/skeleton/main.html'
        });
    </script>
</body>
</html>

在这个示例中,我们加载了 skeleton.jsskeleton.css 两个文件,它们包含了骨架加载的主要逻辑和样式。在页面中,我们只显示了头部、底部和一个占位符 DIV 元素。骨架加载的核心逻辑是通过 Skeleton 对象来完成的,我们可以通过参数对象传递需要加载的资源地址、骨架模板和主要内容。在这个示例中,主要内容的地址是 /api/content,骨架模板的地址是 /skeleton/main.html

function Skeleton(options) {
    this.container = options.container;
    this.contentUrl = options.contentUrl;
    this.skeletonUrl = options.skeletonUrl;
    this.containerEl = document.querySelector(this.container);
    this.skeletonEl = this.containerEl.querySelector('.skeleton');
    this.loadContent();
}
Skeleton.prototype.loadContent = function() {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', this.contentUrl, true);
    xhr.onload = function() {
        var content = xhr.responseText;
        this.containerEl.innerHTML = content;
        this.skeletonEl.remove();
    }.bind(this);
    xhr.send();
};

这是一个简化的 Skeleton 对象的实现。在初始化对象时,我们把需要加载的资源地址、骨架模板和主要内容保存在对象属性中。在 loadContent 方法中,我们使用 XMLHttpRequest 对象异步加载主要内容,然后在加载完成后,用获取到的内容替换掉骨架模板元素。最后,我们在页面中移除骨架元素。

总结

骨架加载是一个非常实用的技术,可以在 web 应用程序中提高首次渲染速度和用户留存率,改善用户体验,并帮助搜索引擎更好地理解网站。实现骨架加载并不复杂,只需要设计好一个骨架模板,并使用异步加载技术获取主要内容。