asp.net mvc 性能优化——(1)静态化
protected static string RenderViewToString(Controller controller, string viewName, string masterName)
{
HttpContextBase wrapper;if (System.Web.HttpContext.Current != null)wrapper = new HttpContextWrapper(System.Web.HttpContext.Current);elsethrow new InvalidOperationException("Can't create Controller Context if no "+"active HttpContext instance is available.");if (routeData == null)routeData = new RouteData();// add the controller routing if not existingif (!routeData.Values.ContainsKey("controller") &&!routeData.Values.ContainsKey("Controller"))routeData.Values.Add("controller",controller.GetType().Name.ToLower() .Replace("controller", ""));controller.ControllerContext = new ControllerContext(wrapper, routeData, controller);
IView view = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, masterName).View;
using (StringWriter writer = new StringWriter())
{
ViewContext viewContext = new ViewContext(controller.ControllerContext, view, controller.ViewData, controller.TempData, writer);
viewContext.View.Render(viewContext, writer);
return writer.ToString();
}
}
这段代码仅供参考,因为总是会提示controller.ControllerContext为空而报错,所以,可以粗略地加上上面一段来给controller.ControllerContext赋值。上面的代码,并不是最终实现了的版本,还需要改进,并且最好实现成Controller的扩展方法的形式比较方便。
调用时,如下:
var controller = new TestController();
var tt = RenderViewToString(controller,"Index",null);
不出错的话,就可以如愿得到相应的html代码,接着就是将代码保存在相应的目录下。
3 出现的一些问题。
当一个搜索页面需要生成成百上千个cshtml代码时,则网站这个静态化过的页面,第一次打开时,会经历一个比较长的搜索时间,有时是几秒钟,有时是几十秒上分钟,第二次打开时,则不会再出现这种情况。此时,可以做的事情主要有如下几个:
(1)把生成的cshtml代码以文件夹分开,因为第一次打开时间较长主要适用的单位是文件夹,如有两个文件夹A,B,并且两个文件夹内均有1000个cshtml文件,则第一次访问A中的任何文件时,会比较慢,之后再访问A中的任何文件则不会,而打开A中文件,其实是不影响B中文件夹的,所以,要使B中文件访问速度加快,则也要至少访问B中的一个文件。
(2)访问文件的操作可以使用HttpGet的方法模拟进行,并且最好使用异步进行,不然可能会导致请求超时。异步的方法主要有ajax和多线程。
(3)曾经查找过多cshtml文件第一次加载时慢的问题,但没有找到相关机制,最理想的方式,是通过代码主动去更新相关信息(如缓存)等,而不是模拟用户的点击行为。可能的途径是去查看asp.net mvc源代码。
注:对于cshtml静态化,可以完全的静态化,生成最终的html代码,也可以部分静态化,即还允许Layout的正常加载。对于第一种形式,还需要考虑相应的_Layout.cshtml以及_Layout.cshtml中的分部视图。
asp.net mvc 性能优化——(1)静态化的更多相关文章
- ASP.NET MVC性能优化工具 MiniProfiler
ASP.NET MVC性能优化工具 MiniProfiler 2014年04月19日 ⁄ ASP.NET ⁄ 共 1159字 ⁄ 字号 小 中 大 ⁄ 暂无评论 ⁄ 阅读 325 views 次 MV ...
- 记一次ASP.NET MVC性能优化(实际项目中)
前言 在开发中为了紧赶项目进度而未去关注性能的问题,在项目逐渐稳定下来后发现性能令人感到有点忧伤,于是开始去关注这方面,本篇为记录在开发中遇到的问题并解决,不喜勿喷.注意:以下问题都是在移动端上出现, ...
- 【转】记一次ASP.NET MVC性能优化(实际项目中)
前言 在开发中为了紧赶项目进度而未去关注性能的问题,在项目逐渐稳定下来后发现性能令人感到有点忧伤,于是开始去关注这方面,本篇为记录在开发中遇到的问题并解决,不喜勿喷.注意:以下问题都是在移动端上出现, ...
- ASP.NET MVC性能优化(实际项目中)
前言 在开发中为了紧赶项目进度而未去关注性能的问题,在项目逐渐稳定下来后发现性能令人感到有点忧伤,于是开始去关注这方面,本篇为记录在开发中遇到的问题并解决,不喜勿喷.注意:以下问题都是在移动端上出现, ...
- mvc性能优化
mvc性能优化 (1)移动设备卡顿问题 -1请求方式 在mvc中GET请求有问题,出现错误 在MVC中在进行GET请求获取JSON数据时,需要进行如下设置: return Json("&qu ...
- (摘录)26个ASP.NET常用性能优化方法
数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池(Co ...
- 26个ASP.NET常用性能优化方法
数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连接池(Co ...
- Django框架开发web网站的网页优化—页面静态化
网站优化-页面静态化 1)概念 提前将页面所用到的数据从数据库查询出来,然后生成一个静态页面,之后用户来访问的时候,直接返回静态页面. 举例:首页静态化:获取首页用到的数据表中的数据,生成静态首页in ...
- asp.net网站性能优化2则
摘要:Web服务器的性能优化有很多资料介绍了,多台主机负载均衡,查询结果的多级缓 存,数据库索引优化等都是常见的优化手段.随着后端优化空间越来越小,现在越来越多 的网站更注重前端性能的优化,就是浏览器 ...
随机推荐
- JavaScript正则表达式-非捕获性分组
非捕获性分组定义子表达式可以作为整体被修饰但是子表达式匹配结果不会被存储. 非捕获性分组通过将子表达式放在"?:"符号后. str = "img1.jpg,img2.jp ...
- 基于顺序链表的栈的顺序存储的C风格实现
头文件: #ifndef _SEQSTACK_H_ #define _SEQSTACK_H_ typedef void SeqStack; //创建一个栈 SeqStack* SeqStack_Cre ...
- 关于security的简单理解和应用
2018年7月30日1.搜索引擎框架百度google Lucene 单机操作,就是一堆jar包中的api的使用,自己干预,如何创建索引库,删除索引库,更新索引库,高亮,自己调度APISolr 支持we ...
- Android自动化测试Uiautomator--UiSelector接口简介
UiSelector对象可以理解为一种条件对象,描述的是一种条件,可以配合UiObject使用得到某个符合条件的控件对象. 所有的方法都是public的,且都返回UiSelector类的对象. 文本方 ...
- spring-cloud-sleuth 学习资源
https://www.baeldung.com/spring-cloud-sleuth-single-application https://howtodoinjava.com/spring-clo ...
- Exchange 正版化 授权
网友说法: Exchange服务器版其实价格不高,企业版也就是几万左右,贵的是客户端授权,一个客户端授权大概要300多.但是,但是,中国企业买Exchange客户端一般都是可以按比例买的,比如10%- ...
- 【07】像使用命令行一样使用 GitHub URL
[07] 像使用命令行一样使用 GitHub URL 既然说到了 URL,那么久接着聊一下.使用 UI 浏览 GitHub 很 方面也很好,不过很多时候最快的方式是使用 URL 来浏览.举个例子,如果 ...
- Python (Page Object实例)
Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,通过对界面元素和功能模块的封装减少冗余代码,同时在后期维护中,若元素定位或功能模块发生变化,只需要调整页面元素或功能模 ...
- UVA - 10591 Happy Number
Happy Number UVA - 10591 Let the sum of the square of the digits of a positive integer S0 be represe ...
- 【UML】关联、依赖、泛化、实现等关系说明
导读:再上一篇博客中,介绍了UML的9种图,现在,将对UML中的关系进行总结.图很重要,但图形中的各种关系也很重要,这扯关系的事儿,从来都是大事儿. 一.基本定义 1.1 总体说明 1.2 具体定义 ...