当前位置: 首页 > news >正文

什么是静态加载-前端

什么是前端静态加载

在前端开发中,静态加载是一种常见且重要的技术。简单来说,前端静态加载指的是在页面加载时将所需的资源(如HTML、CSS、JavaScript、图片等)一并加载到用户的浏览器中。这种方式有助于提高页面的加载速度和用户体验,因为它减少了服务器请求的次数和页面渲染的等待时间。本文将深入探讨前端静态加载的多种类型及其底层设计,并通过代码案例让读者更好地理解这一技术。

在这里插入图片描述

文章目录

      • 什么是前端静态加载<p><p><p><p><p><p>
    • 前端静态加载分多少种?
      • 1. **HTML静态加载**
      • 2. **CSS静态加载**
      • 3. **JavaScript静态加载**
      • 4. **图片和媒体静态加载**
      • 5. **静态网站生成器**
      • 6. **前端框架的静态化**
      • 7. **服务端渲染(SSR)后的静态化**
      • 9. **资源打包与静态化**
      • 10. **静态资源CDN加载**
    • 底层设计解析?
      • 1. **缓存机制**
      • 2. **文件指纹**
      • 3. **代码分割**
      • 4. **预加载与懒加载**
      • 5. **HTTP/2与多路复用**
      • 6. **PWA与离线缓存**
      • 7. **静态资源优化**
      • 9. **浏览器缓存策略**
      • 10. **实时更新与版本控制**

前端静态加载分多少种?

1. HTML静态加载

HTML静态加载是最基础的一种形式,指的是HTML文件在服务器上是预先生成好的,浏览器直接请求并加载这些文件。这种方式特别适合内容不经常变化的网站,如博客或个人主页。

代码案例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Static HTML Example</title>
</head>
<body><h1>Welcome to My Static Website</h1><p>This is an example of static HTML content.</p>
</body>
</html>

2. CSS静态加载

CSS文件也可以静态加载,通过<link>标签将CSS文件引入到HTML中。这种方式使得样式在页面加载时就已经确定,减少了页面闪烁或样式变动的可能。

代码案例

<head><link rel="stylesheet" href="styles.css">
</head>

3. JavaScript静态加载

JavaScript文件可以通过<script>标签静态加载。这种方式适合那些在页面加载时就需要执行的脚本,如初始化页面元素或绑定事件。

代码案例

<body><script src="script.js"></script>
</body>

4. 图片和媒体静态加载

图片、视频等媒体资源也可以通过静态路径加载。这种方式确保了媒体资源在页面加载时就已经存在,减少了用户等待的时间。

代码案例

<img src="image.jpg" alt="Static Image">

5. 静态网站生成器

静态网站生成器如Jekyll、Hugo等,将动态内容(如Markdown文件)转换为静态HTML文件。这种方式结合了动态内容的便利性和静态文件的高效性。

6. 前端框架的静态化

一些前端框架(如React、Vue)支持将应用预渲染为静态HTML文件,以便在服务器直接提供这些文件,提高加载速度。

代码案例(React)

import React from 'react';
import ReactDOMServer from 'react-dom/server';const App = () => (<div><h1>Hello, Static World!</h1></div>
);const html = ReactDOMServer.renderToString(<App />);
console.log(html); // 输出静态HTML

7. 服务端渲染(SSR)后的静态化

服务端渲染的页面可以在初次请求时生成静态HTML,并在之后的请求中直接提供这些静态文件,这种方式结合了SSR的优势和静态加载的高效性。

9. 资源打包与静态化

工具如Webpack、Rollup可以将多个资源打包成一个或多个静态文件,减少请求次数,提高加载速度。

代码案例(Webpack)

// webpack.config.js
const path = require('path');module.exports = {entry: './src/index.js',output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')}
};

10. 静态资源CDN加载

将静态资源托管在CDN上,利用CDN的全球节点加速资源加载,是提升用户体验的有效方式。

底层设计解析?

1. 缓存机制

静态资源可以被浏览器缓存,这意味着在用户第二次访问时,资源可以直接从缓存中加载,而不需要再次请求服务器。

代码案例
通过设置HTTP头来控制缓存:

Cache-Control: public, max-age=31536000

2. 文件指纹

在文件名中加入哈希值(指纹),确保文件内容变化时,文件名也随之变化,从而强制浏览器重新加载新资源。

代码案例

<script src="script.abc123.js"></script>

3. 代码分割

通过代码分割,将不同功能的代码拆分成多个文件,只在需要时加载,减少初始加载时间。

代码案例(Webpack)

// 动态导入模块
import('./module').then(module => {module.doSomething();
});

4. 预加载与懒加载

预加载(preload)和懒加载(lazy load)是优化静态资源加载的两种策略。预加载提前加载资源,懒加载则在需要时才加载资源。

代码案例(预加载)

<link rel="preload" href="style.css" as="style">

代码案例(懒加载图片)

<img src="placeholder.jpg" data-src="real-image.jpg" alt="Lazy Load Image">
<script>// 懒加载逻辑
</script>

5. HTTP/2与多路复用

HTTP/2的多路复用特性允许浏览器同时发送多个请求,显著提高了静态资源加载的效率。

6. PWA与离线缓存

渐进式Web应用(PWA)利用Service Worker和离线缓存,让应用即使在离线状态下也能正常工作。

代码案例(注册Service Worker)

if ('serviceWorker' in navigator) {navigator.serviceWorker.register('/service-worker.js');
}

7. 静态资源优化

包括压缩、合并、图片格式选择等,都是优化静态资源加载的重要手段。

代码案例(Gzip压缩)
在服务器配置中启用Gzip压缩:

gzip on;
gzip_types text/plain application/javascript application/css;

9. 浏览器缓存策略

了解并合理利用浏览器的缓存策略(如强缓存、协商缓存)可以显著提高静态资源的加载效率。

10. 实时更新与版本控制

通过版本控制确保静态资源的更新能够被及时感知,同时避免缓存过期带来的问题。

看到这里的小伙伴,欢迎点赞、评论,收藏!

相关文章:

什么是静态加载-前端

什么是前端静态加载 在前端开发中&#xff0c;静态加载是一种常见且重要的技术。简单来说&#xff0c;前端静态加载指的是在页面加载时将所需的资源&#xff08;如HTML、CSS、JavaScript、图片等&#xff09;一并加载到用户的浏览器中。这种方式有助于提高页面的加载速度和用户…...

(01)python-opencv基础知识入门(图片的读取与视频打开)

前言 一、图像入门 1.1 读取图像cv.imread() 1.2 数组数据转换cv.cvtColor() 1.3数据窗口展示 1.4图像保存 1.5图像的截取 1.6 图像的比例缩放 二、视频入门 参考文献 前言 OpenCV 于 1999 年由 Gary Bradsky 在英特尔创立&#xff0c;第一个版本于 2000 年问世。Vad…...

quic-go实现屏幕广播程序

最近在折腾quic-go, 突然想起屏广适合用udp实现&#xff0c;而http3基于quic-go&#xff0c;后者又基于udp, 所以玩一下。 先贴出本机运行效果图&#xff1a; 功能(实现)说明&#xff1a; 1.服务器先启动作为共享屏幕方&#xff0c;等待客户端连接上来 2.客户端连接 3.客户…...

C#操作SqlServer数据库语句

操作数据库语句 操作数据库语句需要搭配数据库的连接Connection类 和下达SQL命令Command类 1. ExecuteNonQuery ExecuteNonQuery 方法主要用来更新数据。通常使用它来执行Update、Insert和Delete语句&#xff0c;最后执行sql语句的时候可以用一个整形变量来接收&#xff0c;返…...

Linux之实战命令33:mount应用实例(六十七)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…...

论文精读:基于概率教师学习的跨域自适应目标检测(ICML2022)

原文标题&#xff1a;Learning Domain Adaptive Object Detection with Probabilistic Teacher 中文标题&#xff1a;基于概率教师学习的域自适应目标检测 代码地址&#xff1a; GitHub - hikvision-research/ProbabilisticTeacher: An official implementation of ICML 2022 p…...

thinkphp 学习记录

1、PHP配置 &#xff08;点开链接后&#xff0c;往下拉&#xff0c;找到PHP8.2.2版本&#xff0c;下载的是ZIP格式&#xff0c;解压即用&#xff09; PHP For Windows: Binaries and sources Releases &#xff08;这里是下载地址&#xff09; 我解压的地址是&#xff1a;D:\…...

Leetcode 24 Swap Nodes in Pairs

题意&#xff1a;给定一个list of nodes&#xff0c;要求交换相邻的两个节点 https://leetcode.com/problems/swap-nodes-in-pairs/description/ Input: head [1,2,3,4] Output: [2,1,4,3] 首先你需要思考&#xff0c;我要交换两个节点&#xff0c;对于每个节点&#xff0c;向…...

选择 PDF 编辑器时要考虑什么?如何选择适用于 Windows 10 的 PDF 编辑器

选择 PDF 编辑器时要考虑什么&#xff1f; 随着技术的出现&#xff0c;您在网上浏览时肯定会遇到一些 PDF 软件。但是&#xff0c;选择PDF 编辑器时需要考虑什么&#xff1f;如果您是重度用户并将在您的工作场所使用它&#xff0c;建议您找到专业、使用方便且能够帮助您完成任…...

33-Golang开发入门精讲

├──33-Golang开发入门精讲 | └──1-Golang语法精讲 | | ├──1-介绍-go语言 | | ├──2-介绍-go语言中的面向对象 | | ├──3-第1阶段&#xff1a;走进Golang | | ├──4-第1阶段&#xff1a;走进Golang | | ├──5-第2阶段&#xff1a;变量与…...

研发中台拆分之路:深度剖析、心得总结与经验分享

背景在 21 年&#xff0c;中台拆分在 21 年&#xff0c;以下为中台拆分的过程心得&#xff0c;带有一定的主观&#xff0c;偏向于中小团队中台建设参考&#xff08;这里的中小团队指 3-100 人的团队&#xff09;&#xff0c;对于大型团队不太适用&#xff0c;毕竟大型团队人中 …...

SWIFT Payment

SWIFT stands for Society for Worldwide Interbank Financial Telecommunication SWIFT——环球银行金融电信协会 SWIFT Payment Useful Link ISO 20022https://www.iso20022.org/https://www.swift.com/standards/iso-20022MT and MX Equivalence Tableshttps://www2.swift…...

数据结构之红黑树实现(全)

一、红黑树 红黑树是一种自平衡的二叉搜索树&#xff0c;它通过约束节点的颜色和结构来保持平衡。红黑树是由 Rudolf Bayer 在1972年发明的&#xff0c;被认为是一种优秀的平衡树结构&#xff0c;广泛应用于各种数据结构和算法中。 1.红黑树的性质 1. 每个结点是红的或者黑的…...

冷热数据分离

优质博文&#xff1a;IT-BLOG-CN 一、背景 随着机票业务的快速发展&#xff0c;订单量持续增长对业务性能带来影响&#xff0c;需要进行冷热数据分离。目前机票订单模块主要使用Mysql(InnoDB)作为数据库存储&#xff0c;历史订单信息状态修改频率低并占用大量数据库存储空间&…...

朝花夕拾:多模态图文预训练的前世今生

Diffusion Models专栏文章汇总&#xff1a;入门与实战 前言&#xff1a;时间来到2024年&#xff0c;多模态大模型炙手可热。在上一个时代的【多模态图文预训练】宛若时代的遗珠&#xff0c;本文的时间线从2019年到2022年&#xff0c;从BERT横空出世讲到ViT大杀四方&#xff0c;…...

亳州自闭症寄宿制学校,关注孩子的学习和生活

在特殊教育领域&#xff0c;自闭症儿童的教育与成长一直是社会各界关注的焦点。近年来&#xff0c;随着对自闭症认识的加深&#xff0c;越来越多的寄宿制学校应运而生&#xff0c;致力于为这些特殊的孩子提供全面、个性化的教育服务。在安徽亳州&#xff0c;这样的学校正努力为…...

Root me CTF all the day靶场ssrf+redis漏洞

Rootme CTF all the day靶场ssrfredis漏洞 一、环境介绍1、漏洞地址2、漏洞介绍 二、 搭建环境三、测试过程3.1 读取系统文件3.2 探测开放的服务器端口(dict协议)3.3 redis未授权访问3.3.1 利用redis来写ssh密钥&#xff08;gopher协议写入&#xff09;3.3.2 利用redis写定时任…...

C#中Json序列化的进阶用法

本文所有json序列化&#xff0c;都使用的Newtonsoft.Json包 1 JsonIgnore 在 Newtonsoft.Json 中&#xff0c;如果你不想将某些属性转换为 JSON 字符串&#xff0c;可以使用多种方法来实现。以下是几种常见的方法&#xff1a; 1.1 使用 [JsonIgnore] 特性 [JsonIgnore] 特性…...

IO相关的常用工具包

常用工具包Commons-io Commons-io是apache开源基金组织提供的一组有关IO操作的开源工具包。 作用:提高IO流的开发效率。 使用步骤: 1、在项目中创建一个文件夹&#xff1a;lib 2、将jar包复制粘贴到lib文件夹 3、右键点击jar包&#xff0c;选择Add as Library--->点击OK …...

Spring Boot集成RBloomFilter快速入门Demo

在大数据处理和缓存优化的场景中&#xff0c;布隆过滤器&#xff08;Bloom Filter&#xff09;因其高效的空间利用和快速的查询性能而被广泛应用。RBloomFilter是布隆过滤器的一种实现&#xff0c;通常用于判断一个元素是否存在于一个集合中&#xff0c;尽管它存在一定的误判率…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...