55、⾸屏加载⽩屏怎么进⾏优化

答:
(1使⽤CDN 减⼩代码体积,加快请求速度;
(2)SSR通过服务端把所有数据全部渲染完成再返回给客⼾端;
(3)路由懒加载,当⽤⼾访问的时候,再加载相应模块;
(4)使⽤外链CSS,JS⽂件;
(5)开启 GZIP压缩;(是⼀种 http 请求优化⽅式,通过减少⽂件体积来提⾼加载速度。 html、js、css ⽂件甚⾄json数据都可以⽤它压缩,可以减⼩60%以上的体积。(需要后端⽀持))
(6) 项⽬打包不⽣成.map ⽂件;
(7)使⽤⻣架屏 在⾸⻚加载时,显⽰⻚⾯结构轮廓;

1. 使用 CDN 减小代码体积,加快请求速度

CDN 即内容分发网络,它由分布在全球各地的服务器节点构成。当用户请求网页资源时,CDN 会自动选择距离用户最近、响应速度最快的服务器来提供服务。

使用 CDN 有以下优点:

  • 减小代码体积:CDN 通常会对所提供的资源(如 JavaScript、CSS 库等)进行优化和压缩,去除不必要的空格、注释等,从而减小文件体积。
  • 加快请求速度:由于服务器节点分布广泛,用户能就近获取资源,减少了数据传输的距离和时间,大大提高了请求响应速度。
    例如,在 HTML 中引入 jQuery 库时,可以使用 CDN 链接:
 

html

<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>

2. SSR 通过服务端把所有数据全部渲染完成再返回给客户端

SSR 即服务器端渲染,传统的前端渲染是在客户端(浏览器)完成页面的渲染,而 SSR 是在服务器端将页面所需的数据和 HTML 结构进行组合,生成完整的 HTML 页面后再发送给客户端。

 

其优势在于:

 
  • 首屏加载速度快:客户端直接接收到完整的 HTML 页面,无需等待 JavaScript 代码在浏览器中执行和数据请求,可快速显示页面内容。
  • 有利于 SEO:搜索引擎爬虫可以直接抓取到完整的 HTML 内容,提高网站在搜索引擎中的排名。
    以 Node.js 和 Express 框架结合 React 进行 SSR 为例,基本步骤如下:
 

javascript

// 服务端代码
const express = require('express');
const React = require('react');
const ReactDOMServer = require('react-dom/server');
const App = require('./App'); // 假设这是你的React组件

const app = express();

app.get('/', (req, res) => {
    const html = ReactDOMServer.renderToString(<App />);
    res.send(`
        <!DOCTYPE html>
        <html>
            <head>
                <title>SSR Example</title>
            </head>
            <body>
                <div id="root">${html}</div>
                <script src="client.js"></script>
            </body>
        </html>
    `);
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

3. 路由懒加载,当用户访问的时候,再加载相应模块

路由懒加载是一种优化策略,它会将应用的不同路由模块分割成多个小的文件,在用户访问到特定路由时才去加载对应的模块。

好处有:

  • 减少初始加载时间:避免在应用启动时一次性加载所有的代码,减少初始加载的文件体积,加快页面的初始加载速度。
  • 节省带宽:用户可能只访问部分页面,只加载他们需要的模块,节省了不必要的带宽消耗。
    在 Vue.js 中使用路由懒加载的示例如下:
 

javascript

import Vue from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter);

const routes = [
    {
        path: '/',
        name: 'Home',
        component: () => import('./views/Home.vue') // 懒加载组件
    },
    {
        path: '/about',
        name: 'About',
        component: () => import('./views/About.vue') // 懒加载组件
    }
];

const router = new VueRouter({
    routes
});

export default router;

4. 使用外链 CSS,JS 文件

将 CSS 和 JS 代码放在外部文件中,然后在 HTML 文件中通过链接引入,这样做的好处有:

 
  • 缓存利用:浏览器会对外部的 CSS 和 JS 文件进行缓存,当用户再次访问该网站时,如果文件没有更新,浏览器可以直接从缓存中读取,减少了请求和下载时间。
  • 代码可维护性:将不同类型的代码分离,使代码结构更清晰,便于开发和维护。
    例如,在 HTML 中引入外部 CSS 和 JS 文件:

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="styles.css">
    <title>Document</title>
</head>
<body>
    <h1>Hello, World!</h1>
    <script src="script.js"></script>
</body>
</html>

5. 开启 GZIP 压缩

GZIP 是一种数据压缩算法,开启 GZIP 压缩后,服务器在发送文件之前会先对文件进行压缩,减小文件体积,然后再传输给客户端,客户端接收到压缩文件后再进行解压缩。

 

优点如下:

 
  • 减少传输时间:压缩后的文件体积大幅减小,可显著缩短数据传输时间,尤其是对于大文件(如 HTML、CSS、JS 等),可以减少 60% 以上的体积。
  • 节省带宽:降低了服务器和客户端之间的数据传输量,节省了带宽资源。
    在 Node.js 中使用 Express 框架开启 GZIP 压缩的示例:
 

javascript

const express = require('express');
const compression = require('compression');

const app = express();

// 使用compression中间件开启GZIP压缩
app.use(compression());

app.get('/', (req, res) => {
    res.send('Hello, World!');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

6. 项目打包不生成.map 文件

.map 文件即源映射文件,它是一种将压缩后的代码映射回原始源代码的文件,主要用于调试。在生产环境中,通常不需要这些.map 文件。

 

不生成.map 文件的好处:

 
  • 减小文件体积:.map 文件通常比较大,不生成它们可以显著减小打包后的文件体积,加快文件的下载速度。
  • 提高安全性:.map 文件会暴露原始代码的结构和内容,不生成可以减少代码泄露的风险。
    在 Vue 项目中,通过修改vue.config.js文件来禁止生成.map 文件:
 

javascript

module.exports = {
    productionSourceMap: false
};

7. 使用骨架屏在首页加载时,显示页面结构轮廓

骨架屏是一种在页面内容加载完成之前,先展示页面大致结构的占位图。

 

其作用有:

 
  • 提升用户体验:在数据加载过程中,用户可以看到页面的大致轮廓,减少等待的焦虑感,让用户感觉页面加载速度更快。
  • 过渡自然:当数据加载完成后,骨架屏会平滑地过渡到真实内容,使页面切换更加自然。
    在 React 项目中实现简单骨架屏的示例:
 

jsx

import React, { useState, useEffect } from 'react';

const Skeleton = () => {
    return (
        <div className="skeleton">
            <div className="skeleton-header"></div>
            <div className="skeleton-content"></div>
        </div>
    );
};

const App = () => {
    const [isLoading, setIsLoading] = useState(true);

    useEffect(() => {
        // 模拟数据加载
        setTimeout(() => {
            setIsLoading(false);
        }, 2000);
    }, []);

    return (
        <div>
            {isLoading ? <Skeleton /> : <div>真实内容</div>}
        </div>
    );
};

export default App;
 

css

.skeleton {
    width: 100%;
    height: 100vh;
}

.skeleton-header {
    width: 100%;
    height: 50px;
    background-color: #f0f0f0;
    margin-bottom: 10px;
}

.skeleton-content {
    width: 100%;
    height: 200px;
    background-color: #f0f0f0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值