页面静态化

浏览器向服务器每次发送请求都比较耗费资源和时间,当访问量特别大的时候会对服务器造成很高的压力,这个时候页面静态化就可以起到减少服务器的压力。

页面静态化 -- 把一些变化很少的动态页面,通过技术转化为静态页面。

静态页面的可以被缓存在浏览器中,第一次请求需要发给服务器,后面的再次请求(在缓存时间内),只需要在本地浏览器缓存中读取静态页面并展示。

浏览器缓存:

当第一次请求,服务器如果返回一个静态页面,浏览器会把它放入缓存中。后续访问这个页面,浏览器不会再次发送请求给服务器,而是直接从缓存中获取该页面。使用F5刷新页面会使得浏览器跳过缓存,再次向服务器请求。由于浏览器缓存距离使用者最近,所以响应最快,缓存带来的性能提升最高。

静态页面缓存,会有一个 max-age 即最大存活期,超过这个期限的缓存信息不在起作用,请求就会发送给服务器。

304状态码

超过 max-age 的请求会发送给服务器,但是服务器会根据最新修改时间来判断,如果服务器发现页面在这一段时间内并没有发生变化,会给请求者返回304状态吗。

告诉浏览器,这个页面并没有发生变化,此时浏览器会继续从缓存中读取该静态信息展示。虽然仍会向服务器发送请求,但可以减少网络传输数据对服务器造成的压力。

cdn缓存

如果请求发送的位置距离服务器过远的时候,会造成数据远距离传输,造成性能较低。我们可以将请求(获取静态资源)发送给请求地和服务器中间的一个距离最近的cdn服务器,由cdn服务器返回结果。第一次请求的时候cdn服务器会从主服务器中读取静态资源(图片、html)存入到缓存中。

页面静态化技术

将动态页面生成为静态页面,以便利用上述几种缓存,提高性能。

具体步骤如下:

1、利用spring提供的RestTemplate类访问动态页面

2、会返回一端html的结果,将该结果写入到一个html页面中

具体代码如下:

RestTemplate template = new RestTemplate();

//创建请求头对象
HttpHeaders headers = new HttpHeaders();

//向请求头中添加登陆过后的cookie,模拟登陆以后的账号发送请求
headers.add(HttpHeaders.COOKIE,"JSESSIONID=E292CE7BCB180539508421EB304D249A");

//创建接受结果的Entity对象
HttpEntity entity = new HttpEntity(null, headers); // 包含了请求头和请求体

//调用RestTemplate对象的exchange()方法请求该路径
ResponseEntity<String> response = template.exchange("http://localhost/xx", HttpMethod.GET, entity, String.class);

//获取响应的html字符串,写入一个文件
FileOutputStream out = new FileOutputStream("F:\\html\\xxx.html");
out.write(response.getBody().getBytes("utf-8"));
out.close();

exchange()方法需要三个参数,第一个参数是访问路径,第二个参数是请求格式,第三个参数接受响应结果的Entity对象,第四个参数是响应数据的类型。

3、将html写入到本地磁盘以后,只需要在项目中配置访问静态的文件的方式即可。

我这个例子中是SpringBoot项目所以我通过配置类来配置静态资源访问。

配置如下:

@Configuration 
public class MyWebConfig implements WebMvcConfigurer { 
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();//开启静态文件配置
    }
    public void addInterceptors(InterceptorRegistry registry) {

    }
}

彩蛋

如果是SpringMVC项目,需要在xml文件中配置如下,也可以进行静态资源配置

<beans>
    <!-- 视图解析器 -->
    <mvc:view-resolvers>
        //todo
    </mvc:view-resolvers>
    <!-- 静态资源配置 -->
    <mvc:default-servlet-handler/>
    <!-- 上传文件解析器 -->
    <mvc:resources mapping="url路径" location="服务器磁盘路径"/> <!-- 把一个web路径映射到服务器上的一个静态资源 -->
</beans>

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值