﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<?xml-stylesheet type="text/css" href="/style/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <title>FSherp RSS</title>
    <link>http://qianxun.net</link>
    <description>FSherp聚合资料</description>
    <generator>RainbowSoft Studio Z-Blog 1.6 Final Build 60816</generator>
    <language>zh-CN</language>
    <copyright>Copyright 2008 FSherp.cn Some Rights Reserved.</copyright>
    <pubDate>Fri, 20 Mar 2009 10:48:42 GMT</pubDate>
    <lastBuildDate>Fri, 20 Mar 2009 10:48:42 GMT</lastBuildDate>
    <item>
      <title>Internet Explorer 8.0 正式版</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/3/4645.shtml</link>
      <pubDate>20 Mar 2009 10:44:45</pubDate>
      <guid>http://qianxun.net/Post/2009/3/4645.shtml</guid>
      <description><![CDATA[<div><div id="goclass" class="godiv"><p><strong><a href="http://www.microsoft.com/presspass/press/2009/mar09/03-18IE8AvailablePR.mspx?rss_fdn=Press%20Releases" target="_blank"><font color="#669966" size="5" face="Trebuchet MS">微软宣布Internet Explorer 8.0 释放</font></a></strong></p><blockquote><font color="#669966" face="Trebuchet MS"><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" /></font> 中国 - 中文 简体 For Windows Server 2003 <a title="http://go.microsoft.com/fwlink/?LinkID=142202" href="http://go.microsoft.com/fwlink/?LinkID=142202"><font color="#669966" size="3" face="Trebuchet MS">http://go.microsoft.com/fwlink/?LinkID=142202</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://download.microsoft.com/download/1/6/1/16174D37-73C1-4F76-A305-902E9D32BAC9/IE8-WindowsXP-x86-CHS.exe" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows XP</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://download.microsoft.com/download/4/E/3/4E30CB91-FC6D-4358-AE62-C8F1382D2C03/IE8-WindowsServer2003-x64-CHS.exe" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows XP x64</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://download.microsoft.com/download/7/9/7/7973BA4C-09AA-46E7-ADBF-D18077F8A241/IE8-WindowsVista-x86-CHS.exe" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows Vista</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://download.microsoft.com/download/F/4/A/F4A92676-8B12-4324-A44A-95D4CD8D16D7/IE8-WindowsVista-x64-CHS.exe" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows Vista 64-bit</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://download.microsoft.com/download/0/E/7/0E7904F9-0C7D-45AC-9058-F4ABC3B0C4AD/IE8-WindowsServer2003-x86-CHS.exe" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows Server 2003</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://download.microsoft.com/download/4/E/3/4E30CB91-FC6D-4358-AE62-C8F1382D2C03/IE8-WindowsServer2003-x64-CHS.exe" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows Server 2003 64-bit</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://download.microsoft.com/download/7/9/7/7973BA4C-09AA-46E7-ADBF-D18077F8A241/IE8-WindowsVista-x86-CHS.exe" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows Server 2008</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://download.microsoft.com/download/F/4/A/F4A92676-8B12-4324-A44A-95D4CD8D16D7/IE8-WindowsVista-x64-CHS.exe" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows Server 2008 64-bit</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=ab4655f2-0a3c-42eb-974d-24b2790bf592" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Group Policy Settings Reference Windows Internet Explorer 8 Release Candidate 1</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=148fbe97-8bed-451e-9b8c-15f5f8e923b1" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows Internet Explorer 8 Technology Overview for Developers</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=e1da2f8c-f982-4cae-a83a-831188e57df9" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows Internet Explorer 8 FAQ for Business</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=19d2fc2b-a7f2-4aad-a1e2-6bbb773fb78b" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows Internet Explorer 8 Technology Overview for Enterprise and IT Pros</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=728ab2c8-8000-4888-8f62-340223d01fe0#tm" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Techniques for Preinstalling Windows Internet Explorer 8 whitepaper</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=b885e621-91b7-432d-8175-a745b87d2588#tm" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows Internet Explorer 8 Compatibility View List</font></a></blockquote><p>&nbsp;</p><p><strong><font color="#c0c0c0" size="5">如何让你的网站从今天开始准备迎接IE8</font></strong></p><blockquote><p><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/040.gif" /> 推荐：修改你网站的内容以支持Internet Explorer 8的默认网页视图标准，欲了解更多信息，请参阅：<a title="http://msdn.microsoft.com/zh-cn/library/cc817575.aspx" href="http://msdn.microsoft.com/zh-cn/library/cc817575.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://msdn.microsoft.com/zh-cn/library/cc817575.aspx</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/040.gif" /> 备用：让你的网站告诉Internet Explorer 8强制使用Internet Explorer 7模式。<img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/013.gif" />&nbsp; <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/004.gif" /> 如果以网站为基础，请新增HTTP标头:<strong>X-UA-Compatible: IE=EmulateIE7</strong> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/004.gif" /> 如果以网页为基础，请在网页的&lt;title&gt;标记之后添加<strong>&lt;meta http-equiv=&quot;X-UA-Compatible&quot; c /&gt;</strong></p></blockquote><p>&nbsp;</p><p><strong><font color="#c0c0c0" size="5">Windows Internet Explorer工具</font></strong></p><p><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/034.gif" />&nbsp;<a href="http://www.istartedsomething.com/20090318/expression-web-superpreview-cross-browser-testing/" target="_blank"><strong><font color="#669966" size="3" face="Trebuchet MS">MIX09:Expression Web 团队昨宣布了一款跨浏览器测试工具 SuperPreview</font></strong></a><strong>,,,,,,,</strong><a href="http://download.microsoft.com/download/5/6/8/568F0D28-0434-4794-B7FC-FB293BCC98FB/SuperPreview_Trial_en.exe" target="_blank"><strong><font color="#669966" size="3" face="Trebuchet MS">下载Microsoft Expression Web SuperPreview</font></strong></a><strong> <br /></strong><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/009.gif" />&nbsp; <a href="http://www.ie7pro.com/download.php?language=cn" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">IE7Pro</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/009.gif" />&nbsp; <a href="http://www.my-debugbar.com/wiki/IETester/HomePage" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">IETester</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/009.gif" />&nbsp; <a href="http://www.microsoft.com/DownLoads/details.aspx?familyid=E59C3964-672D-4511-BB3E-2D5E1DB91038&amp;displaylang=en" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Internet Explorer 开发者工具栏（IE8已封装 ）</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/009.gif" />&nbsp;<a href="http://www.debugbar.com/?langage=en"><font color="#669966" size="3" face="Trebuchet MS">IE DebugBar</font></a>( 现已无法访问 ) <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/009.gif" />&nbsp;<a href="http://toolbar.google.com/T5/intl/zh-CN/index.html" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Internet Explorer 谷歌工具栏</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/009.gif" />&nbsp;<a href="http://download.live.com/toolbar" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Windows Live 工具栏</font></a></p><p>&nbsp;</p><p><strong><font color="#c0c0c0" size="5">Web应用程序开发</font></strong></p><blockquote><blockquote><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/003.gif" />&nbsp;<a href="http://www.cnblogs.com/daizhj/archive/2008/08/13/1266879.html" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">IE8的Activities,WebSlices示例--ie8.taobao.com</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/003.gif" />&nbsp;<a href="http://www.cnblogs.com/yuehua/archive/2008/11/10/1330690.html" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">IE8学习资料集合</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/003.gif" />&nbsp;<a href="http://www.cnblogs.com/huazhihao/archive/2008/03/09/taste_IE8_WebSlice.html" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">IE8 WebSlice 尝鲜</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/003.gif" />&nbsp;<a href="http://www.cnblogs.com/JustinYoung/archive/2008/03/17/IE8-WebSlices.html" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">实例讲解IE8新特性之webSlices</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/003.gif" />&nbsp;<a href="http://www.cnblogs.com/jaic-xiao/archive/2008/08/29/Ru_He_Chuang_Jian_IE_8_Xin_Zeng_Shi_Shi__Sou_Suo_Jian_Yi_Gong_Neng.html" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">如何创建IE8新增即时搜索建议功能Search AutoSuggestions</font></a></blockquote><p><font color="#669966" size="3" face="Trebuchet MS"><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" /></font>&nbsp;<a href="http://blogs.msdn.com/ie/archive/2009/03/11/web-slice-and-feed-authentication-developer-guidelines.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Web Slice and Feed Authentication &ndash; Developer Guidelines</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2009/03/12/site-compatibility-and-ie8.aspx" target="_blank"><strong><font color="#ff0000" size="3" face="Trebuchet MS">Site Compatibility and IE8</font></strong></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2009/03/10/more-ie8-extensibility-improvements.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">More IE8 Extensibility Improvements</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2009/02/19/the-css-corner-using-filters-in-ie8.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">The CSS Corner: Using Filters In IE8</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">IE8 Security Part VII: ClickJacking Defenses</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2009/01/16/accessibility-improved-aria-support-in-the-IE8-RC.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Accessibility: Improved ARIA Support in the IE8 RC</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/12/16/the-css-corner-alternate-style-sheets.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">The CSS Corner: Alternate Style Sheets</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/12/10/new-accessibility-features-in-ie8.aspx" target="_blank"><font color="#ff0000" size="3" face="Trebuchet MS"><strong>New Accessibility Features in IE8</strong></font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/10/16/ending-expressions.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Ending Expressions</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/10/06/updates-for-ajax-in-ie8-beta-2.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Updates for AJAX in IE8 Beta 2</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/09/22/the-ie8-ieak.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">The IE8 IEAK</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/09/18/hello-world-getting-started-with-ie8-visual-search.aspx" target="_blank"><font color="#ff0000" size="3" face="Trebuchet MS"><strong>Hello, World: Getting Started with IE8 Visual Search</strong></font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/09/11/introducing-the-ie8-developer-tools-jscript-profiler.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Introducing the IE8 Developer Tools JScript Profiler</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/09/10/native-json-in-ie8.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Native JSON in IE8</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/09/08/microsoft-css-vendor-extensions.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Microsoft CSS Vendor Extensions</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/09/03/developer-tools-in-internet-explorer-8-beta-2.aspx" target="_blank"><strong><font color="#ff0000" size="3" face="Trebuchet MS">Developer Tools in Internet Explorer 8 Beta 2</font></strong></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">IE8 Security Part VI: Beta 2 Update</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/08/27/introducing-compatibility-view.aspx" target="_blank"><strong><font color="#ff0000" size="3" face="Trebuchet MS">Introducing Compatibility View</font></strong></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/06/10/introducing-ie-emulateie7.aspx" target="_blank"><strong><font color="#ff0000" size="3" face="Trebuchet MS">Introducing IE=EmulateIE7</font></strong></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/05/07/ie8-security-part-ii-activex-improvements.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">IE8 Security Part II: ActiveX Improvements</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/03/11/address-bar-improvements-in-internet-explorer-8-beta-1.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Address Bar Improvements in Internet Explorer 8 Beta 1</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/archive/2008/03/06/activities-and-webslices-in-internet-explorer-8.aspx" target="_blank"><strong><font color="#ff0000" size="3" face="Trebuchet MS">Activities and WebSlices in Internet Explorer 8</font></strong></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<strong><font color="#ff0000">T</font></strong><a href="http://blogs.msdn.com/ie/archive/2008/02/21/the-internet-explorer-8-user-agent-string.aspx" target="_blank"><strong><font color="#ff0000" size="3" face="Trebuchet MS">he Internet Explorer 8 User-Agent String</font></strong></a><strong><font color="#ff0000"> 和 </font></strong><a href="http://blogs.msdn.com/ie/archive/2009/01/09/the-internet-explorer-8-user-agent-string-updated-edition.aspx" target="_blank"><strong><font color="#ff0000" size="3" face="Trebuchet MS">The Internet Explorer 8 User-Agent String (Updated Edition)</font></strong></a></p></blockquote><p>&nbsp;</p><p><strong><font color="#c0c0c0" size="5">早前的Internet Explorer 8.0 Beta</font></strong></p><p><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://www.cnblogs.com/jaic-xiao/archive/2009/01/27/Windows_Internet_Explorer_8_Release_Candidate_1_for_Windows.html" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Internet Explorer 8 RC1发布</font></a> <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://www.cnblogs.com/jaic-xiao/archive/2008/08/28/Internet_Explorer_8_Beta_2_Xian_Zai_Ke_Yong.html" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">Internet Explorer 8 Beta 2 发布（ 追加内容 ）</font></a></p><p>&nbsp;</p><p><strong><font color="#c0c0c0" size="5">Internet Explorer 8.0 资源</font></strong></p><p>Internet Explorer 8 中的新东西 <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://msdn.microsoft.com/zh-cn/library/cc288472(en-us,VS.85).aspx" href="http://msdn.microsoft.com/zh-cn/library/cc288472(en-us,VS.85).aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://msdn.microsoft.com/zh-cn/library/cc288472(en-us,VS.85).aspx</font></a></p><p>Internet Explorer 8 主页 <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://www.microsoft.com/windows/internet-explorer/beta/default.aspx" href="http://www.microsoft.com/windows/internet-explorer/beta/default.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://www.microsoft.com/windows/internet-explorer/beta/default.aspx</font></a>&nbsp;&nbsp;&nbsp;</p><p>Internet Explorer MSDN开发中心 <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://msdn.microsoft.com/zh-cn/ie/default.aspx" href="http://msdn.microsoft.com/zh-cn/ie/default.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://msdn.microsoft.com/zh-cn/ie/default.aspx</font></a></p><p>Internet Explorer Technet技术中心 <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://technet.microsoft.com/zh-cn/ie/default.aspx" href="http://technet.microsoft.com/zh-cn/ie/default.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://technet.microsoft.com/zh-cn/ie/default.aspx</font></a></p><blockquote><p>IE浏览器兼容中心 <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://msdn.microsoft.com/zh-cn/ie/cc405106.aspx" href="http://msdn.microsoft.com/zh-cn/ie/cc405106.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://msdn.microsoft.com/zh-cn/ie/cc405106.aspx</font></a></p><p>Internet Explorer 8 封锁工具包&nbsp;&nbsp;&nbsp; <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=21687628-5806-4ba6-9e4e-8e224ec6dd8c&amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=21687628-5806-4ba6-9e4e-8e224ec6dd8c&amp;displaylang=en" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://www.microsoft.com/downloads/details.aspx?FamilyID=21687628-5806-4ba6-9e4e-8e224ec6dd8c&amp;displaylang=en</font></a></p></blockquote><p>Internet Explorer 8 准备工具包 <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://www.microsoft.com/windows/internet-explorer/beta/readiness/" href="http://www.microsoft.com/windows/internet-explorer/beta/readiness/" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://www.microsoft.com/windows/internet-explorer/beta/readiness/</font></a></p><p>Internet Explorer Administration Kit 8 <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://technet.microsoft.com/zh-cn/library/cc817437(en-us).aspx" href="http://technet.microsoft.com/zh-cn/library/cc817437(en-us).aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://technet.microsoft.com/zh-cn/library/cc817437(en-us).aspx</font></a></p><p>IE Blog <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a href="http://blogs.msdn.com/ie/" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://blogs.msdn.com/ie/</font></a></p><blockquote><p>IE8 在 Channel 9 <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp; <a title="http://channel9.msdn.com/tags/IE8/" href="http://channel9.msdn.com/tags/IE8/" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://channel9.msdn.com/tags/IE8/</font></a></p><p>IE8 视频 <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://www.microsoft.com/windows/internet-explorer/beta/videos.aspx" href="http://www.microsoft.com/windows/internet-explorer/beta/videos.aspx" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://www.microsoft.com/windows/internet-explorer/beta/videos.aspx</font></a></p><p>IE8 Demos&nbsp;&nbsp;&nbsp; <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://www.ie8demos.com/" href="http://www.ie8demos.com/" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://www.ie8demos.com/</font></a></p><p>IE8 加载项资源库&nbsp;&nbsp;&nbsp; <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://ieaddons.com/cn/" href="http://ieaddons.com/cn/" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://ieaddons.com/cn/</font></a>&nbsp;&nbsp;</p><p>IE8 中的兼容性视图列表的说明 <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://support.microsoft.com/kb/960321/" href="http://support.microsoft.com/kb/960321/"><font color="#669966" size="3" face="Trebuchet MS">http://support.microsoft.com/kb/960321/</font></a></p><blockquote>某些网站可能无法正确显示，或在 Windows Internet Explorer 8 中正常工作 <br /><img alt="" align="center" src="http://www.dotnetscraps.com/samples/bullets/001.gif" />&nbsp;<a title="http://support.microsoft.com/kb/956197" href="http://support.microsoft.com/kb/956197" target="_blank"><font color="#669966" size="3" face="Trebuchet MS">http://support.microsoft.com/kb/956197</font></a></blockquote></blockquote></div></div>]]></description>
      <category>2909</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
    <item>
      <title>ASP.NET MVC 1.0 发布了</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/3/4644.shtml</link>
      <pubDate>18 Mar 2009 23:14:43</pubDate>
      <guid>http://qianxun.net/Post/2009/3/4644.shtml</guid>
      <description><![CDATA[<div><p>看到<a href="http://www.cnblogs.com/ibillguo/archive/2009/03/18/1415745.html" target="_blank" fade="11277180" jquery1237389186151="13"><font color="#1a8bc8">Silverlight 3 Beta发布了</font></a>后，听说ASP.NET MVC 1.0发布了，就去<a href="http://www.asp.net/mvc/" target="_blank" jquery1237389186151="14"><font color="#1a8bc8">ASP.NET MVC</font></a>的官方站看了下，果然看到是1.0发布了，下面是下载地址：</p><p><a title="http://go.microsoft.com/fwlink/?LinkId=144444" href="http://go.microsoft.com/fwlink/?LinkId=144444" target="_blank" fade="11277286" jquery1237389186151="15"><font color="#1a8bc8">http://go.microsoft.com/fwlink/?LinkId=144444</font></a></p><p>下面是ASP.NET MVC的在线文档：</p><p><a href="http://go.microsoft.com/fwlink/?LinkId=145989" target="_blank" fade="11277297" jquery1237389186151="16"><font color="#1a8bc8">http://go.microsoft.com/fwlink/?LinkId=145989</font></a></p><p>&nbsp;</p><p>看了下Release Notes(带目录才6页)，基本和RC2没啥变化。</p><p>已知下面的Visual Studio add-ins 会和MVC的安装程序有冲突：</p><p>&middot; PowerCommands</p><p>&middot; Clone Detective</p><p>&middot; Azure Tools</p><p>可以下载下面的Hotfix修复</p><p><strong><a href="https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=16827&amp;wa=wsignin1.0" fade="11277311" jquery1237389186151="17"><font color="#1a8bc8">https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=16827&amp;wa=wsignin1.0</font></a></strong></p><p>&nbsp;</p><p>经过5个preview和2个RC后，好不容易终于发了1.0，可喜可贺，哈哈&hellip;</p><p>下面是一些资源：</p><p><a href="http://www.cnblogs.com/QLeelulu/archive/2008/07/02/1233836.html" target="_blank" jquery1237389186151="18"><font color="#1a8bc8">ASP.NET MVC 文章推荐</font></a></p><p><a href="http://www.cnblogs.com/QLeelulu/archive/2008/10/05/1303997.html" target="_blank" jquery1237389186151="19"><font color="#1a8bc8">ASP.NET MVC 入门系列教程</font></a>(基本是Preview5的，和正式版有一点点出入)</p><p>重典的教程：</p><p><a href="http://www.cnblogs.com/chsword/archive/2008/03/10/dotnetmvcframework.html" target="_blank" fade="11276710" jquery1237389186151="20"><font color="#1a8bc8">Asp.net Mvc Framework 系列</font></a></p><p><a href="http://www.cnblogs.com/chsword/archive/2008/09/29/aspnetmvc_video.html" target="_blank" jquery1237389186151="21"><font color="#1a8bc8">Asp.net Mvc 入门视频教程（试水）</font></a></p><p><a href="http://www.cnblogs.com/JeffreyZhao/" target="_blank" jquery1237389186151="22"><font color="#1a8bc8">老赵</font></a>的视频教程：<a href="http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/Series/MVC.aspx" target="_blank" fade="11277323" jquery1237389186151="23"><font color="#1a8bc8">http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/Series/MVC.aspx</font></a></p><p><a title="http://www.cnblogs.com/zhangziqiu/category/177895.html" href="http://www.cnblogs.com/zhangziqiu/category/177895.html" target="_blank" jquery1237389186151="24"><font color="#1a8bc8">从零开始学习ASP.NET MVC</font></a>(未完) by <a href="http://www.cnblogs.com/zhangziqiu/" fade="11277333" jquery1237389186151="25"><font color="#1a8bc8">ziqiu.zhang</font></a></p><p>如果你英文比较好的话，可以直接到<a href="http://www.asp.net/mvc/" target="_blank" jquery1237389186151="26"><font color="#1a8bc8">ASP.NET MVC 官网</font></a>上看，上面有入门教程.</p><p>&nbsp;</p><p>一些ASP.NET MVC可用的模板引擎：</p><ul>    <li><a href="http://mvccontrib.codeplex.com/Wiki/View.aspx?title=Brail&amp;referringTitle=Documentation" jquery1237389186151="27"><font color="#1a8bc8">Brail</font></a></li>    <li><a href="http://mvccontrib.codeplex.com/Wiki/View.aspx?title=NHaml&amp;referringTitle=Documentation" jquery1237389186151="28"><font color="#1a8bc8">NHaml</font></a></li>    <li><a href="http://mvccontrib.codeplex.com/Wiki/View.aspx?title=NVelocity&amp;referringTitle=Documentation" jquery1237389186151="29"><font color="#1a8bc8">NVelocity</font></a></li>    <li><a href="http://mvccontrib.codeplex.com/Wiki/View.aspx?title=XSLT&amp;referringTitle=Documentation" jquery1237389186151="30"><font color="#1a8bc8">XSLT</font></a>    <p>上面的4个都包括在<a href="http://mvccontrib.com/" jquery1237389186151="31"><font color="#1a8bc8">MVC Contrib</font></a>中了</p>    <p>还有我比较喜欢的一个：<a title="http://dev.dejardin.org/" href="http://dev.dejardin.org/" target="_blank" jquery1237389186151="32"><font color="#1a8bc8">Spark</font></a></p>    <p>&nbsp;</p>    <p>一个用于ASP.NET MVC的业务实体验证的开源项目：<a title="xVal" href="http://xval.codeplex.com/" target="_blank" jquery1237389186151="33"><font color="#1a8bc8">xVal</font></a>，介绍见<a href="http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/" fade="11277396" jquery1237389186151="34"><font color="#1a8bc8">xVal - a validation framework for ASP.NET MVC</font></a>、<a href="http://blog.codeville.net/2009/02/27/xval-08-beta-now-released/" fade="11277403" jquery1237389186151="35" style="background-color: rgb(255,255,186)"><font color="#1a8bc8">xVal 0.8 (Beta) Now Released</font></a>。</p>    </li></ul></div>]]></description>
      <category>2907</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
    <item>
      <title>从丑陋到优雅，让代码越变越美（客户端检测方法思考）</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/3/4643.shtml</link>
      <pubDate>18 Mar 2009 0:18:53</pubDate>
      <guid>http://qianxun.net/Post/2009/3/4643.shtml</guid>
      <description><![CDATA[<div><p>大家都知道，客户端检测不单可以让用户获得更好的体验，而且可以通过校验数据大大减少客户端和服务器端的往返次数，减少服务器负担。在这里，小弟打算回顾一下自己在客户端检测方面的学习历程和采用方法，如果大家有什么更好的方法或者建议，欢迎提出来共享！共同进步！</p><p>为了方便举例和说明，先构建一个简单的html页面，如下：</p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_203037"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_203037"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_203037" class="cnblogs_code_Collapse">html</span><span id="Code_Open_Text_203037"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">html&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">=&quot;http://www.w3.org/1999/xhtml&quot;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">JS&nbsp;Verify</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">请输入用户名,年龄和自我介绍:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">用户名:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">=&quot;text&quot;</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">=&quot;txtName&quot;</span><span style="color: #ff0000">&nbsp;size</span><span style="color: #0000ff">=&quot;20&quot;</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">年龄:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">=&quot;text&quot;</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">=&quot;txtAge&quot;</span><span style="color: #ff0000">&nbsp;size</span><span style="color: #0000ff">=&quot;5&quot;</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">岁</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">自我介绍:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">textarea&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">=&quot;txtIntro&quot;</span><span style="color: #ff0000">&nbsp;rows</span><span style="color: #0000ff">=&quot;10&quot;</span><span style="color: #ff0000">&nbsp;cols</span><span style="color: #0000ff">=&quot;50&quot;</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">textarea</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">=&quot;button&quot;</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">=&quot;提交信息&quot;</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></span></div><p>&nbsp;</p><p>第一阶段是：续项强写</p><p>每个人都基本会经过这个阶段，就是对检测内容每个都手工校验。很惭愧，自己也写过不少这样的代码。。这个阶段的代码如下：</p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_203155"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_203155"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_203155" class="cnblogs_code_Collapse">Code1</span><span id="Code_Open_Text_203155"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;SubmitInfo()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtName</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtAge</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;intro&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtIntro</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(name&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;name.value&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;&quot;</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">请输入用户名!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">/</span><span style="color: #000000">^[\u4E00-\u9FA5a-z0-9_]*$</span><span style="color: #000000">/</span><span style="color: #000000">gi.test(name.value))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">用户名只能由中文,英文,数字及下划线组成!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(age&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;age.value&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;&quot;</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">请输入年龄!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">/</span><span style="color: #000000">^[1-9]\d$</span><span style="color: #000000">/</span><span style="color: #000000">.test(age.value))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">年龄必须为正整数!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(intro&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;intro.value&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;&quot;</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">请输入自我介绍!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">提交成功!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />}</span></span></div><p>&nbsp;</p><p>&nbsp;</p><p>不评价这个了。。因为每个人都可能因为写这些方法检测逻辑写得眼冒星星手抽筋的！弄的经常下班了还在扑哧扑哧的写啊写。。。。</p><p>&nbsp;</p><p>第二阶段：集中消灭</p><p>相信不少初学者现在还是处于这个阶段，这阶段的同学们已经被第一阶段折磨怕了。很快就想出了集中消灭相同类型检测的方法。就是写检测函数，如下：</p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_203922"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_203922"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_203922" class="cnblogs_code_Collapse">Code2</span><span id="Code_Open_Text_203922"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;isEmpty(obj)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(obj&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;obj.value&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;&quot;</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />}<br /><br /></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;isInt(val)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">^[1-9]\d$</span><span style="color: #000000">/</span><span style="color: #000000">.test(val);<br />}<br /><br /></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;isSafeString(val)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">^[\u4E00-\u9FA5a-z0-9_]*$</span><span style="color: #000000">/</span><span style="color: #000000">gi.test(val);<br />}</span></span></div><p>&nbsp;</p><p>同学们很可能还将上边代码独立成一个公共类，叫Common.js什么的，然后实际检测引用一下，就容易多了：</p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_204047"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_204047"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_204047" class="cnblogs_code_Collapse">Code3</span><span id="Code_Open_Text_204047"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;SubmitInfo()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtName</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtAge</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;intro&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtIntro</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">isEmpty(name))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">请输入用户名!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">isSafeString(name.value))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">用户名只能由中文,英文,数字及下划线组成!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">isEmpty(age))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">请输入年龄!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">isInt(age.value))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">年龄必须为正整数!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">isEmpty(intro))<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">请输入自我介绍!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">提交成功!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />}</span></span></div><p>&nbsp;</p><p>看，不用每次写那些该死检测逻辑了。。要检测什么只要调用一下已经写好的公共检测方法就行了。轻松吧？！不过，还能更轻松吗？当然！请看：</p><p>&nbsp;</p><p>第三阶段：链式的威力</p><p>看着一大堆if else总是心里觉得不舒服，对吧？一串串的又不是羊肉串，虽然不能吃，也要消灭它们！这时候，是 的prototype出场的时候了。通过扩展prototype，可以获得简洁优雅的代码：</p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_204652"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_204652"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_204652" class="cnblogs_code_Collapse">Code4</span><span id="Code_Open_Text_204652"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;SubmitInfo()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtName</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;age&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtAge</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;intro&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.getElementById(</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtIntro</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">name.value.initVerify().isEmpty(</span><span style="color: #000000">&quot;</span><span style="color: #000000">请输入用户名!</span><span style="color: #000000">&quot;</span><span style="color: #000000">).isSafeString(</span><span style="color: #000000">&quot;</span><span style="color: #000000">用户名只能由中文,英文,数字及下划线组成!</span><span style="color: #000000">&quot;</span><span style="color: #000000">).verifyComplete())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">age.value.initVerify().isEmpty(</span><span style="color: #000000">&quot;</span><span style="color: #000000">请输入年龄!</span><span style="color: #000000">&quot;</span><span style="color: #000000">).isInt(</span><span style="color: #000000">&quot;</span><span style="color: #000000">年龄必须为正整数!</span><span style="color: #000000">&quot;</span><span style="color: #000000">).verifyComplete())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">intro.value.initVerify().isEmpty(</span><span style="color: #000000">&quot;</span><span style="color: #000000">请输入自我介绍!</span><span style="color: #000000">&quot;</span><span style="color: #000000">).verifyComplete())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">提交成功!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />}</span></span></div><p>&nbsp;</p><p>很简洁吧?相对前边一大串的羊肉串，是不是顺眼多了啊？哦，如何实现？其实很简单：</p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_204829"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_204829"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_204829" class="cnblogs_code_Collapse">Code5</span><span id="Code_Open_Text_204829"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;validateStatus;<br /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;validateMessage;<br /><br />String.prototype.initVerify&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;validateStatus&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;validateMessage&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;&quot;</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">;<br />}<br /><br />String.prototype.isEmpty&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(msg)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(validateStatus)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #0000ff">this</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&quot;&quot;</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validateStatus&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validateMessage&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;msg;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">;<br />}<br /><br />String.prototype.isInt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(msg)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(validateStatus)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">/</span><span style="color: #000000">^[1-9]\d$</span><span style="color: #000000">/</span><span style="color: #000000">.test(</span><span style="color: #0000ff">this</span><span style="color: #000000">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validateStatus&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validateMessage&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;msg;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">;<br />}<br /><br />String.prototype.isSafeString&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(msg)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(validateStatus)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">/</span><span style="color: #000000">^[\u4E00-\u9FA5a-z0-9_]*$</span><span style="color: #000000">/</span><span style="color: #000000">gi.test(</span><span style="color: #0000ff">this</span><span style="color: #000000">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validateStatus&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;validateMessage&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;msg;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">;<br />}<br /><br />String.prototype.verifyComplete&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">validateStatus)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(validateMessage);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;validateStatus;<br />}</span></span></div><p>&nbsp;</p><p>怎么样？是不是很简单啊？这个prototype真是一个好东西啊！！链式编程，赞！！呵呵，怎么？你还不满足，代码太长？人心不足啊。我试试吧。。</p><p>第四阶段：自定义属性</p><p>这个阶段的提交函数如下：</p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_205540"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_205540"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_205540" class="cnblogs_code_Collapse">Code6</span><span id="Code_Open_Text_205540"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;SubmitInfo()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">Verify(document.getElementById(</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtName</span><span style="color: #000000">&quot;</span><span style="color: #000000">)))&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">Verify(document.getElementById(</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtAge</span><span style="color: #000000">&quot;</span><span style="color: #000000">)))&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">Verify(document.getElementById(</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtIntro</span><span style="color: #000000">&quot;</span><span style="color: #000000">)))&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">提交成功!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />}</span></span></div><p>&nbsp;</p><p>想不通吧？怎么所有检测都一样啊？这不忽悠人吗？哈哈，要实现这个需要在html代码加点酱料：</p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_205729"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_205729"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_205729" class="cnblogs_code_Collapse">Code7</span><span id="Code_Open_Text_205729"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">div</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000">请输入用户名,年龄和自我介绍:</span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">span&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000">用户名:</span><span style="color: #000000">&lt;</span><span style="color: #000000">input&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">text</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtName</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;size</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">20</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;verifyOptions</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">{&quot;Empty&quot;:{&quot;Flag&quot;:false,&quot;Message&quot;:&quot;请输入用户名!&quot;},&quot;SafeString&quot;:{&quot;Message&quot;:&quot;用户名只能由中文,英文,数字及下划线组成!&quot;}}</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">/</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000">年龄:</span><span style="color: #000000">&lt;</span><span style="color: #000000">input&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">text</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtAge</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;size</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">5</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;verifyOptions</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">{&quot;Empty&quot;:{&quot;Flag&quot;:false,&quot;Message&quot;:&quot;请输入年龄!&quot;},&quot;Int&quot;:{&quot;Message&quot;:&quot;年龄必须为正整数!&quot;}}</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;岁&lt;</span><span style="color: #000000">/</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000">自我介绍:</span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">span&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">textarea&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtIntro</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;rows</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">10</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;cols</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">50</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;verifyOptions</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">{&quot;Empty&quot;:{&quot;Flag&quot;:false,&quot;Message&quot;:&quot;请输入自我介绍!&quot;}}</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">/</span><span style="color: #000000">textarea&gt;&lt;</span><span style="color: #000000">/</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">input&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">button</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">return&nbsp;SubmitInfo();</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">提交信息</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">/</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">div&gt;</span></span></div><p>&nbsp;</p><p>看到了吧，我们自定义了个叫verifyOption的属性，就是根据它们实现的分别对待的。就好像每个人都有银行卡，但是里面的钱都不一样一样（这个比喻好像比较牵强^_^）</p><p>还是看看Verify函数到底干了什么东西吧：</p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_210028"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_210028"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_210028" class="cnblogs_code_Collapse">Code8</span><span id="Code_Open_Text_210028"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;Verify(obj)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(obj.attributes[</span><span style="color: #000000">&quot;</span><span style="color: #000000">verifyOptions</span><span style="color: #000000">&quot;</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;undefined)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">请定义verifyOptions!</span><span style="color: #000000">&quot;</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;options&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;obj.attributes[</span><span style="color: #000000">&quot;</span><span style="color: #000000">verifyOptions</span><span style="color: #000000">&quot;</span><span style="color: #000000">].nodeValue;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">options.isEmpty(</span><span style="color: #000000">&quot;</span><span style="color: #000000">检测参数不正确!</span><span style="color: #000000">&quot;</span><span style="color: #000000">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;options&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;options.parseJSON();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(options.Empty&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;undefined&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;options.Empty.Flag&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">obj.value.isEmpty(options.Empty.Message))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(options.Int&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;undefined)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">obj.value.isInt(options.Int.Message))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(options.SafeString&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;undefined)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">obj.value.isSafeString(options.SafeString.Message))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />}</span></span></div><p>&nbsp;</p><p>就是检测自定义属性里面的设置，根据设置来进行相应检测。这下大家满足了吧？每次检测都一律一句Verify(*)就搞掂了！！QA的MM说检测不对？哦，不用急不用急，修改一下自定义属性verifyOption就好了。哈哈~~~</p><p>第五阶段：可配置</p><p>怎么还有第五阶段？疯狂了疯狂了~~（小子去死！！番茄，鸡蛋都丢上来了~~）唉，大家要注意文明礼貌嘛，丢着我没有关系，丢着花花草草也不好嘛。</p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_210748"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_210748"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_210748" class="cnblogs_code_Collapse">Code9</span><span id="Code_Open_Text_210748"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #000000">&lt;</span><span style="color: #000000">div</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000">请输入用户名,年龄和自我介绍:</span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">span&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000">用户名:</span><span style="color: #000000">&lt;</span><span style="color: #000000">input&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">text</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtName</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;size</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">20</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">/</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000">年龄:</span><span style="color: #000000">&lt;</span><span style="color: #000000">input&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">text</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtAge</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;size</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">5</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;岁&lt;</span><span style="color: #000000">/</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000">自我介绍:</span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">span&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">textarea&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtIntro</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;rows</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">10</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;cols</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">50</span><span style="color: #000000">&quot;</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">/</span><span style="color: #000000">textarea&gt;&lt;</span><span style="color: #000000">/</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">br&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">span</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">input&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">btnSubmit</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">button</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">&quot;</span><span style="color: #000000">提交信息</span><span style="color: #000000">&quot;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">&gt;&lt;</span><span style="color: #000000">/</span><span style="color: #000000">span</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /></span><span style="color: #000000">&lt;</span><span style="color: #000000">/</span><span style="color: #000000">div&gt;</span></span></div><p>&nbsp;</p><p>第五阶段的html代码已经回复清爽了，毕竟自定义属性好像不太友善，不标准！既然不标准就放弃吧！是不是有同学怀疑，这样检测函数岂不是要写更对逻辑，一定比较臃肿吧？好吧，大家看检测函数：</p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_211047"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_211047"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_211047" class="cnblogs_code_Collapse">Code10</span><span id="Code_Open_Text_211047"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;SubmitInfo()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">VerifyComplete())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">&quot;</span><span style="color: #000000">提交成功!</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />}</span></span></div><p>&nbsp;</p><p>不是吧？？骗人的吧？但是，事实如此，第五阶段就是这样简洁，这样优雅的实现了和上边几个阶段同样的功能。不相信，那就来看看吧！不过，第五阶段为了方便，引用了JQuery，找东西，它的搜索器还真好用。</p><p>这个阶段我们的检测配置都写到一个变量里面了：</p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_211419"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_211419"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_211419" class="cnblogs_code_Collapse">Code11</span><span id="Code_Open_Text_211419"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;verifyConfig&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;[<br />{</span><span style="color: #000000">&quot;</span><span style="color: #000000">Id</span><span style="color: #000000">&quot;</span><span style="color: #000000">:</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtName</span><span style="color: #000000">&quot;</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">Option</span><span style="color: #000000">&quot;</span><span style="color: #000000">:{</span><span style="color: #000000">&quot;</span><span style="color: #000000">Empty</span><span style="color: #000000">&quot;</span><span style="color: #000000">:{</span><span style="color: #000000">&quot;</span><span style="color: #000000">Flag</span><span style="color: #000000">&quot;</span><span style="color: #000000">:</span><span style="color: #0000ff">false</span><span style="color: #000000">,</span><span style="color: #000000">&quot;</span><span style="color: #000000">Message</span><span style="color: #000000">&quot;</span><span style="color: #000000">:</span><span style="color: #000000">&quot;</span><span style="color: #000000">请输入用户名!</span><span style="color: #000000">&quot;</span><span style="color: #000000">},</span><span style="color: #000000">&quot;</span><span style="color: #000000">SafeString</span><span style="color: #000000">&quot;</span><span style="color: #000000">:{</span><span style="color: #000000">&quot;</span><span style="color: #000000">Message</span><span style="color: #000000">&quot;</span><span style="color: #000000">:</span><span style="color: #000000">&quot;</span><span style="color: #000000">用户名只能由中文,英文,数字及下划线组成!</span><span style="color: #000000">&quot;</span><span style="color: #000000">}}},<br />{</span><span style="color: #000000">&quot;</span><span style="color: #000000">Id</span><span style="color: #000000">&quot;</span><span style="color: #000000">:</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtAge</span><span style="color: #000000">&quot;</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">Option</span><span style="color: #000000">&quot;</span><span style="color: #000000">:{</span><span style="color: #000000">&quot;</span><span style="color: #000000">Empty</span><span style="color: #000000">&quot;</span><span style="color: #000000">:{</span><span style="color: #000000">&quot;</span><span style="color: #000000">Flag</span><span style="color: #000000">&quot;</span><span style="color: #000000">:</span><span style="color: #0000ff">false</span><span style="color: #000000">,</span><span style="color: #000000">&quot;</span><span style="color: #000000">Message</span><span style="color: #000000">&quot;</span><span style="color: #000000">:</span><span style="color: #000000">&quot;</span><span style="color: #000000">请输入年龄!</span><span style="color: #000000">&quot;</span><span style="color: #000000">},</span><span style="color: #000000">&quot;</span><span style="color: #000000">Int</span><span style="color: #000000">&quot;</span><span style="color: #000000">:{</span><span style="color: #000000">&quot;</span><span style="color: #000000">Message</span><span style="color: #000000">&quot;</span><span style="color: #000000">:</span><span style="color: #000000">&quot;</span><span style="color: #000000">年龄必须为正整数!</span><span style="color: #000000">&quot;</span><span style="color: #000000">}}},<br />{</span><span style="color: #000000">&quot;</span><span style="color: #000000">Id</span><span style="color: #000000">&quot;</span><span style="color: #000000">:</span><span style="color: #000000">&quot;</span><span style="color: #000000">txtIntro</span><span style="color: #000000">&quot;</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&quot;</span><span style="color: #000000">Option</span><span style="color: #000000">&quot;</span><span style="color: #000000">:{</span><span style="color: #000000">&quot;</span><span style="color: #000000">Empty</span><span style="color: #000000">&quot;</span><span style="color: #000000">:{</span><span style="color: #000000">&quot;</span><span style="color: #000000">Flag</span><span style="color: #000000">&quot;</span><span style="color: #000000">:</span><span style="color: #0000ff">false</span><span style="color: #000000">,</span><span style="color: #000000">&quot;</span><span style="color: #000000">Message</span><span style="color: #000000">&quot;</span><span style="color: #000000">:</span><span style="color: #000000">&quot;</span><span style="color: #000000">请输入自我介绍!</span><span style="color: #000000">&quot;</span><span style="color: #000000">}}}];&nbsp;</span></span></div><p>&nbsp;</p><p>这个变量我叫配置变量，建议大家将这些变量都放到同一个文件，叫verifyConfig.js？反正我是这么叫的，要修改检测逻辑，就修改这个配置文件就好了，当然，例子由于要强调第五阶段的简洁，就将<span style="color: #000000">VerifyComplete()函数参数设置为空，其实它应该有一个参数，用来传入设置变量。这样才通用。</span></p><p><span style="color: #000000">最后奉上VerifyComplete()函数：</span></p><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_211925"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16" style="display: none" alt="" /><img id="Code_Open_Image_211925"  align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16" alt="" /><span id="Code_Closed_Text_211925" class="cnblogs_code_Collapse">Code12</span><span id="Code_Open_Text_211925"><br /><!--<br  /><br  />Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />http://www.CodeHighlighter.com/<br  /><br  />--><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;VerifyComplete()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;controls&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;$(</span><span style="color: #000000">&quot;</span><span style="color: #000000">:input</span><span style="color: #000000">&quot;</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;verifyFlag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;$.each(controls,&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(i,&nbsp;n)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(verifyFlag)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;verifyFlag&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Verify(n);<br />&nbsp;&nbsp;&nbsp;&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;verifyFlag;<br />}<br /><br /><br /></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;Verify(obj)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;options;<br />&nbsp;&nbsp;&nbsp;&nbsp;$.each(verifyConfig,&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(i,&nbsp;n)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(n.Id&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;obj.id)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;n.Option;<br />&nbsp;&nbsp;&nbsp;&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(options&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;undefined)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(options.Empty&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;undefined&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;options.Empty.Flag&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">obj.value.isEmpty(options.Empty.Message))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(options.Int&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;undefined)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">obj.value.isInt(options.Int.Message))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(options.SafeString&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;undefined)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">obj.value.isSafeString(options.SafeString.Message))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />}</span></span></div><p>&nbsp;进入第六阶段。第六阶段是怎么样？我还真想不到！</p></div>]]></description>
      <category>2907</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
    <item>
      <title>silverlight 试用</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/3/4642.shtml</link>
      <pubDate>6 Mar 2009 23:52:00</pubDate>
      <guid>http://qianxun.net/Post/2009/3/4642.shtml</guid>
      <description><![CDATA[<div><font size="2">&nbsp;&nbsp;经过漫长的等待，近日，微软终于发布了Silverlight 2的正式版本。Silverlight 2正式版的发布不仅让微软有了更多和Flash叫板的机会，同时也将RIA(Rich Internet Applications，丰富互联网应用程序)开发技术推向了一个新的时代。今天我们就来感受一下Silverlight的光芒! </font></div><div>这段时间，利用业余时间，看了一下最近讨论得沸沸扬扬的SILVERLIGHT。</div><div>并试用了一下做一个小小的实验，点击首页右边的 <a href="http://qianxun.net/Silverlight/default.html">silverlight版</a></div><div>试用感受如下：</div><div><p><font color="#000000"><font size="2">　　<strong>一、走近Silverlight</strong></font></font></p><p><font color="#000000" size="2">　　从2005年秋初现Silverlight(银光)技术，到2008年10月发布2.0正式版，Silverlight已经走过了整整三个年头。这个被微软乃至国内外众多网络公司大力推崇的技术，目前微软已经和150个合作伙伴结成联盟，Silverlight到底深藏了何种魅力?下面我们来探个究竟。</font></p><p align="center"><font color="#000000" size="2"><img alt="" src="http://www.diggsoft.com/uploads/allimg/081104/1009320.jpg" /></font></p><p class="pictext" align="center"><font color="#000000" size="2">Microsoft Silverlight</font></p><p><font color="#000000" size="2">　　1.Silverlight是什么？</font></p><p><font color="#000000" size="2">　　究竟什么是Silverlight？简单地说，Silverlight就是一个安装简单的、跨浏览器的、跨平台的插件，类似于Flash。用户只要安装该插件，就可以在Windows和Mac平台的主流浏览器中运行相应版本的Silverlight应用程序和服务，比如享受P2P网络电视、视频分享、电子相册、在线游戏、搜索引擎以及其他交互丰富的网络服务等等。未来还很有可能被广泛应用在手机中，比如在Android操作系统和苹果iPhone手机植入Silverlight插件。</font></p><p><font color="#000000" size="2">　　小提示：如何安装Silverlight 2</font></p><p><font color="#000000" size="2">　　要使用采用Silverlight技术的网络服务和应用软件，我们必须事先安装Silverlight插件。安装方法非常简单，双击下载的&ldquo;Silverlight.2.0.exe&rdquo;文件即可进行安装，无需进行过多的设置。</font></p><p align="center"><font color="#000000" size="2"><a href="http://www.diggsoft.com/uploads/userup/0811/04100410QU.jpg" target="_blank"><img border="0" alt="" src="http://www.diggsoft.com/uploads/userup/0811/04100410QU.jpg" width="507" height="234" /></a>&nbsp;</font></p><p class="pictext" align="center"><font color="#000000" size="2">安装Silverlight 2</font></p><p><font color="#000000" size="2">　　2.Silverlight技术优势</font></p><p><font color="#000000" size="2">　　跟Adobe的Flash技术相比，微软的Silverlight技术普及率虽然远远不及Flash，但是有些方面Silverlight技术还是有一定优势的。</font></p><p><font color="#000000" size="2">　　(1)技术开发优势：Silverlight是基于微软.NET Framework开发，对开发者或设计者来说，可以使用C#、VB.NET、 、Ruby、Python等来撰写逻辑程序，采用XHTML、XML、XSLT、CSS及ASP.NET等技术来实现丰富的网页互动体验，而且还支持HTTP、REST、WS*/SOAP、POX、RSS等网络标准。</font></p><p><font color="#000000" size="2">　　(2)Deep Zoom技术：Silverlight 2新增了对Deep Zoom(深度缩放)技术的支持，通过该技术我们在查看高分辨率图片时只将当前显示部分发送到浏览器里而不是全部下载。我们可以通过鼠标滚轮放大缩小图片，通过鼠标左键单击放大图片，可以通过鼠标任意拖动。</font></p><p><font color="#000000" size="2">　　(3)高级内容保护：最新的Silverlight 2支持全新的数字版权管理(DRM)技术&mdash;&mdash;PlayReady，并兼容Windows Media DRM 10。可以有效地保护标准的音频及视频文件、铃声、图片、游戏、墙纸以及其它由运营商售与手机用户的移动内容。</font></p><p><font color="#000000" size="2">　　(4)Windows平台的支持：凭借微软的大背景，未来Silverlight和Windows的结合度将更高，这样可以比较容易的获得更多的用户群。</font></p><p><font color="#000000" size="2">　　随着微软对Silverlight的持续投入，在某些功能方面将陆续缩小和Flash的距离，比如微软将在2009年第一季度推出下一代Silverlight 3.0版本，届时会提供对H.264视频编码和AAC音频编码的支持，从而可以播放高清的Flash视频。</font></p><p><font color="#000000"><font size="2">　　<strong>二、最热门的八大应用</strong></font></font></p><p><font color="#000000" size="2">　　Silverlight技术自发布以来就受到国内外众多网站、软件公司的关注，除了微软发布的Deep Zoom、Livestation、Tafiti等应用软件和服务，国内的百度、淘宝、腾讯等公司也积极的相应。下面我们将挑选目前最热门的八个基于Silverlight技术设计的网络服务，以及开发的应用程序，来体验一下Silverlight技术的魅力。</font></p><p><font color="#000000" size="2">　　应用实例一：图像处理、电子相册</font></p><p><font color="#000000" size="2">　　代表产品：Deep Zoom Composer+PhotoZoom</font></p><p><font color="#000000" size="2">　　产品简介：Deep Zoom技术是由Live Labs研究出的图像显示技术，使用该技术可以对图像进行多种分辨率的缩放，方便用户查看超高清晰度的图片，在最新的Silverlight 2中就包含该技术的应用。Deep Zoom Composer是一款让图片支持Deep Zoom技术的工具，PhotoZoom是微软推出的一个可缩放的电子相册服务，允许用户创建、共享相册。 </font></p><p>&nbsp;</p><p><font color="#000000" size="2">　　试用体会：下面以最新版本的Deep Zoom Composer 0.9.000.5为例，来体验制作Deep Zoom图片的过程。</font></p><p><font color="#000000" size="2">　　小提示：要正常使用Deep Zoom Composer，需要安装Microsoft .NET Framwork 3.5。</font></p><p><font color="#000000" size="2">　　Deep Zoom Composer分三个操作部分：在&ldquo;Import&rdquo;(导入)标签页中可以导入要处理的图片，支持批量导入图片；在&ldquo;Compose&rdquo;(组合)标签页中可以将图片拖入到工作区域，然后对导入的图片进行各种排列；在&ldquo;Export&rdquo;(输出)标签页中可以把经过Deep Zoom处理的图片发送到PhotoZoom电子相册，或者输出为Silverlight项目或图片文件。</font></p><p align="center"><font color="#000000" size="2"><a href="http://www.diggsoft.com/uploads/userup/0811/041005561262.jpg" target="_blank"><img border="0" alt="" src="http://www.diggsoft.com/uploads/userup/0811/041005561262.jpg" width="550" height="390" /></a>&nbsp;</font></p><p class="pictext" align="center"><font color="#000000" size="2">Deep Zoom Composer</font></p><p><font color="#000000" size="2">　　总体来说，Deep Zoom Composer操作比较简单，Deep Zoom的处理能力比较强大，比较适合制作高分辨率的图片库，需要改进的就是增加更多的鼠标效果，比如滚动显示等。</font></p><p><font color="#000000" size="2">　　小技巧：Deep Zoom Composer还有个妙用就是制作全景图，在导入全景图素材图片到工作区域后，选择这些图片，然后点击鼠标右键，在快捷菜单中选择&ldquo;Create panoramic photo&rdquo;来制作。</font></p><p><font color="#000000" size="2">　　在上面，我们说到Deep Zoom Composer制作的Deep Zoom图片可以上传到PhotoZoom相册中，那么我们看看PhotoZoom有什么独特的地方?</font></p><p><font color="#000000" size="2">　　打开http://photozoom.mslivelabs.com/，可以使用Windows Live ID登录。PhotoZoom的功能比较简单，支持JPG格式的图片，支持批量上传，也可以通过RSS/Atom导入图片。因为采用了Silverlight技术，所以在浏览相册的时候可以对图片进行缩放、移动。</font></p><p align="center"><font color="#000000" size="2"><a href="http://www.diggsoft.com/uploads/userup/0811/04100631VB.jpg" target="_blank"><img border="0" alt="" src="http://www.diggsoft.com/uploads/userup/0811/04100631VB.jpg" width="461" height="357" /></a>&nbsp;</font></p><p><font color="#000000" size="2">　　应用实例二：网络电视</font></p><p><font color="#000000" size="2">　　代表产品：Livestation</font></p><p><font color="#000000" size="2">　　产品简介：Livestation是由微软研究小组联手英国一家数字多媒体软件公司Skinkers共同研发的一款P2P网络电视软件，准备和著名的网络电视服务商Joost展开竞争。该产品采用微软的Silverlight技术架构，拥有华丽的播放界面、提供实时的电视节目视频播放。</font></p><p><font color="#000000" size="2">　　试用体会：作为微软进军P2P网络电视市场的产品，Livestation受到广泛的关注。目前还处于测试阶段，不过已经开放注册了，要使用该软件我们首先打开http://beta.livestation.com/，点击页面上方的&ldquo;Sign in&rdquo;注册一个账号，然后点击&ldquo;Download Livestation&rdquo;下载一个软件即可。</font></p><p><font color="#000000" size="2">　　默认情况下，在&ldquo;My Channels&rdquo;(我的频道)中会提供21个频道的节目，包括BBC、DW TV等，缓冲速度比较快，画面比较清晰(图5)，支持高清晰度全屏以及多种画面大小播放，和大名鼎鼎的Joost有得一拼。要想看到更多的电视节目，我们可以在&ldquo;Search&rdquo;(查找)中找，比如CNN，然后点击右侧的&ldquo;Add&rdquo;添加到我的频道中。</font></p><p align="center"><font color="#000000" size="2"><img alt="" src="http://www.diggsoft.com/uploads/allimg/081104/1009322.jpg" /></font></p><p><font color="#000000" size="2">　　</font></p><p class="pictext" align="center"><font color="#000000" size="2">My Channels</font></p><p><font color="#000000" size="2">　　除了高清晰的播放，未来Livestation要获得更多用户，必须增加更多的电视频道，包括中文频道;增加更多的功能，比如定时播放、视频录制等。</font></p><p><font color="#000000" size="2">　　应用实例三：搜索引擎</font></p><p><font color="#000000" size="2">　　代表产品：Tafiti</font></p><p><font color="#000000" size="2">　　产品简介：&ldquo;Tafiti&rdquo;在斯瓦希里语中的意思是&ldquo;研究和搜索&rdquo;，这里的Tafiti是微软推出的将Silverlight技术同Live Search搜索内核相结合的概念搜索站点，目前，支持Images(图片)、News(新闻)、Web(网页)、Halo(游戏)以及Feeds五项基本搜索。</font></p><p><font color="#000000" size="2">　　试用体会：打开Tafiti的主页&mdash;&mdash;http://www.tafiti.com/，我们可以看到一个华丽的UI界面，输入关键词(比如&ldquo;姚明&rdquo;)就可以进行可视化搜索体验，支持Windows Live ID登录。在页面左侧我们可以切换搜索的项目，比如图片、新闻、Feeds等，在中间会显示搜索的结果，如果要收藏搜索结果，还可以拖拽到右侧的收藏夹，最多可以收藏五个内容，比较人性化。 </font></p><p>&nbsp;</p><p><font color="#000000" size="2">　　从具体的搜索功能来看，搜索的结果大部分是Live Search的结果，支持搜索结果过滤。虽然Silverlight 2拥有可缩放图片和平铺Deep Zoom技术，但是Tafiti的图片搜索结果没看到Deep Zoom的影子，跟普通搜索引擎没什么区别。比较实用的倒是右侧的收藏夹功能，我们还可以将收藏到结果发送到Windows Live Spaces，通过Hotmail和朋友分享。</font></p><p align="center"><font color="#000000" size="2"><a href="http://www.diggsoft.com/uploads/userup/0811/04100P1b51.jpg" target="_blank"><img border="0" alt="" src="http://www.diggsoft.com/uploads/userup/0811/04100P1b51.jpg" width="526" height="405" /></a>&nbsp;</font></p><p><font color="#000000" size="2">　　应用实例四：在线音乐</font></p><p><font color="#000000" size="2">　　代表产品：百度音乐抢鲜族</font></p><p><font color="#000000" size="2">　　产品简介：百度采用Silverlight 2开发的在线音乐试听服务，提供了国内很多选秀歌手的最新单曲和最新专辑，还可以参加他们提供的投票和抽奖活动。</font></p><p><font color="#000000" size="2">　　试用体会：打开百度音乐抢鲜族的首页&mdash;&mdash;http://mu-zone.baidu.com/，最吸引人的就是动感十足的用户界面，比如我们可以点击平铺的明星照片，给人气歌手投票，还可以看他们的最新MV参赛作品。在页面右侧我们可以欣赏最新的单曲，比传统的百度MP3播放界面要美观很多。不过，百度音乐抢鲜族还处于测试阶段，打开的很多链接还是采用传统的百度MP3页面。</font></p><p align="center"><font color="#000000" size="2"><a href="http://www.diggsoft.com/uploads/userup/0811/04100RT0M.jpg" target="_blank"><img border="0" alt="" src="http://www.diggsoft.com/uploads/userup/0811/04100RT0M.jpg" width="550" height="329" /></a>&nbsp;</font></p><p><font color="#000000" size="2">　　</font></p><p class="pictext" align="center"><font color="#000000" size="2">在线音乐</font></p><p><font color="#000000" size="2">　　应用实例五：在线视频</font></p><p><font color="#000000" size="2">　　代表产品：微软视频</font></p><p><font color="#000000" size="2">　　产品简介：Microsoft Videos(微软视频)是微软推出的采用Silverlight技术的在线视频网站，目前尚处于测试阶段。该站点专门集中展示以及收集与微软有关的一些视频资源，包括一些正式的新闻报道、演示、帮助和教程视频等等。</font></p><p><font color="#000000" size="2">　　试用体会：打开http://www.microsoft.com/video/，在&ldquo;Search&rdquo;搜索框输入相应的关键词，就可以搜索到相应的视频内容。不过，微软视频还处于测试阶段，视频内容还比较少，以微软的新闻报道、产品演示等视频为主。在视频播放功能方面，清晰度尚可，&ldquo;dim lights&rdquo;(弱光)、&ldquo;detach player&rdquo;(分离播放器)以及&ldquo;Watch as WMV&rdquo;(用WMP播放)小功能比较实用，弱光可以让播放窗口更加突出地显示，分离播放器功能可以用单独窗口欣赏视频，用WMP播放功能可以打开WMP窗口播放视频。</font></p><p align="center"><font color="#000000" size="2"><a href="http://www.diggsoft.com/uploads/userup/0811/04100Z12I2.jpg" target="_blank"><img border="0" alt="" src="http://www.diggsoft.com/uploads/userup/0811/04100Z12I2.jpg" width="578" height="470" /></a>&nbsp;</font></p><p><font color="#000000" size="2">　　</font></p><p class="pictext" align="center"><font color="#000000" size="2">微软视频</font></p><p><font color="#000000" size="2">　　总体来说，相对于其他的Silverlight技术应用，在网络视频方面并不出彩。不过，相信在正式版本上线之后，播放功能会更加强大、视频内容还会更加丰富。</font></p><p><font color="#000000" size="2">　　应用实例六：电子商务</font></p><p><font color="#000000" size="2">　　代表产品：淘宝&ldquo;闪光店铺&rdquo;</font></p><p><font color="#000000" size="2">　　产品简介：&ldquo;闪光店铺&rdquo;是淘宝网和微软合作的项目，借助Silverlight技术，可以为淘宝卖家提供更多样化的店铺以及宝贝展示方式，比如通过平铺的宝贝图片可以看到商品的每一个细节。据悉，未来淘宝网还将为IE8定制淘宝定制版本。</font></p><p><font color="#000000" size="2">　　试用体会：打开http://list.mall.taobao.com/promotion/activity/silverlight.htm我们就可以看到淘宝的&ldquo;闪光店铺&rdquo;，因为是测试推广阶段，目前只提供了12家闪光灯店铺。</font></p><p><font color="#000000" size="2">　　跟传统的淘宝店铺相比，&ldquo;闪光店铺&rdquo;的展示借助于多个采用Deep Zoom技术的图片更加直观，比如可以自动播放宝贝图片(图9)，对图片进行缩放，宝贝图片可以叠加显示;而且展示页面可以进行叠加，这样在淘宝网买东西的时候不用一次打开多个页面。但是，并没有向媒体报道中提到的那样支持可以通过鼠标拖拽移动图片、通过滚轮放缩图片。</font></p><p><font color="#000000" size="2">　　目前，&ldquo;闪光店铺&rdquo;还只是淘宝网的一个概念性项目，未来如果店铺内容全部采用该技术展示，需要增加文字展示和提高图片的缩放比例，让买家能看到更大、更清晰的宝贝图片。</font></p><p><font color="#000000" size="2">　　应用实例七：电子邮箱</font></p><p><font color="#000000" size="2">　　代表产品：AOL邮箱</font></p><p><font color="#000000" size="2">　　产品简介：完全采用微软Silverlight技术开发的新版AOL邮箱&mdash;&mdash;AOL Mail RIA，目前处于测试阶段，采用动感的操作界面，支持界面换肤功能。</font></p><p><font color="#000000" size="2">　　试用体会：打开http://ria.aol.com/，相比旧版的AOL邮箱，AOL Mail RIA界面更加动感(图10)，点击右上角的四色按钮，在弹出的&ldquo;Select a Theme&rdquo;(选择主题)窗口中我们还可以选择喜欢的风格主题。在功能方面，AOL Mail RIA少了日历功能，以及AOL事件、AOL财经等小工具，不过增加的Truveo视频搜索，其他功能没什么变化，也没有明显的提高。 </font></p><p>&nbsp;</p><p><font color="#000000" size="2">　　应用实例八：游戏开发</font></p><p><font color="#000000" size="2">　　代表产品：Popfly+Popfly Game Creater</font></p><p><font color="#000000" size="2">　　产品简介：Popfly(http://www.popfly.com/)是微软在去年5月中旬推出的一款基于微软Silverlight技术架构的可视化Web开发平台。通过 Popfly提供的服务，用户可以轻松的创建以及分享自己的Mushup(数据混合编辑)、Game(游戏)、Gadget(小工具)、Web，甚至是应用程序等等。Popfly Game Creater是微软最近发布的一款面向普通用户的在线DIY游戏制作工具。</font></p><p><font color="#000000" size="2">　　试用体会：下面以Popfly Game Creater为例，来感受一下DIY游戏的乐趣。打开http://www.popfly.com/gamecreator/，可以使用Windows Live ID登录。在Popfly Game Creater中提供了大量的游戏模板，比如kill the Peas、Space Boy等，选择某个游戏模板，我们可以进行修改，在&ldquo;Actors&rdquo;(角色)中，在左侧我们可以通过素材库添加演员(People)、Animals(动物)、Buildings(建筑物)、Special Effects(场景特效)等等(图11);在&ldquo;Scenes&rdquo;(场景)中修改背景、行为、背景音乐;修改完成之后，在&ldquo;Play&rdquo;中试玩，看看自己的DIY成果。</font></p><p><font color="#000000" size="2">　　对普通用户来说，即使你没有游戏编程经验，通过这样傻瓜化的操作界面同样可以制作出、修改出有创意的游戏。</font></p><p><font color="#000000" size="2">　　更多Silverlight应用服务：</font></p><p><font color="#000000" size="2">　　Microsoft Download Center&mdash;&mdash;http://www.microsoft.com/beta/downloads/，微软下载中心Beta版</font></p><p><font color="#000000" size="2">　　滔滔酷炫体验版&mdash;&mdash;http://yg.qq.com/taotao/，腾讯采用Silverlight的微博客平台</font></p><p><font color="#000000" size="2">　　新浪音乐频道&mdash;&mdash;http://yue.sina.com.cn/，新浪采用Silverlight的音乐频道</font></p><p><font color="#000000" size="2">　　Zleek&mdash;&mdash;http://www.zleek.com/，建立和分享电子相册</font></p><p><font color="#000000" size="2">　　MyShowroom&mdash;&mdash;http://myshowroom.tv/，通过摄像头发布直播视频</font></p><p><font color="#000000" size="2">　　MSN UK Viewer&mdash;&mdash;http://viewer.uk.msn.com/，MSN英国全新的在线浏览体验应用Viewer</font></p><p><font color="#000000" size="2">　　如果对基于Silverlight技术开发的产品、服务还意犹未尽，大家不妨去Silverlight的官方网站看看(http://silverlight.net/)，在&ldquo;Showcase&rdquo;栏目中我们可以看到不同国家和地区&ldquo;银光&rdquo;爱好者开发的Silverlight应用程序或服务。</font></p></div>]]></description>
      <category>2907</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
    <item>
      <title>SQL Server 性能调优札记之三</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/2/4641.shtml</link>
      <pubDate>20 Feb 2009 11:01:46</pubDate>
      <guid>http://qianxun.net/Post/2009/2/4641.shtml</guid>
      <description><![CDATA[<div><h2>提出方案</h2><p>以下是找出来的TOP SQL 。</p><div class="wp_codebox"><pre><span style="color: blue">select distinct </span>s<span style="color: gray">.</span>parentId<span style="color: gray">,</span>s<span style="color: gray">.</span>pkId<span style="color: gray">,</span>1<span style="color: gray">,</span>s<span style="color: gray">.</span>title<span style="color: gray">,</span>s<span style="color: gray">.</span>comeOrg<span style="color: gray">,</span>s<span style="color: gray">.</span>fileDate<span style="color: gray">,    </span>s<span style="color: gray">.</span>fileName<span style="color: gray">,</span>s<span style="color: gray">.</span>filePath<span style="color: gray">,</span>1<span style="color: gray">,</span>l<span style="color: gray">.</span>optionstatus<span style="color: gray">,</span>s<span style="color: gray">.</span>remark3<span style="color: gray">,</span>urgencyLevel    <span style="color: blue">from </span>shouwen <span style="color: blue">as </span>s<span style="color: gray">,     </span>jt_ComitOA<span style="color: gray">.</span>dbo<span style="color: gray">.</span><span style="color: magenta">log </span><span style="color: blue">as </span>l     <span style="color: blue">where     </span><span style="color: gray">(</span>s<span style="color: gray">.</span>fileSerialNumber <span style="color: gray">like </span><span style="color: red">'%%' </span><span style="color: gray">or </span>s<span style="color: gray">.</span>title <span style="color: gray">like </span><span style="color: red">'%%'      </span><span style="color: gray">or </span>s<span style="color: gray">.</span>keywords <span style="color: gray">like </span><span style="color: red">'%%' </span><span style="color: gray">or </span>s<span style="color: gray">.</span>fileZi <span style="color: gray">like </span><span style="color: red">'%%'</span><span style="color: gray">)      and  </span>s<span style="color: gray">.</span>status<span style="color: gray">&lt;&gt;</span><span style="color: red">'4'      </span><span style="color: gray">and </span>s<span style="color: gray">.</span>pkid <span style="color: gray">in        (</span><span style="color: blue">select distinct</span><span style="color: gray">(</span>mid<span style="color: gray">) </span><span style="color: blue">from </span><span style="color: magenta">log </span><span style="color: blue">where uid</span><span style="color: gray">=</span><span style="color: red">'glzyf' </span><span style="color: gray">and </span>typeid<span style="color: gray">=</span><span style="color: red">'shouwen'</span><span style="color: gray">)     and </span>l<span style="color: gray">.</span>mid<span style="color: gray">=</span>s<span style="color: gray">.</span>pkid <span style="color: gray">and </span><span style="color: blue">uid</span><span style="color: gray">=</span><span style="color: red">'glzyf' </span><span style="color: gray">and </span>typeid<span style="color: gray">=</span><span style="color: red">'shouwen'</span><span style="color: blue">order by </span>s<span style="color: gray">.</span>fileDate <span style="color: blue">desc  </span></pre></div><p>从执行计划中可以看到两个比较大操作，两个对Log表&ldquo;聚集索引扫描&rdquo;，观察语句不难以下发现就是导致两个&ldquo;聚集索引扫描&rdquo;的原因。</p><div class="wp_codebox"><pre><span style="color: gray">(</span><span style="color: blue">select distinct</span><span style="color: gray">(</span>mid<span style="color: gray">) </span><span style="color: blue">from </span><span style="color: magenta">log </span><span style="color: blue">where uid</span><span style="color: gray">=</span><span style="color: red">'glzyf' </span><span style="color: gray">and </span>typeid<span style="color: gray">=</span><span style="color: red">'shouwen'</span><span style="color: gray">)</span></pre></div><div class="wp_codebox"><pre><span style="color: gray">and </span>l<span style="color: gray">.</span>mid<span style="color: gray">=</span>s<span style="color: gray">.</span>pkid <span style="color: gray">and </span><span style="color: blue">uid</span><span style="color: gray">=</span><span style="color: red">'glzyf' </span><span style="color: gray">and </span>typeid<span style="color: gray">=</span><span style="color: red">'shouwen'</span></pre></div><p>这次运气比较好，mid、uid和typeid都在这两个语句里面，于是我计划在Log表的mid、uid和typeid上面建索引</p><div class="wp_codebox"><pre><span style="color: blue">CREATE NONCLUSTERED INDEX </span>[idx_log__uid_typeid] <span style="color: blue">ON </span>[Log] <span style="color: gray">(    </span>[uid] <span style="color: blue">ASC</span><span style="color: gray">,    </span>[typeID] <span style="color: blue">ASC</span><span style="color: gray">,    </span>[mid] <span style="color: blue">ASC</span><span style="color: gray">);</span></pre></div>看一下执行计划新的执行计划：<p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_BDA7/%E5%BB%BA%E7%B4%A2%E5%BC%95%E5%90%8E%E7%9A%84%E6%89%A7%E8%A1%8C%E8%AE%A1%E5%88%922.png"><img title="建索引后的执行计划2" border="0" alt="建索引后的执行计划2" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_BDA7/%E5%BB%BA%E7%B4%A2%E5%BC%95%E5%90%8E%E7%9A%84%E6%89%A7%E8%A1%8C%E8%AE%A1%E5%88%922_thumb.png" width="826" height="353" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>留意左上角对ShouWen这个表的聚集索引扫描，由原先的相对比例0%（其实是接近0%），上升到27%，可见整体的资源消耗已经大大降低了。</p><div class="MyCode"><pre>表 'Log'。扫描计数 2，逻辑读取 3272 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。表 'ShouWen'。扫描计数 1，逻辑读取 1436 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。SQL Server 执行时间:   CPU 时间 = 62 毫秒，占用时间 = 293 毫秒。</pre></div><p>对Log表的访问量大大减少，这可是有25万条数据的表啊，总的执行时间更是大大减少，疗效相当的不错啊。</p><p>至此，可以认为该调优已经达到很好的效果了，从26秒的执行时间缩减到0.3秒，非常不错的成绩了。</p><p>&nbsp;</p><h2>审视方案</h2><p>在新的执行计划中有两个键查找，键查找用来检索筛选索引没有涵盖的剩余列,说白了，就有一些输出列不在这个索引的覆盖范围中。看一下select的输出，的确有一个Log表的optionstatus字段，于是将索引的创建语句调整为：</p><div class="wp_codebox"><pre><span style="color: blue">CREATE NONCLUSTERED INDEX </span>[idx_log__uid_typeid] <span style="color: blue">ON </span>[Log] <span style="color: gray">(    </span>[uid] <span style="color: blue">ASC</span><span style="color: gray">,    </span>[typeID] <span style="color: blue">ASC</span><span style="color: gray">,    </span>[mid] <span style="color: blue">ASC</span><span style="color: gray">)</span><span style="color: blue">INCLUDE </span><span style="color: gray">( </span>[optionstatus]<span style="color: gray">)</span></pre></div><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_BDA7/image_2.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_BDA7/image_thumb.png" width="887" height="258" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a>&nbsp;</p><p>同样以左上角的ShouWen表的&ldquo;聚集索引扫描&rdquo;为参照点，就执行计划来看，的确资源占用率再次大大降低了，看看执行的统计信息。</p><div class="MyCode"><pre>表 'Log'。扫描计数 2，逻辑读取 16 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。表 'ShouWen'。扫描计数 1，逻辑读取 1436 次，物理读取 0 次，预读 0 次，lob 逻辑读取 0 次，lob 物理读取 0 次，lob 预读 0 次。SQL Server 执行时间:   CPU 时间 = 78 毫秒，占用时间 = 282 毫秒。</pre></div><p>Log表的逻辑读取数大大减少，执行时间并没有太大变化。这是由于这次缩减的是逻辑读，即在缓存中读取，通常缓存是在内存中的，内存可是比磁盘快多了。</p></div>]]></description>
      <category>2908</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
    <item>
      <title>SQL Server 性能调优札记之二</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/2/4640.shtml</link>
      <pubDate>20 Feb 2009 11:01:03</pubDate>
      <guid>http://qianxun.net/Post/2009/2/4640.shtml</guid>
      <description><![CDATA[<div><h3>分析问题</h3><p>将数据库备份到一台测试的服务器上，查看一下数据库的数据文件和日志文件情况，发现日志文件比较大，貌似这也是一个SQL Server 存在的问题，具体原因不清楚，但是解决方法已经非常成熟，该问题暂时不影响使用，先不管它。</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_2.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_thumb.png" width="905" height="636" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a> 上一篇定位了问题，找出了多条Top SQL，其中这条最过分。</p><div class="wp_codebox"><pre><span style="color: blue">exec </span><span style="color: teal">oa_SWLIST </span><span style="color: red">'glzyf'</span><span style="color: gray">,</span><span style="color: red">'(s.fileSerialNumber like ''%%'' or s.title like ''%%'' or s.keywords like ''%%'' or s.fileZi like ''%%'') and '</span><span style="color: gray">,</span><span style="color: red">' (  ft.userid=''glzyf'' ) '</span></pre></div><p>&nbsp;</p><p>分析一下这个存储过程，我习惯是先看看SQL语句的结构，而不是马上看执行计划，或者直接跑语句获得统计信息。</p><div class="wp_codebox"><pre><span style="color: blue">ALTER PROCEDURE </span><span style="color: teal">[dbo]</span><span style="color: gray">.</span><span style="color: teal">[oa_SWLIST]    @userID </span><span style="color: blue">varchar</span><span style="color: gray">(</span>20<span style="color: gray">),    </span><span style="color: teal">@sql </span><span style="color: blue">varchar</span><span style="color: gray">(</span>1000<span style="color: gray">),    </span><span style="color: teal">@userIDs </span><span style="color: blue">varchar</span><span style="color: gray">(</span>1000<span style="color: gray">)</span><span style="color: blue">ASDECLARE </span><span style="color: teal">@SQL1 </span><span style="color: blue">nchar</span><span style="color: gray">(</span>4000<span style="color: gray">) ;</span><span style="color: blue">DECLARE </span><span style="color: teal">@SQL2 </span><span style="color: blue">nchar</span><span style="color: gray">(</span>4000<span style="color: gray">) ;</span><span style="color: blue">create table </span><span style="color: teal">#employees</span><span style="color: gray">(</span><span style="color: teal">[id] [int] </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) NOT NULL,</span><span style="color: teal">parentId </span><span style="color: blue">int</span><span style="color: gray">,</span><span style="color: teal">pkId </span><span style="color: blue">int</span><span style="color: gray">,</span><span style="color: blue">status int</span><span style="color: gray">,</span><span style="color: teal">title </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>1500<span style="color: gray">),</span><span style="color: teal">comeOrg </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>100<span style="color: gray">),</span><span style="color: teal">fileDate </span><span style="color: blue">DateTime</span><span style="color: gray">,</span><span style="color: blue">fileName nvarchar</span><span style="color: gray">(</span>4000<span style="color: gray">),</span><span style="color: teal">filePath </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>4000<span style="color: gray">),</span><span style="color: teal">readStatus </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>10<span style="color: gray">),</span><span style="color: teal">optionStatus </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>10<span style="color: gray">), </span><span style="color: teal">depId </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>20<span style="color: gray">),</span><span style="color: teal">urgencyLevel </span><span style="color: blue">nvarchar</span><span style="color: gray">(</span>10<span style="color: gray">));</span><span style="color: blue">set </span><span style="color: teal">@SQL1</span><span style="color: gray">=</span><span style="color: red">'insert into #employees (parentId,pkId,status,title,comeOrg,fileDate,fileName,filePath,readStatus,optionStatus,depId,urgencyLevel)select distinct s.parentId,s.pkId,0,s.title,s.comeOrg,s.fileDate,    s.fileName,s.filePath,ft.readStatus,0,s.remark3,case when urgencyLevel=''普通'' then 0when urgencyLevel=''急件'' then 1when urgencyLevel=''特办'' then 2when urgencyLevel=''特急件'' then 3when urgencyLevel=''限时'' then 4else 0end as urgencyLevel      from ShouWen as s ,  FlowTurning as ft where '</span><span style="color: gray">+</span><span style="color: teal">@sql</span><span style="color: gray">+</span><span style="color: red">' ft.status=0 and ft.type=''sw'' and s.pkid=ft.pkid and s.status&lt;&gt;''4'' and '</span><span style="color: gray">+</span><span style="color: teal">@userIDs</span><span style="color: gray">+</span><span style="color: red">' order by urgencyLevel desc,s.filedate desc'</span><span style="color: blue">set </span><span style="color: teal">@SQL2</span><span style="color: gray">=</span><span style="color: red">'insert into #employees (parentId,pkId,status,title,comeOrg,fileDate,fileName,filePath,readStatus,optionStatus,depId,urgencyLevel)select distinct s.parentId,s.pkId,1,s.title,s.comeOrg,s.fileDate,    s.fileName,s.filePath,1,l.optionstatus,s.remark3,urgencyLevel    from shouwen as s, log as l where '</span><span style="color: gray">+</span><span style="color: teal">@sql</span><span style="color: gray">+</span><span style="color: red">' s.status&lt;&gt;''4'' and s.pkid in(select distinct(mid) from log where uid='''</span><span style="color: gray">+</span><span style="color: teal">@userID</span><span style="color: gray">+</span><span style="color: red">''' and typeid=''shouwen'')and l.mid=s.pkid and uid='''</span><span style="color: gray">+</span><span style="color: teal">@userID</span><span style="color: gray">+</span><span style="color: red">''' and typeid=''shouwen''order by s.fileDate desc'</span><span style="color: blue">print </span><span style="color: gray">(</span><span style="color: teal">@SQL1</span><span style="color: gray">);</span><span style="color: blue">exec </span><span style="color: gray">(</span><span style="color: teal">@SQL1</span><span style="color: gray">)</span><span style="color: blue">print </span><span style="color: gray">(</span><span style="color: red">'+++++++++++++++++++++++++++++++++++'</span><span style="color: gray">);    </span><span style="color: blue">print </span><span style="color: gray">(</span><span style="color: teal">@SQL2</span><span style="color: gray">);</span><span style="color: blue">exec </span><span style="color: gray">(</span><span style="color: teal">@SQL2</span><span style="color: gray">)</span><span style="color: blue">select </span><span style="color: gray">* </span><span style="color: blue">from </span><span style="color: teal">#employees</span><span style="color: blue">delete from </span><span style="color: teal">#employees</span></pre></div><p>从结果来看该存储过程其实就是执行了两条动态SQL，分别存在@SQL1和SQL2。我稍微修改了一下存储过程，加入了一些调试信息，打开统计器。</p><div class="wp_codebox"><pre><span style="color: blue">SET STATISTICS IO on</span><span style="color: gray">; </span><span style="color: blue">SET STATISTICS TIME on</span><span style="color: gray">; </span></pre></div><p>执行存储过程，这里由于信息量比较大，我就不贴了，上一张图吧。</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_4.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_thumb_1.png" width="825" height="792" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>&nbsp;</p><p>可见@SQL1的语句耗时并不多，@SQL2资源占用是非常厉害的。其中 Log 表扫描530次，这个表的数据量有257417条，说大不大，说小也不小了，而且还得扫描530次，唉，啥也不说了，而shouwen这张表就小很多也有25000+条记录。</p><p>我将@SQL2的语句整理出来，去掉那个讨厌的 insert into #employees。</p><div class="wp_codebox"><pre><span style="color: blue">select distinct </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">parentId</span><span style="color: gray">,</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">pkId</span><span style="color: gray">,</span>1<span style="color: gray">,</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">title</span><span style="color: gray">,</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">comeOrg</span><span style="color: gray">,</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">fileDate</span><span style="color: gray">,    </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: blue">fileName</span><span style="color: gray">,</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">filePath</span><span style="color: gray">,</span>1<span style="color: gray">,</span><span style="color: teal">l</span><span style="color: gray">.</span><span style="color: teal">optionstatus</span><span style="color: gray">,</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">remark3</span><span style="color: gray">,</span><span style="color: teal">urgencyLevel    </span><span style="color: blue">from </span><span style="color: teal">shouwen </span><span style="color: blue">as </span><span style="color: teal">s</span><span style="color: gray">,     </span><span style="color: magenta">log </span><span style="color: blue">as </span><span style="color: teal">l     </span><span style="color: blue">where     </span><span style="color: gray">(</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">fileSerialNumber </span><span style="color: gray">like </span><span style="color: red">'%%' </span><span style="color: gray">or </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">title </span><span style="color: gray">like </span><span style="color: red">'%%'      </span><span style="color: gray">or </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">keywords </span><span style="color: gray">like </span><span style="color: red">'%%' </span><span style="color: gray">or </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">fileZi </span><span style="color: gray">like </span><span style="color: red">'%%'</span><span style="color: gray">)      and  </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: blue">status</span><span style="color: gray">&lt;&gt;</span><span style="color: red">'4'      </span><span style="color: gray">and </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">pkid </span><span style="color: gray">in        (</span><span style="color: blue">select distinct</span><span style="color: gray">(</span><span style="color: teal">mid</span><span style="color: gray">) </span><span style="color: blue">from </span><span style="color: magenta">log </span><span style="color: blue">where uid</span><span style="color: gray">=</span><span style="color: red">'glzyf' </span><span style="color: gray">and </span><span style="color: teal">typeid</span><span style="color: gray">=</span><span style="color: red">'shouwen'</span><span style="color: gray">)     and </span><span style="color: teal">l</span><span style="color: gray">.</span><span style="color: teal">mid</span><span style="color: gray">=</span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">pkid </span><span style="color: gray">and </span><span style="color: blue">uid</span><span style="color: gray">=</span><span style="color: red">'glzyf' </span><span style="color: gray">and </span><span style="color: teal">typeid</span><span style="color: gray">=</span><span style="color: red">'shouwen'</span><span style="color: blue">order by </span><span style="color: teal">s</span><span style="color: gray">.</span><span style="color: teal">fileDate </span><span style="color: blue">desc  </span></pre></div><p>看看这个select 语句的执行计划啦。</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_6.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_thumb_2.png" width="870" height="296" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>以下才是重点，两个在Log表上面的&ldquo;聚集索引扫描&rdquo;：</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_8.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_13647/image_thumb_3.png" width="633" height="269" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>无论哪个RDBMS的语句调优，绝大部分的情况下都是将执行计划中的&ldquo;扫描&rdquo;转变为&ldquo;查找&rdquo;。下一篇讲解如何将&ldquo;扫描&rdquo;变为&ldquo;查找&rdquo;。</p></div>]]></description>
      <category>2908</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
    <item>
      <title>SQL Server 性能调优札记之一</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/2/4639.shtml</link>
      <pubDate>20 Feb 2009 11:00:24</pubDate>
      <guid>http://qianxun.net/Post/2009/2/4639.shtml</guid>
      <description><![CDATA[<div><h3>发现问题</h3><p>今天服务器检查的时候发现SQL Server 2005服务器的CPU负载很高，而且一直居高不下，这是我当时在现场的截图:</p><p>&nbsp;</p><p>服务器是一台4路服务器有4颗XEON 3GHz的CPU，8G的内容，SQL Server 2005是32位，打了SP2。</p><p>该服务器上跑了很多个业务系统的数据其中属于JT的数据库就有好几个，业务量还是挺大的。</p><p>排除是其他进程搞的鬼，确定是SQL Server 进程把服务器搞得这么忙。</p><p>&nbsp;<a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_B6EA/taskManager_CPU_Memory.png"><img title="taskManager_CPU_Memory" border="0" alt="taskManager_CPU_Memory" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_B6EA/taskManager_CPU_Memory_thumb.png" width="651" height="488" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><h3>定位问题</h3><p>打开活动监视器按照CPU排序，得到如下信息，可见jt_user在jt_ComitOA上面的连接所作所为都是大动作啊。</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_12B1F/image_6.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_12B1F/image_thumb_2.png" width="907" height="426" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>&nbsp;</p><p>&nbsp;</p><p>接下来换一个工具，SQL Server Profiler 出场，调整跟踪的属性，调整为只是监视&ldquo;SQL:Batch Completed&rdquo;，而且将&ldquo;DatabaseName&rdquo;这个列选上，再调整一下列筛选器，如图：</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_12B1F/image_8.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_12B1F/image_thumb_3.png" width="409" height="317" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>这个列筛选器有个小Bug，输入完条件后最好按一下回车，否则有可能输入无效，OK开始我们的跟踪之旅。我这里简单地设置了一下DatabaseName，LoginName，CPU和Duration ，以便过滤掉一些无关紧要的值。</p><p>经过半个小时的收集，我得到了如下的跟踪信息：</p><p><a href="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_12B1F/image_14.png"><img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/killkill/WindowsLiveWriter/JTSQLServer_12B1F/image_thumb_6.png" width="941" height="507" style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" /></a></p><p>&nbsp;</p><p>我将部分语句Copy出来，顺便整理了一下格式。</p><div class="wp_codebox"><pre><span style="color: blue">exec </span><span style="color: teal">oa_SWLIST </span><span style="color: red">'glzyf'</span><span style="color: gray">,</span><span style="color: red">'(s.fileSerialNumber like ''%%'' or s.title like ''%%'' or s.keywords like ''%%'' or s.fileZi like ''%%'') and '</span><span style="color: gray">,</span><span style="color: red">' (  ft.userid=''glzyf'' ) '</span></pre></div><div class="wp_codebox"><pre><span style="color: blue">exec </span><span style="color: teal">oa_DBSX </span><span style="color: red">'cwkfss'</span><span style="color: gray">,</span><span style="color: red">''</span></pre></div><div class="wp_codebox"><pre><span style="color: blue">exec </span><span style="color: teal">oa_FlowTurning </span><span style="color: red">'jgstyb'</span></pre></div><div class="wp_codebox"><pre><span style="color: blue">update </span><span style="color: teal">FlowTurning </span><span style="color: blue">set </span><span style="color: teal">readStatus</span><span style="color: gray">=</span>1 <span style="color: blue">where type</span><span style="color: gray">=</span><span style="color: red">'sw' </span><span style="color: gray">and </span><span style="color: teal">pkid</span><span style="color: gray">=</span><span style="color: red">'21712' </span><span style="color: gray">and </span><span style="color: teal">userid</span><span style="color: gray">=</span><span style="color: red">'cwkfss'</span></pre></div><p>其中第一条语句的的占用率最严重，比其他的语句足足多了一个数量级。</p></div>]]></description>
      <category>2908</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
    <item>
      <title>F# 将会整合到 Visual Studio 2010 当中</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/2/4638.shtml</link>
      <pubDate>20 Feb 2009 10:52:19</pubDate>
      <guid>http://qianxun.net/Post/2009/2/4638.shtml</guid>
      <description><![CDATA[<div><p>去年, 微软开发部门的领导者 S. Somasegar, 宣布微软已经决定将 <a  href="http://blogs.msdn.com/controlpanel/blogs/blogs.msdn.com/somasegar/archive/2007/10/17/f-a-functional-programming-language.aspx" target="_blank">F# 作为受微软支持的 .NET 平台语言</a>. 我现在兴奋的宣布一项结果: <b>F# 将会整合到 Visual Studio 2010 当中</b>, 自从 <a  href="http://blogs.msdn.com/controlpanel/blogs/blogs.msdn.com/dsyme/archive/2008/08/29/the-f-september-2008-ctp-is-now-available.aspx" target="_blank">F# September 2008 CTP</a> 以来, F# 项目组一直致力于同 Visual Studio 2010 的整合工作. 下面的截屏展示了在 2010 shell 下使用 F# 开发工具, 以及新的编辑器和新的 look-back-in-time &quot;调试历史&quot;窗口.</p><p>去年, 我们在 F# 开发者社区和用户组看到了惊人的增长速度, 还有热烈的讨论. 还有两处更为显著的是: <a  href="http://channel9.msdn.com/pdc2008/TL11/" target="_blank">PDC presentation on F# by Luca Bolognese</a> 还有在 JAOO 上的关于 F# 和其他语言的现场演示&nbsp;<a  href="http://jaoo.blip.tv/file/1317881/" target="_blank">Anders Hejlsberg, Where are Programming Languages Going</a>. 如果你想知道为什么微软会把一门函数式语言添加到 Visual Studio 以及 .NET 开发工具当中, 一种原因或许是因为它给予特定领域极大的生产力提升, 除此之外我也想不出更好的能超过这两位微软最有经验的专家的理由.</p><p>在第一个受支持的发行版中, 我们将目标聚集于 F# 内核的强项: 探索 F# 交互编程, 数据编程, 实现并行和异步组件. 在我们私底下谈论这件事的时候, 这期间自然有很多问题被多次问到, 我将这些问题列在下面, 如果你有更多的问题要问, 请回复.</p><p><a  href="http://picasaweb.google.com/lh/photo/pH3-EN-_vAkQZxgAD6crkg"><img alt="" src="http://lh4.ggpht.com/_M94xOMOWd6s/SUDRgOWTzBI/AAAAAAAAA-s/jM3ZSx8P1RU/s400/FSharpShipInVisualStudio2010.png" /></a></p><p>问: 下一个 F# 发行版是什么时候? 我能继续在 VS2008 中使用吗?<br />&nbsp;&nbsp; &nbsp;下一个主要的发行版将会内置于 Visual Studio 2010 的第一个测试版当中, 届时会提供用于 Visual Studio 2008/.NET2.0 的 F# 编译器及工具.</p><p>问: 还开源吗?<br />&nbsp;&nbsp; &nbsp;我们的计划是让 F# 编译器和核心库在 CodePlex 上开源, 我们还计划启动一个叫 &quot;F# Power Pack&quot; 的 CodePlex 项目, 包含 F# 解析器和语法分析器. 我们已经在 <a  href="http://article.gmane.org/gmane.comp.lang.fsharp.general/1000" target="_blank">10 月份的 F# 邮件</a>当中分布了这件事.</p><p>问: F# 在 .NET 4.0 中吗?<br />&nbsp;&nbsp; &nbsp;按当前计划, F# 核心库和编译器会放在附加组件中, 不在 .NET 框架里. 预计会作为 F# 可再发行包. 在 Visual Studio 安装项目中引用这个包就可以把核心库部署到客户机上了.</p><p>问: 工具支持程度有多高?<br />&nbsp;&nbsp; &nbsp;按上面的描述, 对于 F# 的这个发行版, 我们主要致力于使它成为丰富数据和丰富控制流的编程语言, 处理函数式语言的使用方法 (思考算法, 数据维护, 数据转换, 并行编程, 反向编程组件). 工具支持计划围绕着编辑, 脚本, 交互体验, 项目系统, 调试, 分析以及与 C# 和 Visual Basic 的高度整合.</p><p>问: 这个发行版会包含设计工具吗?<br />&nbsp;&nbsp; &nbsp;我们关注的是交付高质量的 F# 核心工具用于设计参数, Visual Studio 在面向对象程序环境具备令人吃惊的丰富呈现能力, 结果是我们明确自己的决心, 与 C# 和 Visual Basic 这样的具备丰富设计呈现能力的编程语言寻求一个平衡点. 这意味着 F# 用户应该使用 Visual Studio 设计工具产生 C# 或 Visual Basic 代码后包含在 F# 应用程序当中. 在 Visual Studio 2010 中, 预计包含内建设计组件(例如: WinForms, ASP.NET, Silverlight 和 WPF 应用程序设计前端) F# 应用程序通常要使用混合语言创作. 我们会提供向导模板引导 F# 开发者.</p><p>问: 关于 Mono?<br />&nbsp;&nbsp; &nbsp;F# 编译器和工具会继续通过 Visual Studio 2008/.NET2.0 提供给 Mono 用户. (详见后文)</p><p>问: F# 起源于 &quot;OCaml-like language for .NET&quot;? 它还会继续沿着这条路走下去吗?<br />&nbsp;&nbsp; &nbsp;F# 从 INRIA 共享出色的 OCaml 语言核心结构. 这是早期设计的决定和承诺, Caml 语言家族的重要性在于它是一门实用的函数式语言, 作为创新, F# 本身已经成熟, 包括面向对象, 运算单位和计算表达式. 回首以前, 我们计划是继续允许 F# 使用特定模式支持跨编译公共子集, 现在仍然如此. 这通常需要使用 F# Power Pack 组件, 但它会从 Visual Studio 2010 中分离出来.</p><p>问 : 微软研究院还在参与吗?<br />&nbsp;&nbsp; &nbsp;是的当然! F# 是连接微软研究院, 剑桥和微软开发部的纽带. 我很高兴继续参与语言的设计, 同时还能留在微软研究院. 我们的团队包括剑桥 雷德蒙 温哥华 中国 德国还有纽约的人. 我一直对人们给这个项目带来的增进感到惊讶, 我希望把它当成微软创新的榜样.</p><p>非常感谢每个在 F# .NET MSR 还有语言社区的支持和帮助, 有他们才会有 F# 的今天. 之前一直很高兴, 我们相信这种发展会让 F# 在更多的领域受到关注.</p><p>快乐的编写和开发吧!</p></div>]]></description>
      <category>2902</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
    <item>
      <title>如何在Visual Studio 2008中编译F#程序</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/2/4637.shtml</link>
      <pubDate>20 Feb 2009 10:50:25</pubDate>
      <guid>http://qianxun.net/Post/2009/2/4637.shtml</guid>
      <description><![CDATA[<div>在Visual Studio 2008中,编译F#程序时,会出现警告(但不是错误),但是由于这个警告却使你的程序无法运行,不过大多数据这些警告都会有提示,提示你用.NET里的函数代替F#中的某些函数,但是这些.NET中的函数又不能像在C#中那样使用.</div><div>例如:</div><div>#light</div><div>let &quot;]<br />let two = &quot;two &quot; :: one<br />let three = &quot;three &quot; :: two<br />let rightWayRound = List.rev three<br />let printList l =<br />List.iter print_string l<br />print_newline()<br />let main() =<br />printList one<br />printList two<br />printList three<br />printList rightWayRound<br />main()</div><div>上面的程序在Visual Studio 2008编译时,会出现警告,提示List.iter print_string l一行中print_string要用Console.Write()代替,但是如果直接把print_string直接用Console.Write()或Console.Write也还是不行.</div><div>那么到底如果使用Console.Write()代替print_string在Viusal Studio 2008中通过编译呢,</div><div>注意Console.Wirite有多个重载版本,重载时要指明版本,这要用到匿名函数并对参数进行注解</div><div>所以上面的List.iter print_string l</div><div>可改写为List.iter (fun (x:string) -&gt; Console.Write(x)) l</div><div>这样就可以通过编译了.</div>]]></description>
      <category>2903</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
    <item>
      <title>SQL2005转SQL2000的方法</title>
      <author>Myshuiyue</author>
      <link>http://qianxun.net/Post/2009/2/4636.shtml</link>
      <pubDate>12 Feb 2009 14:25:09</pubDate>
      <guid>http://qianxun.net/Post/2009/2/4636.shtml</guid>
      <description><![CDATA[<div><p><span style="font-size: medium">应一个朋友的要求，最所也正好无事，解决此问题</span></p><p>***************************************</p><h2>SQL2005转SQL2000的方法</h2><div id="postmessage_910298" class="t_msgfont">直接restore或附加应该是不行的, 用脚本+导数据肯定没有问题。<br /><br />2005转到2000的步骤<br />1. 生成for 2000版本的数据库脚本<br />2005 的manger studio<br />-- 打开&quot;对象资源管理器&quot;(没有的话按F8), 连接到你的实例<br />-- 右键要转到2000的库<br />-- 任务<br />-- 生成脚本<br />-- 在&quot;脚本向导&quot;的&quot;选择数据库&quot;中, 确定选择的是要转到2000的库<br />-- 勾选&quot;为所选数据库中的所有对象编写脚本&quot;<br />-- 在接下来的&quot;选择脚本选项&quot;中, 找到&quot;为服务器版本编写脚本&quot;项, 选择&quot;SQL Server 2000&quot;<br />-- 其他选项根据需要设置<br />-- 最后把脚本保存到一个 .sql 脚本文件<br /><br />2. 在2000中创建目标数据库<br />在查询分析器(或2005的manger studio在打开脚本文件), 连接到SQL Server 2000,执行上面生成的脚本.以创建一个新的数据库<br /><br />3. 将数据从2005导到2000<br />2005 的manger studio<br />-- 打开&quot;对象资源管理器&quot;(没有的话按F8), 连接到你的实例<br />-- 右键要转到2000的库<br />-- 任务<br />-- 导出数据<br />-- 在&quot;SQL Server 导入和导出向导&quot;的&quot;选择数据源&quot;步骤中, 确定选择的是要导出的数据库<br />-- 在&quot;选择目标&quot;步骤中, 连接到 2000, 并选择步骤2新建的库<br />-- 在&quot;选择源表和源视图&quot;中, 选择所有的表<br />-- 最后完成</div><div class="t_msgfont">***********************************</div><div class="t_msgfont">我按照上面的方法操作，到转换为2000数据库脚步时它提示转换错误，目标版本（2000）不支持某个属性。这下我估计应该是服务器上的数据库系统不支持我那个默认属性了。这个问题让我想到.net的版本问题，我现在使用的是2.0的，但是我以后可能在给这个程序升级的时候使用3.5的版本。看来在选择空间的时候还是选择支持最高版本的好。</div><div class="t_msgfont">如果哪位朋友对我上面的问题有其他的解决方案就在评论中告诉，谢谢</div></div>]]></description>
      <category>2907</category>
      <dc:date.Taken>2009-3-20 10:48:42</dc:date.Taken>
    </item>
  </channel>
</rss>