一. 前言

抛砖引玉: 提到项目性能优化,大部分人第一时间就会想到缓存,针对“读多写少”的数据,可以放到缓存里,设置个过期时间,这样就不用每次都去数据库中查询了, 减轻了数据库的压力,比如:商城项目的物品分类目录,不会经常变化,就可以放到缓存里。

详细分析:缓存的引入减轻了数据库的压力,但还是要访问服务器端的接口,需要执行接口中的代码,需要从缓存中读取数据,我们有没有办法直接访问一个页面,不再执行服务器端代码的业务呢?

答案是显然的,肯定有,那就是页面静态化

1. 什么是页面静态化?

针对每个用户看到的页面显示的数据都是一样的情况,可以考虑把该页面直接生成一个html页面,存放到服务器的硬盘中,该html页面中是有数据的,其他用户直接访问该页面地址即可,这样既减轻了数据库的 压力,还不需要执行服务器端业务代码,显然是要比缓存好的。(通俗点说就是把原先要从数据库查询的数据写死到html中保存,用户直接通过服务器存放的地址进行访问)

案例:比如博客园,博主发表一篇文章,文章的内容对每个用户来说看到的内容都是一样的,这样的话新增文章的时候,内容固然要存到数据库,但同时将内容写到一个html页面里,保存到服务器硬盘上, 博主更新博客的时候,同样要更新原先的html静态页面,这样其他用户访问的时候,直接通过这个页面的地址进行访问即可。

PS:分享一个博客地址,https://www.cnblogs.com/yaopengfei/p/9216229.html 可以看出来最后都是 xxx.html ,显然是静态页面。

2. 页面静态化的适用范围?

首先静态页的性能比缓存好,在条件适用的情况下,能用静态页就用静态页,静态页适用于相同地址所有人看到的内容都是一样的这种情况。

二. 案例剖析

模拟一个简单的blog案例,来说明页面静态化在实际项目中的使用,该案例分为列表页和详情页面,包含的功能有:增加信息、修改信息、查看详情功能,同时简单的设计一下数据库,数据库内容如下:表blogs,表信息分别是:主键、博客标题、博客内容、博客其它信息、添加时间。

核心剖析:

事先准备一个查看详情页面的模板,每次增加信息或者修改信息的时候,调用【页面渲染为html字符串的方法】和【写入文件的方法】,将最新的信息保存到html中,进而存到硬盘上,供用户直接访问。

渲染Html页面为字符串的方法如下,注意收藏哦:

 1 ///  2 /// 将页面渲染成html字符串 3 ///  4 /// 传入this.ControllerContext 5 /// 静态页面的模板路径 6 /// 往模板中传入实体,进行赋值 7 ///  8 static string RenderViewToString(ControllerContext context, string viewPath, object model = null) 9 {10 ViewEngineResult viewEngineResult = ViewEngines.Engines.FindView(context, viewPath, null);11 if (viewEngineResult == null)12 {13 throw new FileNotFoundException("View" + viewPath + "cannot be found.");14 }15 var view = viewEngineResult.View;16 context.Controller.ViewData.Model = model;17 using (var sw = new StringWriter())18 {19 var ctx = new ViewContext(context, view, context.Controller.ViewData, context.Controller.TempData, sw);20 view.Render(ctx, sw);21 return sw.ToString();22 }23 }

调用时候的代码:(修改与之类似)

三. 详细步骤和效果展示

1. 主页面展示列表、包含查看详情、增加信息、修改信息三个操作。

前端代码分享

 1 @{ 2 Layout = null; 3 } 4  5  6  7  8  9  10 Index 11  44  45 

赋值后页面不渲染_第七节:框架搭建之页面静态化的剖析相关推荐

  1. 后端数据成功返回 页面不渲染_在浏览器地址栏输入地址到页面渲染完成发生了什么?(下)...

    上一篇讲了前三步,本篇从第四步开始.下面是正文: 四.进行tcp三次握手,建立tcp连接. 简述一下,第三步我们找到了目标ip,并获得了服务器ip的mac地址.此时浏览器就会请求和服务器连接,用来传输 ...

  2. 该页面仅以HTML格式保存_第七节:框架搭建之页面静态化的剖析

    一. 前言 抛砖引玉: 提到项目性能优化,大部分人第一时间就会想到缓存,针对"读多写少"的数据,可以放到缓存里,设置个过期时间,这样就不用每次都去数据库中查询了, 减轻了数据库的压 ...

  3. 第七节:框架搭建之页面静态化的剖析

    一. 前言 抛砖引玉: 提到项目性能优化,大部分人第一时间就会想到缓存,针对"读多写少"的数据,可以放到缓存里,设置个过期时间,这样就不用每次都去数据库中查询了, 减轻了数据库的压 ...

  4. list vue 删除后页面渲染_浅谈Vue项目实战(页面渲染+事件绑定)

    页面渲染 vue是不会去操作dom节点,是有数据去操控节点,在js文件数据都在data里 *js代码片* export default { data() { return { formInline: ...

  5. vuex中的值变化 页面重新渲染_浅谈浏览器的渲染过程,重绘与回流

    浏览器的渲染过程 首先,我们先来了解一下浏览器的渲染过程是什么样的,也就是说浏览器把一堆代码呈现到页面上的过程是什么样子的,浏览器采用流式布局模型(Flow Bsaed Layout),根据下图,我们 ...

  6. 后端数据成功返回 页面不渲染_如何统计页面访问量,看这一篇就够了

    大家好我是CloudCoder,译为云时代的码农,专注分享linux/go/java等相关技术. 如何使用前后端统计页面的访问量? 这是我的一个github项目 链接为:https://github. ...

  7. java数组赋值后可以更改吗_我们可以为Java中的最终数组赋值吗?

    数组是一个容器,可以容纳固定数量的项目,这些项目应为同一类型.大多数数据结构都利用数组来实现其算法.以下是理解数组概念的重要术语.元素-存储在数组中的每个项目称为元素. 索引-数组中元素的每个位置都有 ...

  8. 前端直接访问登录页面报错_如何实现登录、URL和页面按钮的访问控制

    作者:社会主义接班人 http://cnblogs.com/5ishare/p/10461073.html 用户权限管理一般是对用户页面.按钮的访问权限管理.Shiro框架是一个强大且易用的Java安 ...

  9. aspx跳转页面的符号_解决SpringBoot+MyBatis框架下页面跳转问题与代码优化处理。...

    一.关于页面跳转的疑问 后台「return "/pool/index"」返回的是字符串,会自动寻找名为"index"的页面模板文件是怎样实现的? 答:这是Spr ...

最新文章

  1. linux 无线网卡 延时 丢包 模拟,Linux模拟网络丢包与延迟的方法
  2. Docker中未指定挂载点容器间volume卷的数据共享
  3. 大数据技术之kafka (第 3 章 Kafka 架构深入) Zookeeper 在 Kafka 中的作用
  4. js等待5秒后执行_厦门同安首台智能垃圾分类回收柜机投用 扫二维码5秒后回收变现...
  5. JavaScript中Write和Writeln的区别
  6. rocketmq 消息 自定义_rocketmq中的自定义消息头
  7. Matter-JS Composite.add 符合材料添加约束
  8. NI VISION视觉安装
  9. u盘制作双系统启动盘及在移动硬盘上安装Linux操作系统
  10. 机器视觉——光源选型
  11. PID控制参数整定口诀
  12. CSDN如何修改用户名(CSDN ID)、用户昵称以及自定义博客域名等
  13. linux查看当前网卡网速,Linux环境编程:获取网卡的实时网速
  14. 什么是无监督学习?概念、使用场景及常用算法详解
  15. Cadence OrCAD Capture 自底而上的设计流程
  16. 人从哪里来又到哪里去
  17. excel中DATE(year,month,day)函数——oracle自定义函数
  18. ChatGPT真的像媒体宣传的那样“四平八稳”吗?
  19. 【正点原子MP157连载】第二十章 字符设备驱动开发-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
  20. 在centeros搭建workpress

热门文章

  1. 邮件中链接审批被公司邮件服务器自动操作了,Exchange 2010 实现邮件审批功能...
  2. mysql搭建测试环境的步骤_如何搭建测试环境
  3. 面试题:一条 sql 语句是如何经过 MySQL 的体系结构的?
  4. Spring注解@Value获取属性文件值且解决在controller无法获取到值的问题
  5. 蓝桥杯java第四届决赛第二题--连续奇数和
  6. mybatis教程--查询缓存(一级缓存二级缓存和整合ehcache)
  7. 蓝桥杯-操作格子(java)
  8. 04--MySQL自学教程:数据库MySQL--【数据库DB】和【数据库管理系统DBMS】简介
  9. java笔记数组小知识点
  10. 为 springboot 添加 debug功能