懒加及thymeleaf

本文深入解析了懒加载技术的工作原理及实现方式,介绍了如何利用JavaScript动态设置图片路径,以达到按需加载的目的,从而减轻本地缓存压力。文章通过具体示例展示了如何判断图片是否进入可视区域,并在此基础上触发加载过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

懒加载

  懒加载即按需加载,当页面需要时再加载处理,以减少本地缓存的压力。
  懒加载的原理:页面中的img元素,如果没有src属性,浏览器就不会发出请求去下载图片,只有通过javascript设置了图片路径,浏览器才会发送请求。 懒加载的原理就是先在页面中把所有的图片统一使用一张占位图进行占位,把真正的路径存在元素的“data-src”的自定义属性里,要用的时候就取出来,再设置。
if语句原理图如下。当元素的offsetTop值小于可视区高度+滚动条滚动距离的和,表示元素进入到了可视区域。
在这里插入图片描述

    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图片的懒加载</title>
</head>
<body>
      <style>
            *{ margin:0; padding: 0; list-style: none; }
            #list img{ width: 500px; height: 500px;}
        </style>
        <body>
    <ul id="list">
        <li><img data-src="./img/1.png" /></li>
        <li><img data-src="./img/2.png" /></li>
        <li><img data-src="./img/3.png" /></li>
        <li><img data-src="./img/4.png" /></li>
        <li><img data-src="./img/5.png" /></li>
        <li><img data-src="./img/6.png" /></li>
        <li><img data-src="./img/7.png" /></li>
        <li><img data-src="./img/8.png" /></li>
    </ul>
    <body>

	   <script>
	   			// 获取图片
	       var oImg = document.getElementsByTagName('img');
	         fn();           // 先让第一张图展现
	       window.onscroll = function(){
	           fn();				  // 滚轮滚动事件  
	       };
	       function fn(){
	           //判断图片是否在可视区内
	           for(var i=0; i<oImg.length; i++){
	               var oImgTo = oImg[i].offsetTop;
	               //元素距离页面顶端的距离
	               var clientH = document.documentElement.clientHeight;
	               //可视区的高度
	               var scrollT = document.documentElement.scrollTop || document.body.scrollTop;
	               //可视区顶部距离页面顶部的距离
	               if(clientH + scrollT >= oImgTo){
	                   oImg[i].src = oImg[i].getAttribute('data-src');
	               }
	           }
	       }
	       //getAttribute() 方法根据名称取得属性值。
	   </script>
	</body>
	</html>

&thymeleaf

这里就需要data-自定义属性语法
格式:data-

<div th:attr="data-src=${./img/1.png}" >
<think>好的,我现在需要帮助用户了解如何将Spring Boot项目改造为前后端分离架构,并集成Vue作为前端框架。首先,我需要回忆一下前后端分离的基本概念和常见的实现步骤。根据用户提供的引用内容,前后端分离主要是将前端和后端项目分开,通过接口进行通信,比如使用JSON或XML格式的数据交换。 首先,应该明确前后端分离的关键点:后端提供API接口,前端通过HTTP请求调用这些接口。这样两者可以独立开发,降低耦合。接下来,我需要考虑如何具体实施,包括项目结构调整、接口设计、跨域问题处理、前端框架集成等步骤。 用户提到了Spring Boot和Vue,所以需要分别从后端和前端两个方面来思考。后端方面,Spring Boot需要配置RESTful API,使用Spring Web模块,可能需要处理跨域请求,比如通过CORS配置。数据交互格式通常使用JSON,所以需要确保后端控制器返回的是JSON数据,可能需要使用@RestController注解。 前端方面,Vue项目需要独立创建,并通过axios等库调用后端的API。同时,前端和后端的项目应该分开部署,可能需要使用Nginx作为反向代理或者分别部署在不同的服务器上。开发过程中,前端可以通过代理解决跨域问题,例如在Vue的配置文件中设置代理。 另外,用户可能需要了解如何将现有的Spring Boot单体应用拆分为前后端分离的结构。这可能涉及到移除原有的模板引擎(如Thymeleaf或JSP),改为纯API服务。同时,前端需要重新构建用户界面,使用Vue组件化开发。 还需要考虑安全性和身份验证,比如使用JWT(JSON Web Token)来管理用户会话。前后端分离后,认证机制需要调整为无状态的,每次请求携带Token进行验证。 最后,部署和测试也是关键步骤。需要确保前后端能够独立部署,并且接口测试充分,可以使用Postman等工具进行接口测试,前端则进行单元测试和端到端测试。 现在需要将这些思考整理成一个结构化的回答,分步骤说明,并确保引用用户提供的参考资料中的内容,比如引用[1]和[2]中提到的前后端分离的优势和具体实现方法。同时,生成相关问题,帮助用户进一步学习。</think>### Spring Boot改造为前后端分离架构并集成Vue的步骤 #### 1. **后端改造:Spring Boot纯API服务** - **移除模板引擎**:删除原有的`Thymeleaf`或`JSP`依赖,仅保留`spring-boot-starter-web`,确保后端仅处理业务逻辑和数据接口。 - **配置RESTful API**:使用`@RestController`注解定义接口,返回JSON数据。例如: ```java @RestController @RequestMapping("/api") public class UserController { @GetMapping("/users") public List<User> getUsers() { return userService.findAll(); } } ``` - **跨域处理**:通过`@CrossOrigin`注解或全局配置类允许前端访问: ```java @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("http://localhost:8080") // Vue开发服务器地址 .allowedMethods("*"); } } ``` - **安全与认证**:集成Spring Security + JWT,实现无状态认证[^1]。 #### 2. **前端开发:Vue项目搭建与对接** - **创建Vue项目**:使用`Vue CLI`初始化项目: ```bash vue create frontend ``` - **安装依赖**:添`axios`用于HTTP请求: ```bash npm install axios ``` - **配置代理**:在`vue.config.js`中设置API代理,解决跨域问题: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:8081', // Spring Boot后端地址 changeOrigin: true } } } } ``` - **调用接口示例**: ```javascript // 在Vue组件中调用接口 axios.get('/api/users') .then(response => { this.users = response.data; }); ``` #### 3. **部署与联调** - **独立部署**: - **后端**:打包为JAR文件,通过`java -jar`运行。 - **前端**:执行`npm run build`生成静态文件,部署至Nginx或CDN。 - **接口联调**:使用Swagger或Postman测试API可用性,确保JSON格式正确。 --- ### 关键优化与注意事项 1. **接口规范化**:遵循RESTful设计原则,使用HTTP状态码和统一响应体(如`{ code: 200, data: [...] }`)。 2. **前后端协作**:通过OpenAPI(Swagger)生成接口文档,提升协作效率[^2]。 3. **性能优化**:后端启用Gzip压缩,前端使用路由懒加载和代码分割。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值