MVC页面加载速度优化小记
2014-03-11 15:57
232 查看
前言: |
Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.
Google 了一下,原来是由于业务数据的增多, ajax 后台返回时报错,参考网上的方法,在返回时设置一下 MaxJsonLength
var jsonResult = Json(jsonString); jsonResult.MaxJsonLength = int.MaxValue; return jsonResult;
报错的问题是解决了,可还有一个问题就是页面加载时间过长。为了地图展示的效果,不能进行数据分页。
期间尝试了很多方法,记录如下:
列表与地图同步: |
if(pageData.length>0){ SetListHtml(1); $("#loadGif").hide(); setTimeout(function () {SetMap();}, 0); } else{ $("#loadGif").hide(); }
存储过程和缓存: |
public DataTable GetCacheGpsBoundary() { string cacheKey = "dtCustomerBoundary"; DataTable dtCustomerBoundary = (DataTable)HttpRuntime.Cache.Get(cacheKey); if (dtCustomerBoundary == null) { log.Debug("dtCustomerBoundary从数据库中获取"); dtCustomerBoundary = new DataTable(); string sql = ""; SqlCacheDependency sqlCacheDependency = null; string connectionString = ConfigurationManager.AppSettings[""]; using (SqlConnection cn = new SqlConnection(connectionString)) { using (SqlCommand cmd = cn.CreateCommand()) { cn.Open(); cmd.CommandText = sql; sqlCacheDependency = new SqlCacheDependency(cmd); //当有DML操作时,onChange事件会接收来自Sql Server通过sq_DispatcherProc存储过程发送给应用程序的消息。 using (SqlDataAdapter adapter = new SqlDataAdapter()) //查询数据 { adapter.SelectCommand = cmd; adapter.Fill(dtCustomerBoundary); } } } HttpContext.Current.Cache.Insert(cacheKey, dtCustomerBoundary, sqlCacheDependency); } else { log.Debug("dtCustomerBoundary从缓存中获取"); } return dtCustomerBoundary; }
View Code
GZip压缩: |
HttpWatch Basic 9.2
Copyright: Copyright 2002 -2014 Simtec Limited
Version: 9.2.6
先看下图例颜色的意义:
![](http://images.cnitblog.com/i/421389/201403/111312058491595.jpg)
我理解 Wait 就是服务器执行用时, Receive 就是传输用时。
没有加存储过程和缓存:
![](http://images.cnitblog.com/i/421389/201403/111346533975171.jpg)
再来看下改成存储过程和加缓存后
![](http://images.cnitblog.com/i/421389/201403/111409273478063.jpg)
最后是启用 GZip 后的图
![](http://images.cnitblog.com/i/421389/201403/111442162343557.jpg)
通过 HttpWatch 我们可以看出压缩后数据的大小 853424 ,为压缩前 4309641 的 19.80% 、用时也由 8.623 缩短到 3.119 ,由于服务器当前资源、网络情况等每次时间会有所不同。
启用 GZip 压缩后,服务器和客户端 CPU 负担会加大,但对页面加载速度效果还是很明显的,刚开始通过 HttpWatch 看出是由于传输数据过大使页面加载时间过长时,就想到要用压缩,可在后台 ajax 方法中对返回的 Json 字符串 采用 GZipStream 压缩后,在前台 JavaScript 一直找不到好的方法去解压,尝试了很多加解压算法 Zlib、LZString 等等,加解压的时间都太长了,没什么效果。
看了 单程列车 博客上 .NET MVC 简单实现GZIP 后在后台添加一个
Filter就可以实现服务端 gzip 压缩,客户端会自动解压,客户端 ajax 时可能要加一句
headers: { "Accept-Encoding" : "gzip" } ,其实我觉得 ajax 就是异步的去打开某一网页。
总结: |
刚开始想在取数据这块优化,看 sql 的执行计划看的一头雾水,今年要买些数据库优化方法的书补补;
对 JavaScript、HTTP、C#、MVC、SQL 等等掌握的是否系统、全面在综合运用时起着决定性的作用
解决一个问题的时候还是很高兴的。
参考: |
/article/5296317.html
/article/5083062.html
HTTP权威指南
相关文章推荐
- Pig Hive对比(zz)
- Maven pom.xml报错解决
- php入门引言
- MVC 定时执行任务
- javascript继承之原型链(一)
- 用Builder封装Intent参数传递
- 消费者购买决策行为研究模型
- poj2141 Message Decowding
- 企业信息化建设中的小细节
- 当企业产品遇上用户体验
- 收集的常用正则表达式
- SQL自动并且异地备份重要的数据库文件
- vs2008在打了SP1补丁后编译版本不匹配,导致“应用程序配置不正确,应用程序未能启动
- Android超链接
- jQuery数组处理全解
- MongoDB笔记六——删除操作
- 网站的PR值计算
- WebRtc VoiceEngine代码解析
- 删除硬盘上的大文件
- qt4 tcp QTcpSocket QTcpServer 传输文件