1、如何减少客户端与服务端带宽传输
静态资源压缩:

如果图片过大压缩后模糊,建议使用图片分段形式展示;

人工压缩
Css/JS/IMG实现压缩地址:http://tool.oschina.net/jscompress/
Maven自动打包压缩 自动生成.min文件

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.0.1.RELEASE</version>
  5. </parent>
  6. <dependencies>
  7. <!-- SpringBoot整合Web组件 -->
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. </dependencies>
  13. <!-- 构建相关配置 -->
  14. <build>
  15. <!-- maven插件配置 -->
  16. <plugins>
  17. <plugin>
  18. <!-- YUI Compressor Maven压缩插件 -->
  19. <groupId>net.alchim31.maven</groupId>
  20. <artifactId>yuicompressor-maven-plugin</artifactId>
  21. <version>1.3.0</version>
  22. <configuration>
  23. <!-- 读取js,css文件采用UTF-8编码 -->
  24. <encoding>UTF-8</encoding>
  25. <!-- 不显示js可能的错误 -->
  26. <jswarn>false</jswarn>
  27. <!-- 若存在已压缩的文件,会先对比源文件是否有改动。有改动便压缩,无改动就不压缩 -->
  28. <force>false</force>
  29. <!-- 在指定的列号后插入新行 -->
  30. <linebreakpos>-1</linebreakpos>
  31. <!-- 压缩之前先执行聚合文件操作 -->
  32. <preProcessAggregates>true</preProcessAggregates>
  33. <!-- 压缩后保存文件后缀 -->
  34. <suffix>.min</suffix>
  35. <!-- 源目录,即需压缩的根目录 -->
  36. <sourceDirectory>${basedir}/mobile</sourceDirectory>
  37. <!-- 压缩jscss文件 -->
  38. <includes>
  39. <include>**/*.js</include>
  40. <include>**/*.css</include>
  41. </includes>
  42. <!-- 以下目录和文件不会被压缩 -->
  43. <excludes>
  44. <exclude>**/*.min.js</exclude>
  45. <exclude>**/*.min.css</exclude>
  46. <exclude>scripts/data/*.js</exclude>
  47. </excludes>
  48. </configuration>
  49. </plugin>
  50. </plugins>
  51. </build>

然后进入到项目路径下执行:mvn yuicompressor:compress

Nginx自带压缩
在nginx.conf配置文件中进行配置
配置文件内容详细介绍
gzip配置的常用参数
gzip on|off; #是否开启gzip
gzip_buffers 32 4K| 16 8K #缓冲(压缩在内存中缓冲几块? 每块多大?)
gzip_comp_level [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
gzip_disable #正则匹配UA 什么样的Uri不进行gzip
gzip_min_length 200 # 开始压缩的最小长度(再小就不要压缩了,意义不在)
gzip_http_version 1.0|1.1 # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)
gzip_proxied # 设置请求者代理服务器,该如何缓存内容
gzip_types text/plain application/xml # 对哪些类型的文件用压缩 如txt,xml,html ,css
gzip_vary on|off # 是否传输gzip压缩标志

  1. # 代理缓存配置
  2. proxy_cache_path "./meite_cachedata" levels=1:2 keys_zone=meitecache:256m inactive=1d max_size=1000g;
  3. server {
  4. listen 80;
  5. server_name localhost;
  6. gzip on;
  7. gzip_buffers 32 4K;
  8. gzip_comp_level 6;
  9. gzip_min_length 100;
  10. gzip_types application/javascript text/css text/xml;
  11. gzip_disable "MSIE [1-6]\."; #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
  12. gzip_vary on;
  13. location /details {
  14. #使用缓存名称
  15. proxy_cache meitecache;
  16. #对以下状态码实现缓存
  17. proxy_cache_valid 200 206 304 301 302 1d;
  18. #缓存的key
  19. proxy_cache_key $request_uri;
  20. add_header X-Cache-Status $upstream_cache_status;
  21. proxy_pass http://127.0.0.1:8080;
  22. index index.html index.htm;
  23. }
  24. location /all {
  25. proxy_pass http://127.0.0.1:8080;
  26. index index.html index.htm;
  27. }
  28. }

2、静态资源缓存控制

Http协议304状态 第一次访问会将资源缓存到浏览器客户端,如果该资源文件没有发生变化的情况下 不会重复向服务器端发送请求;
注意:七牛云CDN可能会缓存静态资源,建议每次发布生产环境中加上时间戳;

配置就在上边

怎样解决数据库中的数据与nginx缓存中数据不一致的问题,可以使用时间戳,也就是资源的更新时间,还有一种更好的方式就是在结业项目中会讲到的使用lua脚本实现数据库与nginx缓存中的数据一致性;
Nginx第五次课.docx 资料.zip

  1. 大型电商商品详情页面如何设计
  2. 1. 使用nginx缓存商品详情页面
  3. 版本控制解决方案:
  4. A. 使用版本号控制
  5. B. 手动清除Nginx缓存 需要物理删除
  6. C. 使用lua+openresty实现动态商品详情页面
  7. 传统的压缩方案:实际上对注释、空格去除、换成一行;
  8. Nginx 压缩非常耗CPU
  9. 8兆图片通过技术手段压缩成2兆看起非常模糊
  10. 当时腾讯课堂限制每张图片只能够有2兆
  11. 将图片分成多个 拼接组成成一张 也就是等于原生图片;
  12. http协议304 缓存
  13. 客户端(浏览器)发送请求到服务器端 第一次请求的时候会缓存所有的静态资源到浏览器;
  14. 客户端发送第二次请求的时候 如果本地浏览器有缓存,就使用本地浏览器的;
  15. Key:访问的url value:
  16. 如果远程的文件发生的变化的情况下,就使用远程的;
  17. 客户端缓存(浏览器缓存)→CDN缓存(七牛云缓存)→Nginx缓存
  18. →JVM内置缓存 →Redis分布式缓存 →数据库

需要考虑问题:
Redis与数据库一致性问题 mq订阅binlog 同步数据一致性问题
JVM与Redis保持一致性问题
Nginx缓存与服务器端真实缓存一致问题