【记录】使用R2 CDN替换本地项目图片以加速图片加载
将图片存储到 Cloudflare 的存储桶中,并通过其提供的公共 URL 来替换代码中的本地路径,可以减小项目中打包的图片文件体积
实现方法的详细步骤:
1. 上传图片到 Cloudflare 的存储桶
(1)登录 Cloudflare Dashboard:
- 进入 Cloudflare 的管理后台。
(2)配置 R2 存储桶(如果使用 R2):
- 创建一个 R2 存储桶,并上传图片到该存储桶。
- 记录每张图片的公共 URL(可以通过访问权限设置为公开,生成访问地址)。
(3)获取图片的公共链接:
- 确保存储桶支持公开访问。
- 示例公共 URL:
https://<your-account-id>.r2.cloudflarestorage.com/<bucket-name>/home_top_bg.webp
2. 替换代码中的本地路径为远程 URL
在你的 JS 文件中,修改导入路径,直接使用图片的 Cloudflare URL。例如:
原代码:
import homeTopBg from "../../images/webp/home_top_bg.webp";
import netHomeTopBg from "../../images/webp/nothome_top_bg.webp";
替换为:
const homeTopBg = "https://<your-account-id>.r2.cloudflarestorage.com/<bucket-name>/home_top_bg.webp";
const netHomeTopBg = "https://<your-account-id>.r2.cloudflarestorage.com/<bucket-name>/nothome_top_bg.webp";
3. 优化图片加载(可选)
使用动态导入(懒加载)
如果这些图片不是页面初始化时必须加载的资源,可以通过动态导入减少初始加载时间:
const loadImages = async () => {
const homeTopBg = await import("https://<your-account-id>.r2.cloudflarestorage.com/<bucket-name>/home_top_bg.webp");
const netHomeTopBg = await import("https://<your-account-id>.r2.cloudflarestorage.com/<bucket-name>/nothome_top_bg.webp");
};
loadImages();
设置图片缓存
- 确保 Cloudflare 的存储桶开启了缓存功能,可以通过 HTTP 头部如
Cache-Control指令优化图片的加载性能。
4. 在 Webpack 中处理远程资源
如果你希望在 Webpack 配置中直接替换图片路径,可以通过 Webpack 的别名或插件实现:
使用别名替换路径
在 webpack.config.js 中配置:
module.exports = {
resolve: {
alias: {
"@images": "https://<your-account-id>.r2.cloudflarestorage.com/<bucket-name>",
},
},
};
在代码中:
import homeTopBg from "@images/home_top_bg.webp";
使用 DefinePlugin 替换变量
在 webpack.config.js 中添加:
const webpack = require('webpack');
module.exports = {
plugins: [
new webpack.DefinePlugin({
HOME_TOP_BG_URL: JSON.stringify("https://<your-account-id>.r2.cloudflarestorage.com/<bucket-name>/home_top_bg.webp"),
}),
],
};
在代码中使用:
const homeTopBg = HOME_TOP_BG_URL;
5. 优势与注意事项
优势:
- 减小打包体积:不再需要将大图片打包到项目中。
- 灵活性:可以随时替换图片而无需重新打包项目。
- 缓存优化:通过 Cloudflare 的 CDN 提升图片加载速度。
注意事项:
- 网络依赖:图片加载依赖网络,如果网络不稳定可能会影响加载体验。
- 权限配置:确保存储桶的访问权限设置为公开,避免图片无法加载。
- CORS 问题:如果图片需要跨域加载,确保 Cloudflare 存储桶设置了
Access-Control-Allow-Origin头部。
通过这种方式,将本地大图片替换为 Cloudflare 存储桶中的远程图片,可以有效优化前端项目的加载性能。
【记录】使用R2 CDN替换本地项目图片以加速图片加载的更多相关文章
- 《前端之路》之 前端图片 类型 & 优化 & 预加载 & 懒加载 & 骨架屏
目录 09: 前端图片 类型 & 优化 & 预加载 & 懒加载 & 骨架屏 09: 前端图片 类型 & 优化 & 预加载 & 懒加载 & ...
- 页面滚动图片等元素动态加载插件jquery.scrollLoading.js
如果一个网页很长,那么该页面的加载时间也会相应的较长.而这里给大家介绍的这个jQuery插件scrollLoading的作用则是,对页面元素进行动态加载,通俗的说就是滚到哪就加载到哪,屏幕以下看不见的 ...
- jQuery页面滚动图片等元素动态加载实现
一.关于滚动显屏加载 常常会有这样子的页面,内容很丰富,页面很长,图片较多.比如说光棍节很疯狂的淘宝商城页面. 或者是前段时间写血本买了个高档耳机的京东商城页面,或者是新浪微博之类. 这些页面图片数量 ...
- Java之——Web项目中DLL文件动态加载方法
本文转自:https://blog.csdn.net/l1028386804/article/details/53903557 在Java Web项目中,我们经常会用到通过JNI调用dll动态库文件来 ...
- [转]jQuery页面滚动图片等元素动态加载实现
本文转自:http://www.zhangxinxu.com/wordpress/?p=1259 一.关于滚动显屏加载 常常会有这样子的页面,内容很丰富,页面很长,图片较多.比如说光棍节很疯狂的淘宝商 ...
- IDEA问题之“微服务启动项目时,不会加载Spring Boot到Services中”
1.启动项目时,不会加载Spring Boot到Services中 现象解析: 启动项目时 会在debug的位置加载项目 注:这里没有配图,因为问题已解决,未记录图,需往后遇到记录 解决方案: 需要在 ...
- ios 图片的两种加载方式
控件加载图片,plist,懒加载,序列帧动画,添加动画效果. IOS中有2种加载图片的方式. 方式一:有缓存(图片所占用的内存会一直停留在程序中) + (UIImage *)imageNamed:(N ...
- AngularJS进阶(三十九)基于项目实战解析ng启动加载过程
基于项目实战解析ng启动加载过程 前言 在AngularJS项目开发过程中,自己将遇到的问题进行了整理.回过头来总结一下angular的启动过程. 下面以实际项目为例进行简要讲解. 1.载入ng库 2 ...
- IDEA下利用Jrebel插件实现JFinal项目main方法【热加载】
IDEA下利用Jrebel插件实现JFinal项目main方法[热加载] Jrebel破解办法 https://github.com/ilanyu/ReverseProxy/releases/tag/ ...
- 配置项目启动的时候就加载 servlet
load-on-startup值为0 就是在项目启动的时候自动加载该servlet
随机推荐
- CSS动画效果(炫酷登录页面)
1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa6ibiceejK9loT70yREYASOhuSRaI6vQtQ42zN48oafaWDzdn ...
- 从0.1开始学java(2)
string串池 现在都在堆中 "=="号的比较 字符串比较一般调用equals或者equalsignoreCase API来比较(后者忽略大小写) StringBuilder 可 ...
- 移动端元素定位辅助神器-WEditor
WEditor可以做什么? 编辑器能够提供辅助编写脚本,查看组件信息,调试代码等功能. 移动端除了用 Appium 来 做元素定位外,还可以通过 WEditor 来完成. 前置环境依赖按照 以 win ...
- Java基础语法闪过——纯小白
Java语法突击 笔者因为学校奇葩选课原因,需要学习Java,考试所迫和大伙一起交流复习下基础的语法内容,大家都一把拿下考试 观前提醒:本文整理的有些仓促了,简单几分钟看看Java有什么内容还好,如果 ...
- 用 300 行代码手写提炼 Spring 核心原理 [1]
系列文章 用 300 行代码手写提炼 Spring 核心原理 [1] 用 300 行代码手写提炼 Spring 核心原理 [2] 用 300 行代码手写提炼 Spring 核心原理 [3] 手写一个 ...
- [python] Python异步编程库asyncio使用指北
Python的asyncio模块提供了基于协程(coroutines)的异步编程(asynchronous programming)模型.作为一种高效的编程范式,异步编程允许多个轻量级任务并发执行,且 ...
- 结合反射与 XML 实现 Java 编程的动态性
反射是 Java 语言被视为动态或准动态语言的一个关键性质,结合反射和 XML 会帮助我们更快.更方便地实现一些动态代码,从而解决编程中可能遇到的不确定问题.本文将结合反射与 XML 对 Java 编 ...
- TreeMap源码分析——基础分析(基于JDK1.6)
常见的数据结构有数组.链表,还有一种结构也很常见,那就是树.前面介绍的集合类有基于数组的ArrayList,有基于链表的LinkedList,还有链表和数组结合的HashMap,今天介绍基于树的Tre ...
- php调试工具之firePHP
让PHP可以像js一样利用浏览器的控制台调试代码 ------- FirePHP(http://www.firephp.org/) 1. 安装FirePHP插件 在Chrome浏览器的应用商店中,搜 ...
- Python 潮流周刊#80:Django 项目性能调优(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...