2006年09月10日

http://lividot.org/man/ 这个目录下有一些很不错的文档,大家来看看有没有自己需要的?

如果你希望自己成为一个更加专业的 geek,那我建议你把上面的所有文档都通读一遍,必定收获巨大。

关于制造中文 Web 阅读体验过程中的一些思考结论。
正文字体的尺寸应该使用固定的偶数像素单位,如 12px,14px,16px 等,一个例外情况就是 15px 像素也是相当不错的正文字体的尺寸。由于中文 Windows 操作系统及部分的 Linux 发行版使用的是像素字库,因此,这几个尺寸的字体在显示效果上最佳。而在 Mac OS X 上,因为 Mac OS X 使用的是矢量字库,则在各种尺寸下显示效果都不错。另外就是,Mac OS X 的中文矢量字库中内嵌了 12px 的像素字库。
blockquote、ol、ul 等 HTML 元素内的文字应该在顶端和尾端留出至少 10px 的空白,在左端留出 20px 左右的空白,右端 10px 左右。在 CSS 语法中这些空白应该使用 margin 方式设置,padding 方式不提倡使用。padding 可以用来实现其他视觉效果。
不要随意在正文和标题中使用拉丁等宽字体,除非是为了一些艺术上的用意。拉丁等宽字体应该用在和模拟打印制品或者程序源代码有关的场合。
不要在任何地方强制指定使用任何的艺术中文字体,比如“魏碑”之类,这将在超过一半以上的计算机上,尤其是非 Windows 操作系统的计算机上不会显示出任何效果。
应该对大部分文字的 line-height 属性进行强制指定,一个经验是,对于正文文字,line-height 数值可以指定为这些文字的 font-size 的像素值的 1.6 倍左右。如果是标题文字的话,1.3 倍左右。
中文正文及标题中出现的标点符号应该使用全角方式输入。
中文正文及标题中出现的英文及数字应该使用半角方式输入,并且在左右各留一个半角空格。如果这些这些半角英文及数字的左边或者右边紧接着任何的中文全角括号或者其他标点符号的话,则不需要加入半角空格。
中文全角空格应该只在标题处使用。此外,在 Web 上的文字的正文的段落开头是否使用两个全角空格是个人喜好问题,反正我不喜欢用,因为这些全角空格有些浪费存储空间,且对快速扫描式的阅读没有太大帮助。
在 Web 上的文字,是被人们用眼睛来扫描的,绝大部分都不会被人仔细阅读。
中文字体的粗体和斜体显示效果不推荐使用。在大部分非 Windows 操作系统上,这些效果都不被字库或者浏览器支持。而在 Windows 操作系统上,这些效果也不够理想。粗体中文显示效果在 Windows 操作系统上会让部分笔画连接在一起而使得文字难以被辨认,而斜体中文显示效果则会使得部分笔画消失,也非常难以被辨认。如果一定要使用此二种效果,则要么通过 CSS 的 font-weight 方式指定,要么通过 strong 和 em 标签,而不要使用 b 和 i 标签。
中文的段落与段落之间应该留出一个完整的空行。即每个段落使用一对闭合的 p 标签在不加 CSS 时候的效果,或者是使用两个 br 标签时产生的效果。注意,这个空行的高度会受到 line-height 的影响,因此不要把 line-height 设置为太高的数值,否则将使得两个段落之前的视觉联系减弱,导致影响阅读时候的思路连贯。
如果文字是要被通过 RSS 输出的,则可以考虑在其中加入一份内嵌样式表,对于 ol、ul、blockquote 等元素的样式尤其需要控制。这样可以保证即使文字被显示在其他网站,其样式也依然可以保持统一,如果没有被聚合器过滤 HTML 标签的话。
以上这些,是我在写任何 HTML 文档时候的指导原则。比如,V2EX 的所有文档及 UBB 转换器都尽量符合这些原则。 

2006年09月07日

1、DateTime 数字型
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分秒
currentTime=System.DateTime.Now;
1.2 取当前年
int 年=currentTime.Year;
1.3 取当前月
int 月=currentTime.Month;
1.4 取当前日
int 日=currentTime.Day;
1.5 取当前时
int 时=currentTime.Hour;
1.6 取当前分
int 分=currentTime.Minute;
1.7 取当前秒
int 秒=currentTime.Second;
1.8 取当前毫秒
int 毫秒=currentTime.Millisecond;
(变量可用中文)

1.9 取中文日期显示——年月日时分
string strY=currentTime.ToString("f"); //不显示秒

1.10 取中文日期显示_年月
string strYM=currentTime.ToString("y");

1.11 取中文日期显示_月日
string strMD=currentTime.ToString("m");

1.12 取当前年月日,格式为:2003-9-23
string strYMD=currentTime.ToString("d");

1.13 取当前时分,格式为:14:24
string strT=currentTime.ToString("t");

2、Int32.Parse(变量) Int32.Parse("常量")
字符型转换 转为32位数字型

3、 变量.ToString()
字符型转换 转为字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%

4、变量.Length 数字型
取字串长度:
如: string str="中国";
int Len = str.Length ; //Len是自定义变量, str是求测的字串的变量名

5、System.Text.Encoding.Default.GetBytes(变量)
字码转换 转为比特码
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比特长度:
len = bytStr.Length;

6、System.Text.StringBuilder("")
字符串相加,(+号是不是也一样?)
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和国");

7、变量.Substring(参数1,参数2);
截取字串的一部分,参数1为左起始位数,参数2为截取几位。
如:string s1 = str.Substring(0,2);

8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
取远程用户IP地址

9、穿过代理服务器取远程用户真实IP地址:
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}

10、 Session["变量"];
存取Session值;
如,赋值: Session["username"]="小布什";

取值: Object objName=Session["username"];
String strName=objName.ToString();
清空: Session.RemoveAll();

11、String str=Request.QueryString["变量"];
用超链接传送变量。
如在任一页中建超链接:<a href=Edit.aspx?fbid=23>点击</a>
在Edit.aspx页中取值:String str=Request.QueryString["fdid"];

12、DOC对象.CreateElement("新建节点名");
创建XML文档新节点

13、父节点.AppendChild(子节点);
将新建的子节点加到XML文档父节点下

14、 父节点.RemoveChild(节点);
删除节点

15、Response
Response.Write("字串");
Response.Write(变量);
向页面输出。

Response.Redirect("URL地址");
跳转到URL指定的页面

16、char.IsWhiteSpce(字串变量,位数)——逻辑型
查指定位置是否空字符;
如:
string str="中国 人民";
Response.Write(char.IsWhiteSpace(str,2)); //结果为:True, 第一个字符是0位,2是第三个字符。

17、char.IsPunctuation(‘字符’) –逻辑型
查字符是否是标点符号
如:Response.Write(char.IsPunctuation(‘A’)); //返回:False

18、(int)’字符’
把字符转为数字,查代码点,注意是单引号。
如:
Response.Write((int)’中’); //结果为中字的代码:20013

19、(char)代码
把数字转为字符,查代码代表的字符。
如:
Response.Write((char)22269); //返回“国”字。

20、 Trim()
清除字串前后空格

21 、字串变量.Replace("子字串","替换为")
字串替换
如:
string str="中国";
str=str.Replace("国","央"); //将国字换为央字
Response.Write(str); //输出结果为“中央”

再如:(这个非常实用)

string str="这是<script>脚本";
str=str.Replace("<","<font><</font>"); //将左尖括号替换为<font> 与 < 与 </font> (或换为<,但估计经XML存诸后,再提出仍会还原)
Response.Write(str); //显示为:“这是<script>脚本”

如果不替换,<script>将不显示,如果是一段脚本,将运行;而替换后,脚本将不运行。
这段代码的价值在于:你可以让一个文本中的所有HTML标签失效,全部显示出来,保护你的具有交互性的站点。
具体实现:将你的表单提交按钮脚本加上下面代码:
string strSubmit=label1.Text; //label1是你让用户提交数据的控件ID。
strSubmit=strSubmit.Replace("<","<font><</font>");
然后保存或输出strSubmit。
用此方法还可以简单实现UBB代码。

22、Math.Max(i,j)
取i与j中的最大值
如 int x=Math.Max(5,10); // x将取值 10

23、字串对比一般都用: if(str1==str2){ } , 但还有别的方法:

(1)、
string str1; str2
//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如:
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); }

(2)、
//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.

(3)、
//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.

24、IndexOf() 、LastIndexOf()
查找字串中指定字符或字串首次(最后一次)出现的位置,返回索引值,如:
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)
str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置)
str1.IndexOf("字串",3,2);//从str1第4个字符起,查找2个字符,查找“字串”的第一个字符在str1中的索引值(位置)

25、Insert()
在字串中指定索引位插入指定字符。如:
str1.Insert(1,"字");在str1的第二个字符处插入“字”,如果str1="中国",插入后为“中字国”;

26、PadLeft()、PadRight()
在字串左(或右)加空格或指定char字符,使字串达到指定长度,如:
<%
string str1="中国人";
str1=str1.PadLeft(10,’1′); //无第二参数为加空格
Response.Write(str1); //结果为“1111111中国人” , 字串长为10
%>

27、Remove()
从指定位置开始删除指定数的字符
字串对比一般都用: if(str1==str2){ } , 但还有别的方法:

1、
string str1; str2
//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如:
if(str1.EndsWith(str2)){ Response.Write("字串str1是以"+str2+"结束的"); }

2、
//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.

3、
//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.

28、IndexOf()
查找字串中指定字符或字串首次出现的位置,返首索引值,如:
str1.IndexOf("字"); //查找“字”在str1中的索引值(位置)
str1.IndexOf("字串");//查找“字串”的第一个字符在str1中的索引值(位置)
str1.IndexOf("字串",3,2);//从str1第4个字符起,查找2个字符,查找“字串”的第一个字符在str1中的索引值(位置)

1. 数据库访问性能优化
  数据库的连接和关闭
  访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求。
  连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能。因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用完毕后马上关闭,从而尽量减少数据库连接打开的时间,避免出现超出连接限制的情况。
  使用存储过程
  存储过程是存储在服务器上的一组预编译的SQL语句,类似于DOS系统中的批处理文件。存储过程具有对数据库立即访问的功能,信息处理极为迅速。使用存储过程可以避免对命令的多次编译,在执行一次后其执行规划就驻留在高速缓存中,以后需要时只需直接调用缓存中的二进制代码即可。
  另外,存储过程在服务器端运行,独立于ASP.NET程序,便于修改,最重要的是它可以减少数据库操作语句在网络中的传输。
  优化查询语句
  ASP.NET中ADO连接消耗的资源相当大,SQL语句运行的时间越长,占用系统资源的时间也越长。因此,尽量使用优化过的SQL语句以减少执行时间。比如,不在查询语句中包含子查询语句,充分利用索引等。
2. 字符串操作性能优化
  使用值类型的ToString方法
  在连接字符串时,经常使用"+"号直接将数字添加到字符串中。这种方法虽然简单,也可以得到正确结果,但是由于涉及到不同的数据类型,数字需要通过装箱操作转化为引用类型才可以添加到字符串中。但是装箱操作对性能影响较大,因为在进行这类处理时,将在托管堆中分配一个新的对象,原有的值复制到新创建的对象中。
  使用值类型的ToString方法可以避免装箱操作,从而提高应用程序性能。
  运用StringBuilder类
  String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。
  在处理字符串时,最好使用StringBuilder类,其.NET 命名空间是System.Text。该类并非创建新的对象,而是通过Append,Remove,Insert等方法直接对字符串进行操作,通过ToString方法返回操作结果。
  其定义及操作语句如下所示:
int num;
System.Text.StringBuilder str = new System.Text.StringBuilder(); //创建字符串
str.Append(num.ToString()); //添加数值num
Response.Write(str.ToString); //显示操作结果
3. 优化 Web 服务器计算机和特定应用程序的配置文件以符合您的特定需要
  默认情况下,ASP.NET 配置被设置成启用最广泛的功能并尽量适应最常见的方案。因此,应用程序开发人员可以根据应用程序所使用的功能,优化和更改其中的某些配置,以提高应用程序的性能。下面的列表是您应该考虑的一些选项。
  仅对需要的应用程序启用身份验证。默认情况下,身份验证模式为 Windows,或集成 NTLM。大多数情况下,对于需要身份验证的应用程序,最好在 Machine.config 文件中禁用身份验证,并在 Web.config 文件中启用身份验证。
  根据适当的请求和响应编码设置来配置应用程序。ASP.NET 默认编码格式为 UTF-8。如果您的应用程序为严格的 ASCII,请配置应用程序使用 ASCII 以获得稍许的性能提高。
  考虑对应用程序禁用 AutoEventWireup。在 Machine.config 文件中将 AutoEventWireup 属性设置为 false,意味着页面不将方法名与事件进行匹配和将两者挂钩(例如 Page_Load)。如果页面开发人员要使用这些事件,需要在基类中重写这些方法(例如,需要为页面加载事件重写 Page.OnLoad,而不是使用 Page_Load 方法)。如果禁用 AutoEventWireup,页面将通过将事件连接留给页面作者而不是自动执行它,获得稍许的性能提升。
  从请求处理管线中移除不用的模块。默认情况下,服务器计算机的 Machine.config 文件中 <httpModules> 节点的所有功能均保留为激活。根据应用程序所使用的功能,您可以从请求管线中移除不用的模块以获得稍许的性能提升。检查每个模块及其功能,并按您的需要自定义它。
  例如,如果您在应用程序中不使用会话状态和输出缓存,则可以从 <httpModules>列表中移除它们,以便请求在不执行其他有意义的处理时,不必执行每个模块的进入和离开代码。
4. 一定要禁用调试模式
  在部署生产应用程序或进行任何性能测量之前,始终记住禁用调试模式。如果启用了调试模式,应用程序的性能可能受到非常大的影响。
5. 对于广泛依赖外部资源的应用程序,请考虑在多处理器计算机上启用网络园艺
  ASP.NET 进程模型帮助启用多处理器计算机上的可缩放性,将工作分发给多个进程(每个 CPU 一个),并且每个进程都将处理器关系设置为其 CPU。此技术称为网络园艺。如果应用程序使用较慢的数据库服务器或调用具有外部依赖项的 COM 对象(这里只是提及两种可能性),则为您的应用程序启用网络园艺是有益的。但是,在决定启用网络园艺之前,您应该测试应用程序在网络园中的执行情况。
6. 只要可能,就缓存数据和页输出
  ASP.NET 提供了一些简单的机制,它们会在不需要为每个页请求动态计算页输出或数据时缓存这些页输出或数据。另外,通过设计要进行缓存的页和数据请求(特别是在站点中预期将有较大通讯量的区域),可以优化这些页的性能。与 .NET Framework 的任何 Web 窗体功能相比,适当地使用缓存可以更好的提高站点的性能,有时这种提高是超数量级的。
  使用 ASP.NET 缓存机制有两点需要注意。首先,不要缓存太多项。缓存每个项均有开销,特别是在内存使用方面。不要缓存容易重新计算和很少使用的项。其次,给缓存的项分配的有效期不要太短。很快到期的项会导致缓存中不必要的周转,并且经常导致更多的代码清除和垃圾回收工作。若关心此问题,请监视与 ASP.NET Applications 性能对象关联的 Cache Total Turnover Rate 性能计数器。高周转率可能说明存在问题,特别是当项在到期前被移除时。这也称作内存压力。
7. 选择适合页面或应用程序的数据查看机制
  根据您选择在 Web 窗体页显示数据的方式,在便利和性能之间常常存在着重要的权衡。例如,DataGrid Web 服务器控件可能是一种显示数据的方便快捷的方法,但就性能而言它的开销常常是最大的。在某些简单的情况下,您通过生成适当的 HTML 自己呈现数据可能很有效,但是自定义和浏览器定向会很快抵销所获得的额外功效。Repeater Web 服务器控件是便利和性能的折衷。它高效、可自定义且可编程。
8. 将 SqlDataReader 类用于快速只进数据游标
  SqlDataReader 类提供了一种读取从 SQL Server 数据库检索的只进数据流的方法。如果当创建 ASP.NET 应用程序时出现允许您使用它的情况,则 SqlDataReader 类提供比 DataSet 类更高的性能。情况之所以这样,是因为 SqlDataReader 使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据。另外,SqlDataReader 类实现 IEnumerable 接口,该接口也允许您将数据绑定到服务器控件。有关更多信息,请参见 SqlDataReader 类。有关 ASP.NET 如何访问数据的信息,请参见通过 ASP.NET 访问数据。
9. 将 SQL Server 存储过程用于数据访问
  在 .NET Framework 提供的所有数据访问方法中,基于 SQL Server 的数据访问是生成高性能、可缩放 Web 应用程序的推荐选择。使用托管 SQL Server 提供程序时,可通过使用编译的存储过程而不是特殊查询获得额外的性能提高。
10. 避免单线程单元 (STA) COM 组件
  默认情况下,ASP.NET 不允许任何 STA COM 组件在页面内运行。若要运行它们,必须在 .aspx 文件内将 ASPCompat=true 属性包含在 @ Page 指令中。这样就将执行用的线程池切换到 STA 线程池,而且使 HttpContext 和其他内置对象可用于 COM 对象。前者也是一种性能优化,因为它避免了将多线程单元 (MTA) 封送到 STA 线程的任何调用。
  使用 STA COM 组件可能大大损害性能,应尽量避免。若必须使用 STA COM 组件,如在任何 interop 方案中,则应在执行期间进行大量调用并在每次调用期间发送尽可能多的信息。另外,小心不要在构造页面期间创建任何 STA COM 组件。例如下面的代码中,在页面构造时将实例化由某个线程创建的 MySTAComponent,而该线程并不是将运行页面的 STA 线程。这可能对性能有不利影响,因为要构造页面就必须完成 MTA 和 STA 线程之间的封送处理。
<%@ Page Language="VB" ASPCompat="true" %>
<script runat=server>
Dim myComp as new MySTAComponent()
Public Sub Page_Load()
myComp.Name = "Bob"
End Sub
</script>
<html>
<%
Response.Write(myComp.SayHello)
%>
</html>
  首选机制是推迟对象的创建,直到以后在 STA 线程下执行上述代码,如下面的例子所示。
<%@ Page Language="VB" ASPCompat="true" %>
<script runat=server>
Dim myComp
Public Sub Page_Load()
myComp = new MySTAComponent()
myComp.Name = "Bob"
End Sub
</script>
<html>
<%
Response.Write(myComp.SayHello)
%>
</html>
  推荐的做法是在需要时或者在 Page_Load 方法中构造任何 COM 组件和外部资源。
  永远不要将任何 STA COM 组件存储在可以由构造它的线程以外的其他线程访问的共享资源里。这类资源包括像缓存和会话状态这样的资源。即使 STA 线程调用 STA COM 组件,也只有构造此 STA COM 组件的线程能够实际为该调用服务,而这要求封送处理对创建者线程的调用。此封送处理可能产生重大的性能损失和可伸缩性问题。在这种情况下,请研究一下使 COM 组件成为 MTA COM 组件的可能性,或者更好的办法是迁移代码以使对象成为托管对象。
11. 将调用密集型的 COM 组件迁移到托管代码
  .NET Framework 提供了一个简单的方法与传统的 COM 组件进行交互。其优点是可以在保留现有投资的同时利用新的平台。但是在某些情况下,保留旧组件的性能开销使得将组件迁移到托管代码是值得的。每一情况都是不一样的,决定是否需要迁移组件的最好方法是对 Web 站点运行性能测量。建议您研究一下如何将需要大量调用以进行交互的任何 COM 组件迁移到托管代码。
  许多情况下不可能将旧式组件迁移到托管代码,特别是在最初迁移 Web 应用程序时。在这种情况下,最大的性能障碍之一是将数据从非托管环境封送到托管环境。因此,在交互操作中,请在任何一端执行尽可能多的任务,然后进行一个大调用而不是一系列小调用。例如,公共语言运行库中的所有字符串都是 Unicode 的,所以应在调用托管代码之前将组件中的所有字符串转换成 Unicode 格式。
  另外,一处理完任何 COM 对象或本机资源就释放它们。这样,其他请求就能够使用它们,并且最大限度地减少了因稍后请求垃圾回收器释放它们所引起的性能问题。
12. 在 Visual Basic .NET 或 JScript 代码中使用早期绑定
  以往,开发人员喜欢使用 Visual Basic、VBScript 和 JScript 的原因之一就是它们所谓“无类型”的性质。变量不需要显式类型声明,并能够简单地通过使用来创建它们。当从一个类型到另一个类型进行分配时,转换将自动执行。不过,这种便利会大大损害应用程序的性能。
  Visual Basic 现在通过使用 Option Strict 编译器指令来支持类型安全编程。为了向后兼容,默认情况下,ASP.NET 不启用该选项。但是,为了得到最佳性能,强烈建议在页中启用该选项。若要启用 Option Strict,请将 Strict 属性包括在 @ Page 指令中,或者,对于用户控件,请将该属性包括在 @ Control 指令中。下面的示例演示了如何设置该属性,并进行了四个变量调用以显示使用该属性是如何导致编译器错误的。
<%@ Page Language="VB" Strict="true" %>
<%
Dim B
Dim C As String
‘ This will cause a compiler error.
A = "Hello"
‘ This will cause a compiler error.
B = "World"
‘ This will not cause a compiler error.
C = "!!!!!!"
‘ But this will cause a compiler error.
C = 0
%>
  JScript .NET 也支持无类型编程,但它不提供强制早期绑定的编译器指令。若发生下面任何一种情况,则变量是晚期绑定的:
  被显式声明为 Object。
  是无类型声明的类的字段。
  是无显式类型声明的专用函数或方法成员,并且无法从其使用推断出类型。
  最后一个差别比较复杂,因为如果 JScript .NET 编译器可以根据变量的使用情况推断出类型,它就会进行优化。在下面的示例中,变量 A 是早期绑定的,但变量 B 是晚期绑定的。
var A;
var B;
A = "Hello";
B = "World";
B = 0;
  为了获得最佳的性能,当声明 JScript .NET 变量时,请为其分配一个类型。例如,var A : String。
13. 使请求管线内的所有模块尽可能高效
  请求管线内的所有模块在每次请求中都有机会被运行。因此,当请求进入和离开模块时快速地触发代码至关重要,特别是在不使用模块功能的代码路径里。分别在使用及不使用模块和配置文件时执行吞吐量测试,对确定这些方法的执行速度非常有用。
14. 使用 HttpServerUtility.Transfer 方法在同一应用程序的页面间重定向
  采用 Server.Transfer 语法,在页面中使用该方法可避免不必要的客户端重定向。
15. 必要时调整应用程序每个辅助进程的线程数
  ASP.NET 的请求结构试图在执行请求的线程数和可用资源之间达到一种平衡。已知一个使用足够 CPU 功率的应用程序,该结构将根据可用于请求的 CPU 功率,来决定允许同时执行的请求数。这项技术称作线程门控。但是在某些条件下,线程门控算法不是很有效。通过使用与 ASP.NET Applications 性能对象关联的 Pipeline Instance Count 性能计数器,可以在 PerfMon 中监视线程门控。
  当页面调用外部资源,如数据库访问或 XML Web services 请求时,页面请求通常停止并释放 CPU。如果某个请求正在等待被处理,并且线程池中有一个线程是自由的,那么这个正在等待的请求将开始被处理。遗憾的是,有时这可能导致 Web 服务器上存在大量同时处理的请求和许多正在等待的线程,而它们对服务器性能有不利影响。通常,如果门控因子是外部资源的响应时间,则让过多请求等待资源,对 Web 服务器的吞吐量并无帮助。
  为缓和这种情况,可以通过更改 Machine.config 配置文件 节点的 maxWorkerThreads 和 maxIOThreads 属性,手动设置进程中的线程数限制。
  注意 辅助线程是用来处理 ASP.NET 请求的,而 IO 线程则是用于为来自文件、数据库或 XML Web services 的数据提供服务的。
  分配给这些属性的值是进程中每个 CPU 每类线程的最大数目。对于双处理器计算机,最大数是设置值的两倍。对于四处理器计算机,最大值是设置值的四倍。无论如何,对于有四个或八个 CPU 的计算机,最好更改默认值。对于有一个或两个处理器的计算机,默认值就可以,但对于有更多处理器的计算机的性能,进程中有一百或两百个线程则弊大于利。
  注意 进程中有太多线程往往会降低服务器的速度,因为额外的上下文交换导致操作系统将 CPU 周期花在维护线程而不是处理请求上。
16. 适当地使用公共语言运行库的垃圾回收器和自动内存管理
  小心不要给每个请求分配过多内存,因为这样垃圾回收器将必须更频繁地进行更多的工作。另外,不要让不必要的指针指向对象,因为它们将使对象保持活动状态,并且应尽量避免含 Finalize 方法的对象,因为它们在后面会导致更多的工作。特别是在 Finalize 调用中永远不要释放资源,因为资源在被垃圾回收器回收之前可能一直消耗着内存。最后这个问题经常会对 Web 服务器环境的性能造成毁灭性的打击,因为在等待 Finalize 运行时,很容易耗尽某个特定的资源。
17. 如果有大型 Web 应用程序,可考虑执行预批编译
  每当发生对目录的第一次请求时都会执行批编译。如果目录中的页面没有被分析并编译,此功能会成批分析并编译目录中的所有页面,以便更好地利用磁盘和内存。如果这需要很长时间,则将快速分析并编译单个页面,以便请求能被处理。此功能带给 ASP.NET 性能上的好处,因为它将许多页面编译为单个程序集。从已加载的程序集访问一页比每页加载新的程序集要快。
  批编译的缺点在于:如果服务器接收到许多对尚未编译的页面的请求,那么当 Web 服务器分析并编译它们时,性能可能较差。为解决这个问题,可以执行预批编译。为此,只需在应用程序激活之前向它请求一个页面,无论哪页均可。然后,当用户首次访问您的站点时,页面及其程序集将已被编译。
  没有简单的机制可以知道批编译何时发生。需一直等到 CPU 空闲或者没有更多的编译器进程(例如 csc.exe(C# 编译器)或 vbc.exe(Visual Basic 编译器))启动。
  还应尽量避免更改应用程序的 \bin 目录中的程序集。更改页面会导致重新分析和编译该页,而替换 \bin 目录中的程序集则会导致完全重新批编译该目录。
  在包含许多页面的大规模站点上,更好的办法可能是根据计划替换页面或程序集的频繁程度来设计不同的目录结构。不常更改的页面可以存储在同一目录中并在特定的时间进行预批编译。经常更改的页面应在它们自己的目录中(每个目录最多几百页)以便快速编译。
  Web 应用程序可以包含许多子目录。批编译发生在目录级,而不是应用程序级。

18. 不要依赖代码中的异常

  因为异常大大地降低性能,所以您不应该将它们用作控制正常程序流程的方式。如果有可能检测到代码中可能导致异常的状态,请执行这种操作。不要在处理该状态之前捕获异常本身。常见的方案包括:检查 null,分配给将分析为数字值的 String 一个值,或在应用数学运算前检查特定值。下面的示例演示可能导致异常的代码以及测试是否存在某种状态的代码。两者产生相同的结果。

try

{

result = 100 / num;

}

catch (Exception e)

{

result = 0;

}

// …to this.

if (num != 0)

result = 100 / num;

else

result = 0;

19. 使用 HttpResponse.Write 方法进行字符串串联

  该方法提供非常有效的缓冲和连接服务。但是,如果您正在执行广泛的连接,请使用多个 Response.Write 调用。下面示例中显示的技术比用对 Response.Write 方法的单个调用连接字符串更快。

Response.Write("a");

Response.Write(myString);

Response.Write("b");

Response.Write(myObj.ToString());

Response.Write("c");

Response.Write(myString2);

Response.Write("d");

20. 除非有特殊的原因要关闭缓冲,否则使其保持打开

  禁用 Web 窗体页的缓冲会导致大量的性能开销。

21. 只在必要时保存服务器控件视图状态

  自动视图状态管理是服务器控件的功能,该功能使服务器控件可以在往返过程上重新填充它们的属性值(您不需要编写任何代码)。但是,因为服务器控件的视图状态在隐藏的窗体字段中往返于服务器,所以该功能确实会对性能产生影响。您应该知道在哪些情况下视图状态会有所帮助,在哪些情况下它影响页的性能。例如,如果您将服务器控件绑定到每个往返过程上的数据,则将用从数据绑定操作获得的新值替换保存的视图状态。在这种情况下,禁用视图状态可以节省处理时间。

  默认情况下,为所有服务器控件启用视图状态。若要禁用视图状态,请将控件的EnableViewState 属性设置为 false,如下面的 DataGrid 服务器控件示例所示。

<asp:datagrid EnableViewState="false" datasource="…"
runat="server"/>

  您还可以使用 @ Page 指令禁用整个页的视图状态。当您不从页回发到服务器时,这将十分有用:

<%@ Page EnableViewState="false" %>

  注意 @ Control 指令中也支持 EnableViewState 属性,该指令允许您控制是否为用户控件启用视图状态。

  若要分析页上服务器控件使用的视图状态的数量,请(通过将 trace="true" 属性包括在 @ Page 指令中)启用该页的跟踪并查看 Control Hierarchy 表的 Viewstate 列。有关跟踪和如何启用它的信息,请参见 ASP.NET 跟踪。

22. 避免到服务器的不必要的往返过程

  虽然您很可能希望尽量多地使用 Web 窗体页框架的那些节省时间和代码的功能,但在某些情况下却不宜使用 ASP.NET 服务器控件和回发事件处理。

  通常,只有在检索或存储数据时,您才需要启动到服务器的往返过程。多数数据操作可在这些往返过程间的客户端上进行。例如,从 HTML 窗体验证用户输入经常可在数据提交到服务器之前在客户端进行。通常,如果不需要将信息传递到服务器以将其存储在数据库中,那么您不应该编写导致往返过程的代码。

  如果您开发自定义服务器控件,请考虑让它们为支持 ECMAScript 的浏览器呈现客户端代码。通过以这种方式使用服务器控件,您可以显著地减少信息被不必要的发送到 Web 服务器的次数。

  使用 Page.IsPostBack 避免对往返过程执行不必要的处理

  如果您编写处理服务器控件回发处理的代码,有时可能需要在首次请求页时执行其他代码,而不是当用户发送包含在该页中的 HTML 窗体时执行的代码。根据该页是否是响应服务器控件事件生成的,使用 Page.IsPostBack 属性有条件地执行代码。例如,下面的代码演示如何创建数据库连接和命令,该命令在首次请求该页时将数据绑定到 DataGrid 服务器控件。

void Page_Load(Object sender, EventArgs e)

{

// Set up a connection and command here.

if (!Page.IsPostBack)

{

String query = "select * from Authors where FirstName like ‘%JUSTIN%’";

myCommand.Fill(ds, "Authors");

myDataGrid.DataBind();

}

}

  由于每次请求时都执行 Page_Load 事件,上述代码检查 IsPostBack 属性是否设置为 false。如果是,则执行代码。如果该属性设置为 true,则不执行代码。

  注意 如果不运行这种检查,回发页的行为将不更改。Page_Load 事件的代码在执行服务器控件事件之前执行,但只有服务器控件事件的结果才可能在输出页上呈现。如果不运行该检查,仍将为 Page_Load 事件和该页上的任何服务器控件事件执行处理。

23. 当不使用会话状态时禁用它

  并不是所有的应用程序或页都需要针对于具体用户的会话状态,您应该对任何不需要会话状态的应用程序或页禁用会话状态。

  若要禁用页的会话状态,请将 @ Page 指令中的 EnableSessionState 属性设置为 false。例如:

<%@ Page EnableSessionState="false" %>

  注意 如果页需要访问会话变量,但不打算创建或修改它们,则将 @ Page 指令中的 EnableSessionState 属性设置为 ReadOnly。

  还可以禁用 XML Web services 方法的会话状态。有关更多信息,请参见使用 ASP.NET 和 XML Web services 客户端创建的 XML Web services。

  若要禁用应用程序的会话状态,请在应用程序 Web.config 文件的 sessionstate 配置节中将 mode 属性设置为 off。例如:

<sessionstate mode="off" />

24. 仔细选择会话状态提供程序

  ASP.NET 为存储应用程序的会话数据提供了三种不同的方法:进程内会话状态、作为 Windows 服务的进程外会话状态和 SQL Server 数据库中的进程外会话状态。每种方法都有自己的优点,但进程内会话状态是迄今为止速度最快的解决方案。如果只在会话状态中存储少量易失数据,则建议您使用进程内提供程序。进程外解决方案主要用于跨多个处理器或多个计算机缩放应用程序,或者用于服务器或进程重新启动时不能丢失数据的情况。有关更多信息,请参见 ASP.NET 状态管理。

25. 不使用不必要的Server Control

  ASP.net中,大量的服务器端控件方便了程序开发,但也可能带来性能的损失,因为用户每操作一次服务器端控件,就产生一次与服务器端的往返过程。因此,非必要,应当少使用Server Control。

26. ASP.NET应用程序性能测试

  在对ASP.NET应用程序进行性能测试之前,应确保应用程序没有错误,而且功能正确。具体的性能测试可以采用以下工具进行:

  Web Application Strees Tool (WAS)是Microsoft发布的一个免费测试工具,可以http://webtool.rte.microsoft.com/上下载。它可以模拟成百上千个用户同时对web应用程序进行访问请求,在服务器上形成流量负载,从而达到测试的目的,可以生成平均TTFB、平均TTLB等性能汇总报告。

  Application Center Test (ACT) 是一个测试工具,附带于Visual Studio.NET的企业版中,是Microsoft正式支持的web应用程序测试工具。它能够直观地生成图表结果,功能比WAS多,但不具备多个客户机同时测试的能力。

  服务器操作系统"管理工具"中的"性能"计数器,可以对服务器进行监测以了解应用程序性能。

结论

  对于网站开发人员来说,在编写ASP.NET应用程序时注意性能问题,养成良好的习惯,提高应用程序性能,至少可以推迟必需的硬件升级,降低网站的成本

1. 利用如Dw-Mx这样的工具生成html格式的模板,在需要添加格式的地方加入特殊标记(如$),动态生成文件时利用代码读取此模板,然后获得前台输入的内容,添加到此模板的标记位置中,生成新文件名后写入磁盘,写入后再向数据库中写入相关数据。

  2. 使用后台代码硬编码Html文件,可以使用HtmlTextWriter类来写html文件。
  优点
  1. 可以建立非常复杂的页面,利用包含js文件的方法,在js文件内加入document.write()方法可以在所有页面内加入如页面头,广告等内容。
  2. 静态html文件利用MS Windows2000的Index Server可以建立全文搜索引擎,利用asp.net可以以DataTable的方式得到搜索结果。而Win2000的Index服务无法查找xml文件的内容。如果包括了数据库搜索与Index索引双重查找,那么此搜索功能将非常强大。
  3. 节省服务器的负荷,请求一个静态的html文件比一个aspx文件服务器资源节省许多。
  缺点
  思路二: 如果用硬编码的方式,工作量非常大,需要非常多的html代码。调试困难。而且使用硬编码生成的html样式无法修改,如果网站更换样式,那么必须得重新编码,给后期带来巨大的工作量。
  因此这里采用的是第一种思路
  示列代码
  1.定义(template.htm)html模板页面
<html>
<head>
<title>www.webjx.com</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body >
<table height="100%" border="0" width="100%" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" style="border:1px solid #000000">
<tr>
<td width="100%" valign="middle" align="left">
<span style="color: ;font-size: "></span>
</td>
</tr>
</table>
</body>
</html>
  2.asp.net代码:
//———————读html模板页面到stringbuilder对象里—-
string[] format=new string[4];//定义和htmlyem标记数目一致的数组
StringBuilder htmltext=new StringBuilder();
try
{
  using (StreamReader sr = new StreamReader("存放模板页面的路径和页面名"))
  {
  String line;
  while ((line = sr.ReadLine()) != null)
  {
  htmltext.Append(line);
  }
  sr.Close();
  }
}
catch
{
  Response.Write("<Script>alert(‘读取文件错误’)</Script>");
}
//———————给标记数组赋值————
format[0]="background=\"bg.jpg\"";//背景图片
format[1]= "#990099";//字体颜色
format[2]="150px";//字体大小
format[3]= "<marquee>生成的模板html页面</marquee>";//文字说明
//———-替换htm里的标记为你想加的内容
for(int i=0;i<4;i++)
{
  htmltext.Replace("["+i+"]",format);
}
//———-生成htm文件——————――
try
{
  using(StreamWriter sw=new StreamWriter("存放路径和页面名",false,System.Text.Encoding.GetEncoding("GB2312")))
{
  sw.WriteLine(htmltext);
  sw.Flush();
  sw.Close();
}
}
catch
{
Response.Write ("The file could not be wirte:");
}
  小结
  用此方法可以方便的生成html文件。程序使用了是循环替换,因此对需替换大量元素的模板速度非常快。

2006年09月06日

文章来源:搜索引擎优化排名SEO每天一贴
优化网站结构有两方面的意思,一是物理结构,二是逻辑结构。

网站物理结构指的是网站真实的目录及文件所存储的位置所决定的结构。

一般来说比较好的物理结构可以有两种,一是扁平式的,也就是所有网页都存在网站根目录下。像这样:

http://www.kj010.com/index.php
http://www.kj010.com/index1.php
http://www.kj010.com/index2.php…….

所有这些页都是在根目录这一级别,形成一个扁平的物理结构。

这比较适合于小型的网站,因为如果太多文件都放在根目录下的话,制作和维护起来都比较麻烦,容易搞乱。

第二种就是树型结构,也就是根目录下分成多个频道,或者叫类别,目录等,甭管名称是什么,都是一个意思,然后在每一个频道下面再放上属于这个频道的网页。比如频道分为:
http://www.kj010.com/forumdisplay.php?fid=10
http://www.kj010.com/forumdisplay.php?fid=14
http://www.kj010.com/forumdisplay.php?fid=40
在频道下再放入具体的内容网页:

http://www.kj010.com/index.php
http://www.kj010.com/index.php
http://www.kj010.com/index.php……

网站结构的第二个意义指的是逻辑结构或链接结构,也就是由网页内部链接所形成的逻辑的或链接的网络图。

比较好的情况是逻辑结构与前面的树型物理结构相吻合,也就是说:

主页链接向所有的频道主页
主页一般不直接链接向内容页,除非是你非常想推的几个特殊的页
所有频道主页都连向其他频道主页
频道主页都连回网站主页
频道主页也连向属于自己本身频道的内容页
频道主页一般不连向属于其他频道的内容页
所有内容页都连向网站主页
所有内容页都连向自己的上一级频道主页
内容页可以连向同一个频道的其他内容页
内容页一般不连向其他频道的内容页
内容页在某些情况下,可以用适当的关键词连向其他频道的内容页
频道形成分主题

仔细读前面这几句话,你可以清楚的看到这些链接会很自然的形成一个树型的网络图,而这种逻辑的或链接的网络可以与物理结构重合,也可以不一样。比如扁平式的物理结构网站也完全可以通过链接形成逻辑上的树型结构。

对搜索引擎来说更重要的是由链接形成的逻辑结构。

有不少人有误解,认为物理结构比较深的网页不容易被搜索引擎收录。比如说

http://www.kj010.com/cat1/cat1-1/cat1-1-1/pageA.html

像这样目录结构比较深的网页,是不是就不容易被收录呢?那不一定,如果这个页在网站的主页上有一个链接,对搜索引擎来说它就只是一个仅次于主页的二级网页。

收录的容易与否是在于离主页有几次点击的距离,而不是它的物理位置。

对稍有些规模的网站来说,一般树型逻辑结构的网站是比较好的。

从我看的网站来判断,大部分中国人的网站逻辑思维比较清楚,所以大部分中文网站都是按照这种结构做成的。其实有不少英文网站的逻辑结构还真是蛮乱的。

以前都有很多朋友总结过网站推广的方法,但是随着时间的推移,出现了很多新的推广方式。往往这些新的推广方式,在实际推广操作中的效果更加明显。目前web2.0很多应用异常火热,而且搜索引擎对web2.0元素的东西,更加友善。利用web2.0元素来推广自己的站点,应该是很多站长朋友重点考虑的。当然,我结合前人的一些推广方法以及我个人关于web2.0推广方法,做一下总结:

1.SEO,这个其实在建站的同时就应该考虑的,经过验证有效的几个东西为,URL拼音化,简洁直接的标题,标题分割用"|",合适的meta,RSS订阅功能,丰富的站内连接,网站地图,还有<h1><b>这样的标签,最重要的一点是不要作恶。做完这些后,向搜索提交你的站吧。
2.RSS,利用RSS除了丰富站内连接外,用户订阅也算一个方面,然后国内有几个RSS聚合站点,搜索的权重都很高,能加如后可以快速让搜索收录并且有不错的权重,比如RSS.bokee.com,feedss.com等。用户对站点内容感兴趣,通过订阅,即可以增加站点流量,同时还可以增加用户黏度。
3.网摘(收藏),这个方法其实是非常好,非常有效的。一个好的网摘(收藏)站点,往往能给你的网站带来相当可观的流量。
4.交换友情连接,对网站推广非常有必要。
5.QQ,E-MAIL,也是一种不错的推广方式,具体成功率,与推广技巧有关,早期hao123的成功,很大程度上,都是靠该推广方式的。
6.广告推广,该方式,需要花费不少钱,但是推荐比较省钱的方式就是以站养站,做类似百度、google推广,同时也挂他们的广告,这样收支基本持平。网站流量也上去了。
7.做好内容,靠网友的口碑相传营销,其实也是非常有效的。成功案例qq163。

重点推荐:登录社会化搜索引擎。搜索引擎给网站带来的流量是巨大的。在国内尤其是百度和google。一旦谁的网站被百度封杀,那后果是很严重的。但是大的搜索引擎都有它自己的个性,想要利用搜索引擎为自己带来很大流量还是需要不少功力的。当然,我们可以选择新型社会化搜索,比如:deyeb。实际推广效果非常好!这类网站结合很多web2.0元素,而且他是一个社会化搜索引擎,用户要表达的信息,推广的内容,很容易通过该类网站达到最终目的。
方法(以deyeb.cn作为例子,同类网站还有很多,大家可以自己寻找):
1.下载工具条
2.通过工具条向收藏和搜索结果提交自己要推广的信息,大家可以看我用自己的名字“马国良”做的试验,效果不错。
3.同时也可以在“小组”和“百科”中做推广。推广效果与推广技巧有关。不要一味地发广告贴,这样很容易被封杀的。发内容贴,携带推广内容,是最好的方式。

其实最重要的是做好内容,好比做好了好酒,好酒也怕巷子深,所以要推广,推广的时候最重要的是谨慎的选择,连接并不是越多越好,质量才重要。

中国的音乐网站,据说有超过6000个之多,可以说竞争的激烈程度是目前各种行业网站中最为激烈的?在如此多的音乐网站,想在如此激烈的竞争中脱颖而出,就特别需要具备特色,更为重要就是,如何把自己的特色推广出去!今天来和大家一块儿研究一个网站:翰音网。

在本篇网站研究文章中,你可以了解到以下几块儿重要的经验:

1. 网站的定位策略

2. 域名的分析方法

3. 口碑营销的方法

4. 网页如何人性化

5. 音乐网站的推广

一、网站定位分析

目前翰音网主要提供的内容和服务有:原创音乐、翻唱音乐、音乐新势力、流行音乐、音乐博客、手机音乐、音乐论坛等等。并且将自身定位为中国原创音乐门户网站.

翰音网的这个定位是非常好的,他与原创音乐为突破口,于是一下子就把自己的竞争对手从成千上万个减少到了几个。为什么这么说呢? 因为虽然目前的音乐网站非常多,但是原创音乐网站却非常的少,做的好的就更少了。不信你可以到搜索引擎中查一下。

这样的定位好处非常多,不尽近减少了竞争对手,而且一下子把原来的成千上万的竞争对手变成了合作伙伴。

因为目前做原创音乐网站的非常少,翰音网就可以把自己的重点放到原创音乐,于是通过自己的品牌,将会产生非常多的原创音乐,然后这些原创音乐的内容提供给其他那些音乐网站。

也就是翰音网把自身定位成了一个生产原创音乐,推广原创音乐得平台。

网站定位理念:恶意竞争是很傻的事情,那样会让你疲惫不堪。当你进入一个行业的时候,如果这个行业竞争的很激烈,你就要分析他们的共同需求,然后你把主要精力放到这一小块儿,努力来做好。然后给他们合作,这样你将可以有效的避开竞争,获得获得较大的市场。—– 王通

二、网站域名分析:

目前翰音网的主域名是:www.musichy.com 副域名是www.hanyin.com
域名的分析要从以下三方面来考虑:
1、域名的翰音
2、域名是否容易记忆
3、域名是否容易输入

主域名含义分析:
使用采用的词组组合形式:music + hy
music是音乐的意思
而hy是“翰音”两字的汉语拼音首字母的缩写
英文+ 汉语拼音首字母的组合方式不是很好的一种组合方式
主域名是否易记分析:
目标用户群分析:音乐网站目标用户群为青少年,这群青少年知识水平不高,对于英文难记忆,虽然music是一个常用的英文词,但是相对较长,同时又是与中文词组首字母组合,进一步提高了记忆难度。

主域名是否容易输入分析:
前缀共7个字母,一般而言,超过6个字母的都比较难记忆和输入。而且此字母组合顺序输入非常的不顺手。

副域名含义分析:
hanyin为翰音的全拼,比较有意义。

副域名容易记度分析
中文全拼,比较容易记忆

副域名是否容易输入分析
hanyin 这个组合仅用了3个指头就完成了输入,并且其中第1、3、4、6个字母都是由最常用的右手食指输入,非常顺手,非常方便。

所以强烈建议翰音网将主域名用 www.hanyin.com
千万不要两个域名同时混用,这样容易被搜索引擎把其中一个当作镜像站点给处理掉。可以把副域名直接调转到主域名上。

三、翰音网推广策略分析:

翰音网虽然成功推出过许多网络歌手,但是其自身目前的流量并不大。所以它属于那种有特色但是没有把自己特色推广出来的网站。这里就翰音网为例子,我们来分析一下音乐网站的推广。

音乐网站的推广主要来自三种方式:
1、口碑推广
2、搜索引擎推广
3、导航网站登陆

那我们就站到这两种营销的角度来分析一下翰音网。

口碑营销的几个基本条件:

l 网站的内容是否有特色?

l 特色是否通过设计表现出来了?

l 网站的设计是否人性化?

l 网站的名字是否容易记忆和传播?

l 网站的域名是否容易记忆和传播?

l 网站的打开速度是否快?

l 网站是否在合理的地方暗示用户口碑宣传?

通过对翰音网以上7个条件的分析,结果如下:

l 翰音网的定位和内容都非常的有特色

l 翰音网的特色通过设计表现的很一般。
如果能够设计的让用户一上来,就感觉到和其他音乐网站的风格不同,那样会更容易给用户留下深刻的印象。

l 翰音网的人性化设计很一般
比如改版后的首页,采用了大量和底色接近的灰色字体,虽然整体看起来很协调,但是对用户的浏览却不友好,会让用户看起来眼睛非常吃力。

l 翰音网的名字有特点,但是单这个名字,没有把自己的特点表现出来,普通网友看到名字不知道这个网站是干什么的,不过这个可以通过推广来弥补,可以把它打造成原创网络音乐得第一品牌。Google在最早的时候,没有听说过的人看到它的名字也不知道它是干什么的.
相对而言,翰音网的名字还是比较容易被记忆和传播的。

l 韩音网的域名是否容易记忆和传播
musichy.com不容易被记忆和传播
hanyin.com 容易被记忆和传播
只可惜的是,翰音网一直用的是musichy.com这个不容易被记忆和传播的域名

l 网站的打开速度是否快?
速度还不错,不过网站叶面简化一下的话,速度会更好。

l 翰音网没有在合理的地方暗示用户宣传翰音网。
目前没有。 这个非常的重要,如果大家研究一下原hao123站长李兴平的系列站点,大家就会发现他在这方面作的非常的好。

翰音网搜索引擎推广分析:

想在搜索引擎中获得较好的排名,网站设计是最基础的工作。也就是说,网站的设计应该从搜索引擎推广的角度来设计。从搜索引擎的角度来设计,需要考虑那几个因素呢?

1、title和meta标签

2、URL路径设计
3、关键词密度
4、网站的超超链接结构
5、网页的排版设计
6、其他网页设计的细节

根据几家著名的调查公司统计,通过搜索引擎为网站带来的新流量,平均占到了80%左右。对于信息量非常大的网站而言,搜索引擎很重要。那么网站一定要按照搜索引擎的口味来合理设计。

翰音网在改版之前,网站在以上几方面设计的都不符合搜索引擎的要求,在我们的建议之下,刚刚改版!

网址导航登陆:

音乐网站主要面达的是广大的青少年群体,这些群体比较喜欢网址导航网站,所以音乐的推广,登陆网址导航网站,在网址导航网站上做广告也是非常重要的方法之一。

比如,在hao123的音乐栏目有一个超链接的话,每天都可以给你带来几万的流量。不过现在的hao123那个位置是卖的,想在那个位置出现,每月也要花几万元。不过hao123的内页登陆进取了,每天也可以带来不少流量。其他的网址导航网站也一样。不过经过分析,这些网址导航网站中都没有翰音网。

建议翰音网在网址导航网站的推广上,多花一些功夫。

网站推广注意事项:
网站推广的方法有很多,但是不要什么方法都一块儿上,那样并不能获得理想的效果。最好是根据自己网站的定位和自己的精力、资源。选择最有效的几种方法,然后集中精力把这些几种方法执行的极致了,就会取得超出非常好的效果。

四、翰音网的盈利模式分析

翰音网目前的盈利模式主要还是靠SP来赚钱,因为目前翰音网的本身就是由一家上市的SP公司运营的。不过就翰音网的长远发展而言,应该可以产生许多新的盈利模式。

模式之一:原创音乐推广

国内拥有音乐才能的人太多的,但是能够出名的人却非常的少非常的少,而且那些已经成名的原创型歌手大部分也都是第一张原创专辑非常好,成名之后逐渐就不行了。

大部分好听的音乐来自民间,来自草根,翰音网主推原创音乐,那么就可以尝试着为广大默默无闻的原创型提供一个平台,让这众多的原创性歌手在这个平台上受益。

创作得的好的,可以通过这个平台来拍卖,获得一些收益。

创作的好唱的好的,可以直接通过这个品牌让自己的音乐传播出去。在名和利上有机会获得一个很好的收益。

模式之二:手机音乐推广

彩铃等形式的手机音乐越来越火,翰音网可以完善一下平台,让普通的网友都变成彩铃创作者,并且利用自身的SP资源优势,让那些制作的优秀的网友通过发布自己俄作品,宣传自己的作品获得收益。

也就是作品有网友自己创作,市场网友自己来推广,翰音网来提供这个平台,然后收取一定的费用。

口号:打破传统的音乐产业运营模式!引领一种21世纪的生活方式!

你觉得这样的翰音网(www.hanyin.com )该如何发展呢?欢迎与我一起探讨.

关于音乐网站的发展,欢迎大家与我讨论,直接直接到网站运营论坛
http://bbs.eczn.com/list_4_1.html

2006年09月01日

SQL Server 2005提供了一些新的特性,比如文件流支持(向第三代数据库迈出了可喜的一步)、T-SQL的改进(TOP子句等)、数据库镜像、透明的客户端重定向、新的基于架构的安全模型、内建的HTTP服务器等。

当然,价格也自然就比SQL Server 2000昂贵不少。

——————————————————————————–

作为微软耗资最大、开发周期最长的数据库里程碑,SQL Server 2005 定于2005年12月初发布,目前最后一个Beta试用版本已经推出。微软内部70多个核心应用系统(SAP, Siebel, MSW…)均已正式迁移到SQL 2005 Beta3。最新发布的Benchmark测试结果表明整体性能较SQL2000 大幅提升40%,部分组件的性能甚至提升3~10倍,在同等硬件环境下的压力测试性能已经超过Oracle 10g;外部几十家TAP客户如London Stock Exchange, USDA, Xerox的实际部署也已反映出这一特点。SQL Server 2005将是微软有史以来运行最快、最稳定的企业级数据管理与分析平台。请务必仔细阅读以下内容并将这些信息传递给您的客户, 对需要SQL 2005 Beta及资料的客户请按照下述方式提名…
Enterprise Credibility
•高可靠性 由于采用了先进的数据镜像技术,SQL Server 2005 的稳定性将提高到前所未有的秒级响应能力,在小于3 秒的时间内能够将数据冗灾应用迅速切换,大大提升的企业级应用的高可靠性。
•性能 TPC-C 处理性能较SQL 2000提升37%,每秒能够处理超过一百万笔交易,而TPC-H 对 1 TB 数据仓库处理性能较SQL 2000更提升162%;同样硬件环境下的TPC-H压力测试性能较Oracle快38%。对64位高性能运算和TB级海量数据存储的更好支持使系统可扩展性及性能达到了一个更高的水准,预计到年底产品正式发布前,整体产品性能还将有进一步的增长。
•安全性 超过260种新的安全功能,及数据加密、安全认证技术等来加强您数据系统的安全性

SQL Server 2005 Beta & EAP
为配合SQL Server 2005 Beta3,针对客户和合作伙伴的相关市场计划:
•如果您的客户或合作伙伴对SQL Server 2005 新版本感兴趣,并希望得到相关Beta光盘和资料进行试用,请您的客户访问http://www.microsoft.com/china/sql/2005/beta3.asp 进行注册。 我们会于近期将SQL2005相关资料和Beta版本直接寄送至客户处。
•对于愿意成为成功案例的Top 15家企业级客户,我们将提供如下支持:技术培训、现场支持服务,BIF & Fund, PR发布,产品发布会的市场宣传,具体提名请与我直接联系。
•对于希望采用SQL Server 2005作为其应用解决方案的Top 15家Solution Partner, 我们将提供技术培训、现场支持服务、BIF & Fund、产品发布会的市场推广,具体提名请与我联系。
•对于您的重要企业级客户或开发商, 如需要特别技术支持或培训,请发送Email至 v-shanxu@microsoft.com 进行汇总。我们将制定整体培训及支持计划。

Sales Readiness of SQL 2005
为了能够使客户简明扼要的了解SQL2005的特点,请仔细阅读附件PPT以及如下产品简介、价值表述和主要特性小结。
<>
SQL Server 2005 是微软5年来具有里程碑性质的企业级数据库产品。它在企业级支持,商业智能应用,管理开发效率等诸多方面,较SQL Server 2000均有质的飞跃,是集数据管理与商业智能分析于一体的,极具前瞻性的下一代数据管理与分析平台。
1分钟产品简介 3 分钟 产品价值表述 10 分钟 主要特性小结
安全、可靠、高效
–3秒内数据冗灾恢复
–64位高性能计算
–260多种安全新功能
–智能化数据管理 全面提升企业级应用系统的安全性、可靠性与性能
SQL Server 2005 将提供一个更安全、可靠和高效的数据管理平台,能够大幅降低企业级系统的运维风险和IT管理成本,增强企业客户的管理能力。由于使系统冗灾恢复时间达到前所未有的秒级响应能力,大幅提高了系统的性能、扩展性和64位运算能力,并加以更严格的安全控制,SQL Server 在支持现实中最苛刻的企业级系统的道路上迈出了极大的一步。
安全、可靠、高效的企业级数据管理平台
SQL Server 2005 将在企业级支持(安全性、高可靠性、性能、扩展性、可管理性) 方面有质的飞跃,不仅能够确保企业级数据业务的实时稳定运行、还能够大幅提升系统处理能力及管理效率、降低操作复杂度和运维成本。
 独特的数据库镜像可以极大地提升高可靠性,保证企业级系统冗灾恢复在3秒内切换
 超过260种新的安全功能,如数据加密、安全认证技术等来加强您数据系统的安全性
 整体处理性能较SQL Server 2000有了大幅增长37%,部分关键组件处理性能甚至有了3~10倍提升(如全文检索、数据整合、复制等…)
 对64位高性能运算和TB级海量数据存储的更好支持使系统可扩展性及性能达到了一个更高的水准,针对1TB数据仓库TPC-H压力测试表明性能较Oracle快38%
 实时在线管理、数据分区、快照隔离、备份/恢复以及复制等诸多功能的改进将会使得企业能够建立和部署更加稳定可靠的应用程序
 内置的数据集成服务以及各种自动化管理、调试和优化工具则进一步提升了系统可管理性,为您的IT管理工作带来全新的体验
商业智能一体化
–TB级海量数据支持
–最快的数据分析引擎
–实时商务智能
–丰富数据挖掘功能 推动企业管理的全面信息化,提升企业的商业洞察力
SQL Sever 2005 通过提供全新的一体化商业智能平台能够满足企业级客户对TB级海量业务数据的实时统计分析、动态报表、监控预测、风险管理等多种复杂业务需求,帮助客户综合分析来自多结构和异类数据源的不同商业数据并将其及时转化为辅助企业决策的商业信息,推动企业信息化管理和业务发展。
先进、一体化的商业智能平台
SQL Server 2005将提供一体化的商业智能平台,能够满足企业级客户对TB级海量数据的实时统计分析、动态报表、监控预测、风险管理等多种复杂业务需求,帮助客户迅速将数据转化为辅助企业决策的商业信息,推动企业信息化管理和业务发展。
 集成的商业智能套件包括数据仓库、数据分析、ETL(数据整合)、报表、数据挖掘等全系列设计开发管理工具,帮助客户快速构建部署各类商业智能应用
 全新设计的高速数据分析引擎和丰富数据挖掘算法将帮助客户更加高效灵活地对海量业务数据进行深入数据分析与数据挖掘,性能较SQL2000 快162%, 较Oracle快38%
 面向终端用户的报表设计及管理工具与Office、Portal的前端集成能够为企业搭建个性化的管理驾驶平台,提供丰富的报表展示和自由定制功能,降低IT管理负载
 企业级的数据整合工具能够高速处理各种异类数据和复杂数据流业务的整合互通,为企业提供一个整体分析平台,性能较SQL Server 2000提升600%
 特有的主动缓存(Proactive Cache)技术能够满足客户对实时性BI统计数据高性能访问的迫切需求
 统一维度模型(UDM),XML/A标准的支持使BI应用的扩展性大大提高
开放互联应用平台
–与.Net的完美结合
–企业级数据整合平台
–全面支持XML与Web Service 拓展业务应用空间,大幅提升管理开发效率,降低IT成本
SQL Server 2005将提供一个极具扩展性和灵活性的开发平台,.Net、XML、Web Service的紧密集成能够拓展您的应用空间,实现Internet数据业务互联,为您带来新的商业应用机遇。SQL Server 2005 同时支持在多个平台、程序和设备之间共享数据,更易于与内外部系统协调互通,客户可以从降低总体拥有成本和更快的开发时间中受益。 极具扩展性和灵活性的开发平台
SQL Server 2005 将提供集成的开发管理工具和各类新的开发特性,在大幅提高开发效率的同时,将进一步拓展您的应用空间,带来新的商业应用机遇。
 提供XML数据库和Xquery提升数据应用灵活性及在企业各系统之间的信息交互
 深入支持Web Service使Internet数据互联成为可能,进一步扩展数据应用范畴和异类系统的兼容性
 内置.Net集成扩展了数据应用开发空间,使应用性能与团队开发效率大幅提升
 集成的可视化开发调试环境则为数据库开发管理人员带来了激动人心的全新感受
 数据集成服务、服务代理(Service Broker)、异类数据库复制等可以帮助您无缝集成其它各类数据应用,实现数据共享
 各种新数据类型和T-SQL扩展带来了诸多开发灵活性

2006年08月30日

Asp.NET中常用的一些优化性能的方法

ASP.NET 的缓存机制相比ASP有很大的改进,本文档除对常用优化方法进行总结介绍外,强调了如何使用ASP.NET的缓存来获得最佳性能。

1:不要使用不必要的session
和ASP中一样,在不必要的时候不要使用Session。

可以针对整个应用程序或者页面禁用会话状态:

l 禁用页面的会话状态

l 禁用应用程序的会话状态

在应用程序的Web.Config文件的sessionstate配置节中,将mode属性设置为off。

即:。

2:不使用不必要的Server Control
ASP.net中,大量的服务器端控件方便了程序开发,但也可能带来性能的损失,因为用户每操作一次服务器端控件,就产生一次与服务器端的往返过程。因此,非必要,应当少使用Server Control。

3:不使用不必要的ViewState
默认情况下,ASP.Net对所有的Server Control都启用了ViewState(视图状态)。但ViewState需要在客户端保存一些信息,这会造成性能的消耗。当必须使用Server Control时,可以考虑禁止ViewState。

有两种方式禁止ViewState:针对整个页面或者单个控件禁用ViewState。

l 针对控件

l 针对页面

4:不要用Exception控制程序流程
有些程序员可能会使用异常来实现一些流程控制。例如:

try{

result=100/num;

}

Catch(Exception e)

{

result=0;

}

但实际上,Exception是非常消耗系统性能的。除非必要,不应当使用异常控制来实现程序流程。

上面的代码应当写为:

if(num!=0)

result=100/num;

else

result=0;

5:禁用VB和Jscript动态数据类型
应当始终显示地申明变量数据类型,这能够节约程序的执行时间。为此,可以在页面前面写明:

6:使用存储过程完成数据访问
7:只读数据访问不要使用DataSet。
DataSet作为一个功能强大的、支持离线的数据库,其对性能的开销也相对较大。在特定的场合可以使用.Net中的其它数据集作为替代。

n 使用SqlDataReader代替DataSet;

n SqlDataReader是read-only,forward-only。

8:关闭ASP.NET的Debug模式
为了方便开发调试,VS.net中对于Debug模式默认是开启的,在部署应用程序时,应该关闭Debug模式,这将有效提高应用程序性能。

9:使用ASP.Net Output Cache缓冲数据;
提供缓冲功能是ASP.net中非常强大的一种功能。曾看到过某些评测说:ASP.net程序的性能比SUN的JSP应用程序性能快上几倍,实际上,该评测程序非常重要的一点就是使用了很多ASP.net的缓冲功能。

ASP.net中常用的缓冲方式有:

n 页面缓冲

一个例子:查询北京市的天气。因为天气数据在一定的时间内是相对规定的。

当Web程序中第一次查询北京市的天气时,应用程序可能是调用一个远程的WebService获取天气信息。而其后的用户就可以从缓冲中得到当前的天气信息。这将大大提高性能,减少服务器的压力。

方式:

u :指明页面使用缓冲

u Duration:控制缓冲有效的时间,单位为分钟。

u VaryByParam:用于指明是否缓冲的判断依据。例如,如果第一个用户查询的是北京的天气,则缓冲中存储了北京市的天气。当第二个用户查询上海的天气时,为避免读取到错误的缓冲,可以用这样的代码缓冲多个城市的天气:

这就指明了根据页面URL中的cityName参数来缓冲多份数据。

n 片断缓冲

在ASP.net中,除了在页面范围内使用缓冲,也还可以针对User Control使用Output Cache参数实现对用户控件的缓冲。同样的,一个页面中相同类型的控件也可以有多个不同的缓冲。可以根据参数来实现不同的缓冲。

例如:对于控件可以根据Control 的C属性的不同实现不同的缓冲。

n 数据缓冲

n 缓冲的过期依赖条件

某种意义上,Cache和Application是一样的,都是一种公有的对象。为了取得缓冲与数据有效性之间的平衡,可以根据需要对缓冲过期策略进行合理的设置。

u 文件依赖

Cache.Insert (“Mydata”, Source

, New CacheDependency(Server.MapPath(“authors.xml”)))

此代码的含义是当authors.xml文件不发生变化的时候,缓冲MyData始终有效。

u 时间依赖

设定1小时后过期,这是一种绝对过期。

Cache.Insert(“Mydata”,Source,null

,DateTime.Now.AddHours(1),TimeSpan.Zero);

u 相对过期依赖

当DataSet不再发生变化20分钟以后,缓冲过期。

Cache.Insert(“MyData”,Source,null

,DateTime.MaxValue,TimeSpan.FromMinutes(20));