c# 网站生成静态页面
在一些需要经常更新页面数据的网站中,一般访问量不是很大的都直接发布的是带后台代码,每次访问都是有数据库交互的。但是一旦访问量增加了,那么这些服务器开销变成本就要考虑进来了,像一些文章,后台编辑后,文章内容存入数据库,如果1000人访问,如果还是每次取数据库,那这1000次的io访问就显得比较大了,一个好的方法就是,文章确定之后,做成静态页面,而这个做的方法由程序来做,就是递归遍历整个网站,将网站内容都访问一遍,然后生成这些页面的静态文本页面,在将这些页面发布,这样对浏览者而言,他看到的还是同一个地址,同一份文章,只是这份是静态的而言。这样就提升了网站的效率节约了资源;
下面附上一份C#遍历网站内容,然后生成内容页面代码;
- private ArrayList htmlCreatedList = new ArrayList();
- /// <summary>
- /// 递归实现页面静态化功能
- /// </summary>
- /// <param name="urlString">要访问的页面链接地址</param>
- public void SaveHtmlCode(string urlString)
- {
- if (htmlCreatedList.Contains(urlString))
- {
- return;
- }
- string htmlCode = GetHtmlCodeFromUrl(urlString);
- string htmlPath = urlString.ToPhysicalPath();
- string direcHtmlPath = Path.GetDirectoryName(htmlPath);
- if (!Directory.Exists(direcHtmlPath))
- {
- Directory.CreateDirectory(direcHtmlPath);
- }
- File.WriteAllText(htmlPath, htmlCode);
- htmlCreatedList.Add(urlString);
- var urlList = GetUrlLinkFromHtmlCode(htmlCode);
- string urlTemp = string.Empty;
- foreach (string url in urlList)
- {
- urlTemp = url;
- urlTemp = Regex.Replace(urlTemp, "href\\s*=\\s*", "");
- urlTemp = urlTemp.Replace("\"", "");
- urlTemp = urlTemp.Replace("\\", "/");
- urlTemp = WebConfigInfo.UrlPrefix + urlTemp;
- SaveHtmlCode(urlTemp);
- }
- }
- /// <summary>
- /// 通过HttpWebRequest页面链接的html代码
- /// </summary>
- /// <param name="urlString">页面链接地址</param>
- /// <returns>页面链接对应的html代码</returns>
- private string GetHtmlCodeFromUrl(string urlString)
- {
- HttpWebRequest hwRequest = (HttpWebRequest)WebRequest.Create(urlString);
- hwRequest.UserAgent = "User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705";
- hwRequest.Accept = "*/*";
- hwRequest.KeepAlive = true;
- hwRequest.Headers.Add("Accept-Language", "zh-cn,en-us;q=0.5");
- HttpWebResponse hwResponse = (HttpWebResponse)hwRequest.GetResponse();
- Stream streamResponse = hwResponse.GetResponseStream();
- StreamReader readerOfStream = new StreamReader(streamResponse, System.Text.Encoding.GetEncoding("utf-8"));
- string strHtml = readerOfStream.ReadToEnd();
- readerOfStream.Close();
- streamResponse.Close();
- hwResponse.Close();
- return strHtml;
- }
- ///<summary>
- ///正则表达式匹配出html代码中的超链接
- ///</summary>
- ///<param name="htmlCode">要找出超链接的html代码</param>
- ///<returns></returns>
- private IEnumerable<string> GetUrlLinkFromHtmlCode(string htmlCode)
- {
- string strRegex = "href\\s*=\\s*(?:[\"'](?<1>[^\"'.#:]*)[\"'])";
- Regex r = new Regex(strRegex, RegexOptions.IgnoreCase);
- MatchCollection ms = r.Matches(htmlCode);
- IEnumerable<string> listUrl = from Match cc in ms select cc.ToString().Replace("&", "&");
- return listUrl.Distinct();
- }
- }
给string 扩展了一个方法。
- public static string ToPhysicalPath(this string urlString)
- {
- System.Uri uri = new System.Uri(urlString);
- string htmlPath = string.Format("{0}\\Html\\{1}\\", System.Web.HttpContext.Current.Request.PhysicalApplicationPath, uri.AbsolutePath);
- string[] querys = uri.Query.Split(new char[] { '?', '&', '=' }, StringSplitOptions.RemoveEmptyEntries);
- htmlPath += string.Join(string.Empty, querys);
- htmlPath += querys.Length.Equals(0) ? "Index.html" : ".html";
- htmlPath = htmlPath.Replace("/", "\\");
- htmlPath = htmlPath.Replace("\\\\", "\\");
- return htmlPath;
- }
c# 网站生成静态页面的更多相关文章
- 浅谈php生成静态页面
一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权 ...
- .net 生成 静态页面
.net 生成 静态页面 <!--Main.Aspx--> <%@ page language="C#" %> <%@ import namespac ...
- C#根据网址生成静态页面
HoverTree开源项目中HoverTreeWeb.HVTPanel的Index.aspx文件 是后台管理的首页. 包含生成留言板首页,以及显示用户名,退出等功能. 根据网址生成页面的方法: boo ...
- 比较详细PHP生成静态页面教程
一,PHP脚本与动态页面. PHP脚本是一种服务器端脚本程序,可通过嵌入等方法与HTML文件混合, 也可以类,函数封装等形式,以模板的方式对用户请求进行处理.无论以何种方式,它的基本原理是这样的.由客 ...
- [转]把动态页面.aspx 生成静态页面.html
本文转自:http://blog.csdn.net/csb5201314/article/details/5391688 如果要把主页Index.aspx 生成静态页面 Index.html后输出会提 ...
- PHP生成静态页面的方法
在PHP网站开发中为了网站推广和SEO等需要,需要对网站进行全站或局部静态化处理,PHP生成静态HTML页面有多种方法,比如利用PHP模板.缓存 等实现页面静态化,今天就以PHP实例教程形 ...
- .NET生成静态页面例子
主要做法如下: 1.创建网站,并创建一个模板页,template.htm 2.添加一个web窗体Default.aspx 3.在网站下新建文件夹htm,设置该文件夹的属性,确保该文件夹具有可写权限 详 ...
- 三种C#.net生成静态页面的方法
ASP.NET生成静态页面方法主要有三种 第一种方法:向服务器的动态页面发送请求,获取页面的html代码.这种方法缺点显而易见:速度慢.另外如果请求的动态页面有验证控件的话,返回的html页面却无 ...
- Java项目生成静态页面
第一次做项目需要生成静态页面,网上很多大牛对将网页生成静态页面有很多异议.说一下我的看法. 不外乎有以下因素: 1.从页面加载时间来看:静态页面不需要与数据库建立连接,尤其是访问数据量较大的页面,这种 ...
随机推荐
- UVA 10474 (13.08.04)
Where is the Marble? Raju and Meena love to play with Marbles. They have got a lotof marbles with ...
- unity opaque sort
https://docs.unity3d.com/ScriptReference/Rendering.OpaqueSortMode.html unity对opaque的排序 tbdr下不排序 其它由近 ...
- 图解vue中 v-for 的 :key 的作用,虚拟dom Diff算法
其实不只是vue,react中在执行列表渲染时也会要求给每个组件添加上key这个属性. 要解释key的作用,不得不先介绍一下虚拟DOM的Diff算法了. 我们知道,vue和react都实现了一套虚拟D ...
- GO语言基础之并发concurrency
并发Concurrency 很多人都是冲着 Go 大肆宣扬的高并发而忍不住跃跃欲试,但其实从源码的解析来看,goroutine 只是由官方实现的超级“线程池”而已.不过话说回来,每个实例 4-5KB的 ...
- iOS8开发~Swift(二)Playground
一.Playground介绍 Playground是Xcode6中自带的Swift代码开发环境.俗话说"功欲善其事,必先利其器".曾经在Xcode5中编写脚本代码.比如编写JS.其 ...
- java实现内部排序算法
冒泡排序 public class BubbleSort{ public static int[] asc(int[] a){ int item; for (int i = 0; i < a.l ...
- Win10 专业版激活!
从Win8.1(无论盗版正版),只要符合计算机处理器位数(32或64),就可以 利用: QJNXR-YD97Q-K7WH4-RYWQ8-6MT6Y 激活你的永久Win10,且激活后记录当前设备信息,版 ...
- 除掉inline-block 间距
1.现象: <!doctype html> <html lang="en"> <head> <meta charset="UTF ...
- EXCEPTION-javaBean
CreateTime--2016年11月24日14:29:43Author:Marydon 声明:异常类文章主要是记录了我遇到的异常信息及解决方案,解决方案大部分都是百度解决的,(这里只是针对我遇 ...
- oracle tnsnames.ora文件用法说明
oracle tnsnames.ora文件用法说明 CreationTime--2018年8月10日08点32分 Author:Marydon 1.用途 oracle客户端所需要的一个文件,通过该 ...