项目开发中遇到的一些问题以及解决方法.
1. 脚本相关
- mvc中RemoteAttribute使用,在IE浏览器下面会将结果缓存起来(304).因为IE浏览器判断Url的链接参数都没有变化,所以直接返回上一次的结果(304结果),但是其实我是需要重新再验证.
解决方式:直接在jquery.validate.unobtrusive.js的remote方法中加上时间戳即可.
var remoteUrl = options.params.url;
var remoteUrlAppendTime = remoteUrl + (remoteUrl.indexOf('?') > -1 ? "&" : "?") + new Date().getTime();
- jquery validate 在IE10 下出现 js错误(成员找不到)的修正
解决方式:
this.attr('novalidate', 'novalidate');
//==>修改为下面即可
if (typeof (Worker) ! "undefined") { this.attr('novalidate', 'novalidate'); }
- jquery调用webapi的参数仅仅只有一个数组(array).web api是如下定义public Result TestArray(string[] testArr);
解决方式:
将该数组直接弄成对一个参数名为空的对象.如下代码所示:
var arr=[1,2];var obj={"":arr};$.ajax({data:obj...});
2.样式相关
- 笔者需要处理一些响应式布局,鉴于笔者对css 比较小菜鸟.在使用@media screen and (max-450px)进行对移动端进行兼容.但是考虑到IE8下不能使用media进行query
解决方式:
下载css3-mediaqueries.js脚本放置到
3.Web Api端
- web api生成文档,笔者这边使用web api help直接生成的文档.然而,针对分层的解决方案,在api help页面上不显示其注释的内容.
解决方法:
①在.Areas.HelpPage.HelpPageConfig指向一个xml改变成指向指定的文件夹
config.SetDocumentationProvider(new XmlDocumentationProvider( HttpContext.Current.Server.MapPath("~/App_Data")));
② 在XmlDocumentationProvider构造函数中,通过文件夹获取文件夹下的注释xml;删除_documentNavigator变量,并添加private List_documentNavigators = new List ();
public XmlDocumentationProvider(string appDataPath)
{
if (appDataPath == null)
{
throw new ArgumentNullException("appDataPath");
}
var files = Directory.GetFiles(documentPath, "*.xml");
foreach (var file in files)
{
XPathDocument xpath = new XPathDocument(Path.Combine(appDataPath, file));
_documentNavigators.Add(xpath.CreateNavigator());
}
}
③ 增加xml选择器的代码
private XPathNavigator SelectSingleNode(string selectExpression)
{
foreach (var navigator in _documentNavigators)
{
var propertyNode = navigator.SelectSingleNode(selectExpression);
if (propertyNode != null) return propertyNode;
}
return null;
}
④ 将_documentNavigator.SelectSingleNode调用修改为第三步的方法名.至于将各个分层注释生成到指定文件夹,可以自己配置.
4.部署相关(主要是发布时一些小优化)
- 对于IIS无法加载js与css的问题
解决方法:在控制面板上打开或关闭window功能中的Internet信息服务里的万维网服务=>常见HTTP功能=>静态内容,安装之就可以完成
- 启动浏览器本地缓存
操作:IIS管理器中指定的网站上,Http响应标头>常用标头>勾取使web过期之后7天;在mvc的web.config 的
<system.webServer>
</system.webServer>
- iis启动gzip压缩
操作:iis管理器指定网站的"压缩"==>勾取启动静/动态内容压缩,有利于加快访问传输数据
- 在线测试网页的访问速度,笔者这边使用卡卡网网站进行检测,该网站会提出一些优化建议,各位看官不知道还有没有好用??
5.写在最后
- 网页的访问速度更很多方面挂钩,不仅仅部署的时候注意.其实更多的是数据库操作以及一些必要的缓存策略.
- 对于数据库方面更多就是更多的注意批量操作的以及跨表查询.现在ORM框架都比较成熟,如EF,NH等,查询方面需要明白IQueryable与IEnumerable区别?是使用懒惰加载还是贪懒加载?批量插入是一条条插入还是直接批量直接插入?等等方面多考虑
- 缓存笔者这边更多就使用原生的HttpRuntime.Cache进行缓存一些经常用到的配置信息等等.
- 代码的可读性/稳定性,都需要留心注意.因为当别人坑你的时候你不爽,就应该想到自己不要留坑给别人
希望能给你一点点帮助!
一些参考
http://stackoverflow.com/questions/21895257/how-can-xml-documentation-for-web-api-include-documentation-from-beyond-the-main
http://www.iis.net/configreference/system.webserver/staticcontent/clientcache
http://kwilson.me.uk/blog/post-an-array-of-objects-to-webapi-using-jquery/
http://jingyan.baidu.com/article/597035521b96e88fc00740af.html
http://www.cnblogs.com/alicePanZ/p/4789687.html