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服务器的性能优化有很多资料介绍了,多台主机负载均衡,查询结果的多级缓 存,数据库索引优化等都是常见的优化手段.随着后端优化空间越来越小,现在越来越多 的网站更注重前端性能的优化,就是浏览器 ...
随机推荐
- POJ 1273 Drainage Ditches(最大流Dinic 模板)
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n, ...
- python中strip(),lstrip(),rstrip()函数的讲解
1. strip() 它的函数原型:string.strip(s[, chars]),它返回的是字符串的副本,并删除前导和后缀字符.(意思就是你想去掉字符串里面的哪些字符,那么你就把这些字符当参数传入 ...
- PAT Basic 1023
1023 组个最小数 给定数字0-9各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意0不能做首位).例如:给定两个0,两个1,三个5,一个8,我们得到的最小 ...
- 利用Vert.x构建简单的API 服务、分布式服务
目前已经使用Vertx已经一年多了,虽然没有太多的造诣,但也已在项目中推广了下:从最初的vertx搭建web服务,到项目上线运营,还算比较稳定.再到后来尝试搭建基于vertx的分布式服务,一路下来也积 ...
- appium+python自动化-adb logcat查看日志
前言 做app测试,遇到异常情况,查看日志是必不可少的,日志如何输出到手机sdcard和电脑的目录呢?这就需要用logcat输出日志了 以下操作是基于windows平台的操作:adb logcat | ...
- Centos6.5搭建git远程仓库
远程仓库搭建 step1:安装git ```yum -y install git``` step2:创建用户git,用来运行git服务 useradd git passwd git //修改git用户 ...
- BASH重定向问题
APUE 3.5关于重定向有个容易迷惑人的问题: ./a.out > outfile 2>&1 ./a.out 2>&1 > outfile 问两者区别? in ...
- 【Luogu】P1586四方定理(DP)
题目链接 此题使用DP.设f[i][j]表示数i用j个数表示,则对于所有的k<=sqrt(i),有 f[i][j]=∑f[i-k*k][j-1] 但是这样会有重复情况.所以先枚举k,再枚举i和j ...
- HDU——4549M斐波那契数列(矩阵快速幂+快速幂+费马小定理)
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Su ...
- BZOJ4199 [Noi2015]品酒大会 【后缀数组 + 单调栈 + ST表】
题目 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发"首席品 酒家"和"首席猎手"两个奖项,吸 ...