尚品汇总结三:商城首页(面试专用)

目录

         首页商品分类实现

1、封装数据接口

2、页面静态化:

什么是页面静态化

为什么要使用静态化


首页商品分类实现

前面做了商品详情,我们现在来做首页分类,我先看看京东的首页分类效果,我们如何实现类似效果:

思路:

  1. 首页属于并发量比较高的访问页面,我看可以采取页面静态化方式实现,或者把数据放在缓存中实现
  2. 我们把生产的静态文件可以放在nginx访问或者放在web-index模块访问

1、封装数据接口

由于商品分类信息在service-product模块,我们在该模块封装数据,数据结构为父子层级,商品分类保存在base_category1、base_category2和base_category3表中,由于需要静态化页面,我们需要一次性加载所有数据,前面我们使用了一个视图base_category_view,所有我从视图里面获取数据,然后封装为父子层级

数据结构如下:

[{"index": 1,"categoryChild": [{"categoryChild": [{"categoryName": "电子书","categoryId": 1},{"categoryName": "网络原创","categoryId": 2},...],"categoryName": "电子书刊","categoryId": 1},...],"categoryName": "图书、音像、电子书刊","categoryId": 1},...]

2、页面静态化:

什么是页面静态化

  • 将动态页面转化成静态的html,降低与数据库的交互次数,提高页面的访问速度
  • 就是服务器在请求来之前把已经固定好的东西先编译好了,等请求来了再动态的填数据,不要等请求来了什么都没做忙得半死
  • 利用第三方提供的模板引擎,生成对应的html
  • 常用的页面静态化技术有thymeleaf、freemarker

为什么要使用静态化

  • 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力
  • 而网页静态化比较适合大规模且相对变化不太频繁的数据。
  • 将网页以纯静态化的形式展现,就可以使用Nginx这样的高性能的web服务器来部署
  • Nginx可以承载5万的并发,而Tomcat只有几百

首页并发怎么解决:

      使用静态化页面,原本需要从后台接口获取数据,静态化就是把数据在页面写死了,后期访问的时候,不需要调用后台接口了,减轻了 后台压力,并且可以使用nginx部署,单太nginx就能抗住几万并发,nginx还可以做集群.

静态化:适合 数据不经常改变的页面,以天为单位的改变 是可以接受的,几分钟 或者 1小时改变一次的 就不建议做静态化了.但是首页 基本上最短都是以天为单位变化.

实现代码:

package com.atguigu.gmall.all.controller;@Controller@RequestMappingpublic class IndexController {@Autowiredprivate ProductFeignClient productFeignClient;@Autowiredprivate SpringTemplateEngine templateEngine;/*** 生成静态页面* @return* @throws IOException*/@GetMapping("/createHtml")
@ResponseBodypublic Result createHtml() throws IOException {Result result = productFeignClient.getBaseCategoryList();Context context = new Context();context.setVariable("list", result.getData());FileWriter write = new FileWriter("D:\\index.html");templateEngine.process("index/index.html", context, write);return Result.ok();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/23983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB 使用总结

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

pktgen-dpdk arm编译问题 “Platform must be built with RTE_FORCE_INTRINSICS“

编译报错 /usr/include/rte_atomic_32.h:9:4: error: #error Platform must be built with RTE_FORCE_INTRINSICS解决办法: 我是在 arm架构服务器上编译出现这个,要定义 RTE_FORCE_INTRINSICS 在meson.build中 增加gcc编译参数 add_project_arguments(…

Shell编程基础(十二)函数

函数 概念定义调用函数综合脚本 概念 和其他编程语言一样,函数作为一种封装代码块,以提高代码复用性和可维护性的存在。 记住一点,先定义,再使用 定义 shell 函数的创建方式 function 函数名 空格{ xxxx return 返回码&#x…

【ASP.NET MVC】使用动软(四)(12)

一、筛选器类和Cookie实现路由 需解决的问题: 网站登录往往需要用户名密码验证,为避免重复验证,一般采用Cookie 、Session等技术来保持用户的登录状态: Session是在服务端保存的一个数据结构,用来跟踪用户的状态&…

glide加载content://com.android.contacts图片源码粗略梳理

获取链路是这样的; UriLoader类里定义了协议头: 里面有个内部类StreamFactory: 通过StreamLocalUriFetcher类的loadResource方法获取InputStream然后把流转换成为图片; 在这里作个草稿笔记给自己看

数据安全治理实施办法

随着《数据安全法》和《个人信息保护法》陆续出台,各行业数据安全监管力度持续增强,数据安全合规成为企业数据安全治理体系建设的第一推动力。同时,企业普遍面临数据安全治理成本过高,对业务影响过大,实施路径不清晰等…

适配器模式(AdapterPattern)

适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 优缺点 优点: 单一职责原则。你可以将接口或数据转换代码从程序主要业务逻辑中分…

springboot异步多线程的实现

1、配置线程池相关参数 package com.xxx.test.config;import lombok.extern.slf4j.Slf4j; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation…

Docker 安装 MySQL5.6

方法一、docker pull mysql 查找Docker Hub上的mysql镜像 #docker search mysql 这里我们拉取官方的镜像,标签为5.6 #docker pull mysql:5.6 (第一次启动Docker-MySql主要是查看Docker里面MySQL的默认配置,数据位置,日志位置,配…

Arthas GC日志-JVM(十八)

上篇文章说jvm的实际运行情况。 Jvm实际运行情况-JVM(十七) Arthas介绍 因为arthas完全是java代码写的,我们直接用命令启动: Java -jar arthas-boot.jar 启动成功后,选择我们项目的进程。 进入我们可用dashboard…

JavaScript 事件

本文内容学习于:后盾人 (houdunren.com) 一、事件监听绑定方式 addEventListener 操作事件 使用 addEventListener 添加事件处理程序有以下几个特点: "transtionend /DOMContentLoaded 等事件类型只能使用 addEventListener 处理.同一事件类型设置多个事件处理…

消息队列的使用场景以及优缺点

消息队列是一种在应用系统之间传递消息的通信模式。它允许发送者将消息发布到一个队列中,而接收者则从队列中获取消息进行处理。 消息队列的主要特点包括: 异步通信:消息的发送和接收是异步进行的,发送者无需等待接收者的即时响应…

使用ChatGPT编写技术文档

技术文档对于任何项目都是至关重要的,因为它确保所有利益相关者都在同一层面上,并允许有效的沟通和协作。创建详细而准确的技术文档可能既耗时又具有挑战性,特别是对于那些不熟悉主题或缺乏强大写作技巧的人来说。ChatGPT 是一个强大的人工智…

docker容器学习笔记1

docker容器是干什么用的 docker就是一个轻量级的虚拟机,是一个容器,隔离性好,能够确保环境的统一,有效利用系统资源,轻松迁移和拓展。简单的可以理解为容器就是一个小型功能齐全的虚拟机。 实际上是如何使用的呢&…

DNS部署与安全详解(上)

文章目录 一、DNS二、域名组成1. 域名组成概述2. 域名组成 三、监听端口四、DNS解析种类1. 按照查询方式分类:2. 按照查询内容分类: 五、DNS服务器搭建过程1. 先确保服务器的IP地址是固定的2. 安装DNS软件 一、DNS DNS全称Domain Name Service&#xff0…

Java中可以使用机器学习库来进行线性回归

Java中可以使用机器学习库来进行线性回归。下面是一个使用Java进行线性回归的示例代码: 首先,你需要导入所需的库: import smile.regression.OLS; import smile.regression.Regression;import java.util.Arrays;然后,你可以创建…

大文件裁剪阿里云oss上传 plupload

亲测有效 home/include_upload_maxfile.jsp 效果如下 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%String path request.getContextPath();%><%page import"com.home.base.DBRow"%> &l…

ReentrantLock中的Condition的用法

其实Condition或者说wait和notify/notifyAll,我们是在阻塞队列中经常使用。 1.例子1 生产者消费者模式嘛&#xff0c;一个线程生成数据&#xff0c;有了数据后&#xff0c;通知其它线程取。 也就是await方法&#xff0c;是位于lock之间。 lock.lock() while(queue.empty())…

一支笔,一双手,一道力扣(Leetcode)做一宿

文章目录 一、分享自己相关的经历二、分析可能存在的问题三、根据问题进行分解或建立思维导图四、分享好用的刷题网站并进行介绍 一、分享自己相关的经历 我是一名计算机专业的学生&#xff0c;之前在学习算法和数据结构时&#xff0c;对于简单题目还算能够顺利地刷过去。但是…

ChatGPT是否能够处理多模态数据和多模态对话?

ChatGPT有潜力处理多模态数据和多模态对话&#xff0c;这将进一步扩展其在各种应用领域中的实用性。多模态数据是指包含多种不同类型的信息&#xff0c;例如文本、图像、音频和视频等。多模态对话是指涉及多种媒体形式的对话交流&#xff0c;例如同时包含文本和图像的对话。 *…