<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Rico In Code</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/14731/rss</id><updated>2012-01-05T03:26:00Z</updated><author><name>RicoRui</name><uri>http://www.cnblogs.com/RuiLei/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RuiLei/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/14731/rss"/><entry><id>http://www.cnblogs.com/RuiLei/archive/2011/11/01/2231218.html</id><title type="text">用户界面草图设计工具-工具包和资源</title><summary type="text">UI界面与设计使用的元素，软件，网站等。内容很丰富，适合网页设计师，用户体验设计师，界面设计师，产品设计师，JS前段开发，手机产品设计，ipad产品设计等使用 Lumzy Lumzy是一个网站应用和原型界面制作工具。使用Lumzy，您可以轻松创建UI模型并即时发送到客户电脑中。 Lumzy还具有团队协作编辑工具。 Mockingbird 百舌鸟是一个在线工具，它使您轻松地创建UI界...</summary><published>2011-11-01T03:21:00Z</published><updated>2011-11-01T03:21:00Z</updated><author><name>RicoRui</name><uri>http://www.cnblogs.com/RuiLei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RuiLei/archive/2011/11/01/2231218.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RuiLei/archive/2011/11/01/2231218.html"/><content type="html">&lt;p&gt;&lt;strong&gt;UI界面与设计使用的元素，软件，网站等。内容很丰富，适合网页设计师，用户体验设计师，界面设计师，产品设计师，JS前段开发，手机产品设计，ipad产品设计等使用&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.lumzy.com/"&gt;Lumzy&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Lumzy是一个网站应用和原型界面制作工具。使用Lumzy，您可以轻松创建UI模型并即时发送到客户电脑中。 Lumzy还具有团队协作编辑工具。   &lt;br /&gt;&lt;a href="http://www.lumzy.com/"&gt;&lt;img title="0.jpg" alt="0.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040018Amw.jpg" width="540" height="295" /&gt; &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="https://gomockingbird.com/"&gt;Mockingbird&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;百舌鸟是一个在线工具，它使您轻松地创建UI界面模型，预览UI，并可以共享你的版面编排效果图。   &lt;br /&gt;&lt;a href="https://gomockingbird.com/"&gt;&lt;img title="1.jpg" alt="1.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040019upM.jpg" width="540" height="295" /&gt; &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://pencil.evolus.vn/en-US/Home.aspx"&gt;The Pencil Project&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;为设计图表和用户界面图形原型开发的一个自由和开源工具。   &lt;br /&gt;&lt;a href="http://pencil.evolus.vn/en-US/Home.aspx"&gt;&lt;img title="2.jpg" alt="2.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040019dsO.jpg" width="540" height="375" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://dojotoolkit.org/"&gt;Dojo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Dojo提供了强大的性能并节省您的时间。这是适合经验丰富前端开发者的JS开发工具包。   &lt;br /&gt;&lt;a href="http://dojotoolkit.org/"&gt;&lt;img title="3.jpg" alt="3.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040020MTA.jpg" width="540" height="375" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.mocklinkr.com/"&gt;Mocklinkr&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.mocklinkr.com/"&gt;&lt;img title="4.jpg" alt="4.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040021PG9.jpg" width="540" height="419" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.mockflow.com/signup/"&gt;MockFlow&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;MockFlow是一个在线工具，用户界面设计和协作版面编排工具。   &lt;br /&gt;&lt;a href="http://www.mockflow.com/signup/"&gt;&lt;img title="5.jpg" alt="5.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040021q2L.jpg" width="540" height="392" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.serena.com/products/prototype-composer/index.html"&gt;Serena Prototype Composer&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Serena Prototype Composer是制作流程图，模拟程序流程和用户界面设计程序。   &lt;br /&gt;&lt;a href="http://www.serena.com/products/prototype-composer/index.html"&gt;&lt;img title="6.jpg" alt="6.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040022eD2.jpg" width="540" height="339" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://cacoo.com/"&gt;Cacoo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Cocoo是一个用户友好的在线绘图工具，允许你创建一个如网站地图，线框，UML和网络图图等。 Cacoo可以免费使用。   &lt;br /&gt;&lt;a href="http://cacoo.com/"&gt;&lt;img title="7.jpg" alt="7.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/0400233fz.jpg" width="540" height="317" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://dub.washington.edu:2007/denim/"&gt;DENIM&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;一个早期非正式的网站和用户界面设计工具   &lt;br /&gt;&lt;a href="http://dub.washington.edu:2007/denim/"&gt;&lt;img title="8.jpg" alt="8.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040023lx7.jpg" width="540" height="330" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.hotgloo.com/"&gt;Hot Gloo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;网上应用线框   &lt;br /&gt;&lt;a href="http://www.hotgloo.com/"&gt;&lt;img title="9.jpg" alt="9.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040024ygk.jpg" width="540" height="307" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.webalys.com/design-interface-application-framework.php"&gt;User Interface Design Framework&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;一个免费提供网页设计师使用的用户界面设计工具。   &lt;br /&gt;&lt;a href="http://www.webalys.com/design-interface-application-framework.php"&gt;&lt;img title="10.jpg" alt="10.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040025hhI.jpg" width="540" height="291" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://patterntap.com/"&gt;Pattern Tap&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;可以寻找一些设计资源与模式等。   &lt;br /&gt;&lt;a href="http://patterntap.com/"&gt;&lt;img title="11.jpg" alt="11.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040026sm4.jpg" width="540" height="365" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://ui-patterns.com/"&gt;User Interface Design Patterns&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;提供一些热门的用户UI界面设计模式参考图，分类很详细，如果设计网站或UI界面可以上去找一些资源，很不错。   &lt;br /&gt;&lt;a href="http://ui-patterns.com/"&gt;&lt;img title="12.jpg" alt="12.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/0400276zn.jpg" width="540" height="331" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://patternry.com/"&gt;Patternry&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Patternry是用户界面设计模式库的目的是帮助解决常见的接口设计问题。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://patternry.com/"&gt;&lt;img title="13.jpg" alt="13.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/0400275to.jpg" width="540" height="337" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://box.mepholio.com/"&gt;Mephobox&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;UI设计界面资源欣赏参考网站。   &lt;br /&gt;&lt;a href="http://box.mepholio.com/"&gt;&lt;img title="14.jpg" alt="14.jpg" src="http://www.iptu.net/wp-content/themes/titan/functions/lazyload/grey.gif" width="540" height="337" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/icons-launcher.html"&gt;Android Asset Studio&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;可以在线生成图表，只需要输入参数即可   &lt;br /&gt;&lt;a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/icons-launcher.html"&gt;&lt;img title="15.jpg" alt="15.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/04002871k.jpg" width="540" height="475" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.fullcreative.com/2010/10/mobility-a-free-set-of-mobile-ui-design-elements/"&gt;Mobility&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;移动用户界面设计使用，可以输入参数进行测试，很方便   &lt;br /&gt;&lt;a href="http://www.fullcreative.com/2010/10/mobility-a-free-set-of-mobile-ui-design-elements/"&gt;&lt;img title="16.jpg" alt="16.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040029Zvh.jpg" width="540" height="564" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.webdesignshock.com/freebies/free-photoshop-android-interface-gui/"&gt;Android UI Elements Set&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;可以自由设定Android操作系统的用户界面元素。   &lt;br /&gt;&lt;a href="http://www.webdesignshock.com/freebies/free-photoshop-android-interface-gui/"&gt;&lt;img title="17.jpg" alt="17.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/0400302f3.jpg" width="540" height="448" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.tutorialshock.com/freebie/mac-osx-leopard-gui-set/"&gt;OSX Leopard GUI Set&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;该软件包含一些常用的Photoshop原文件和PNG文件，这些元素都是用来设计GUI界面的素材，通过该软件你可以快速制作出一些出色的界面   &lt;br /&gt;&lt;a href="http://www.tutorialshock.com/freebie/mac-osx-leopard-gui-set/"&gt;&lt;img title="18.jpg" alt="18.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040031ZUf.jpg" width="540" height="410" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://bestblogbox.com/freebies/all-in-one-web-elements-kit/"&gt;ALL In One Web Elements Kit&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;网页布局元素大集合,PSD文件。   &lt;br /&gt;&lt;a href="http://bestblogbox.com/freebies/all-in-one-web-elements-kit/"&gt;&lt;img title="19.jpg" alt="19.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040032Q26.jpg" width="540" height="437" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://www.teehanlax.com/blog/2010/02/01/ipad-gui-psd/"&gt;iPad GUI Set&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;iPad平板电脑上设计布局用的元素集合。   &lt;br /&gt;&lt;a href="http://www.teehanlax.com/blog/2010/02/01/ipad-gui-psd/"&gt;&lt;img title="20.jpg" alt="20.jpg" src="http://www.iptu.net/wp-content/uploads/auto_save_image/2011/03/040033vc6.jpg" width="540" height="334" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RuiLei/aggbug/2231218.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RuiLei/archive/2011/11/01/2231218.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RuiLei/archive/2011/10/10/2205720.html</id><title type="text">IIS URL Rewrite Model &amp;amp; ASP.NET Route Component &amp;lsquo;s  Diff</title><summary type="text">针对IIS 7.0的URL重写模块，以及在.NET框架3.5 SP1中包含了ASP.NET路由（Routing），许多ASP.NET开发人员开始质问这两种特性彼此间的关系，以及应该何时使用。 二者本质的区别在于：IIS URL重写的处理方式比ASP.NET路由在层次上更低，对于客户端是不可见的。 Ruslan给出了IIS 7 URL重写过程的可视化工作流。你可以看到URL重写模块是在请求被...</summary><published>2011-10-10T07:59:00Z</published><updated>2011-10-10T07:59:00Z</updated><author><name>RicoRui</name><uri>http://www.cnblogs.com/RuiLei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RuiLei/archive/2011/10/10/2205720.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RuiLei/archive/2011/10/10/2205720.html"/><content type="html">&lt;p&gt;&lt;a href="http://learn.iis.net/page.aspx/460/using-url-rewrite-module/"&gt;&lt;font size="3" face="Comic Sans MS"&gt;针对IIS 7.0的URL重写模块&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Comic Sans MS"&gt;，以及在.NET框架3.5 SP1中包含了&lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc668201.aspx"&gt;&lt;font size="3" face="Comic Sans MS"&gt;ASP.NET路由（Routing）&lt;/font&gt;&lt;/a&gt;&lt;font size="3" face="Comic Sans MS"&gt;，许多ASP.NET开发人员开始质问这两种特性彼此间的关系，以及应该何时使用。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Comic Sans MS"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Comic Sans MS"&gt;二者本质的区别在于：&lt;strong&gt;IIS URL重写的处理方式比ASP.NET路由在层次上更低，对于客户端是不可见的。&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Comic Sans MS"&gt;Ruslan给出了&lt;/font&gt;&lt;font size="3" face="Comic Sans MS"&gt;IIS 7 URL重写过程的可视化工作流&lt;/font&gt;&lt;font size="3" face="Comic Sans MS"&gt;。你可以看到URL重写模块是在请求被传递到请求处理器（Handler），例如ASP.NET管理的ASPX处理器之前被激活的。IIS URL重写并不知道具体的请求处理器。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Comic Sans MS"&gt;他同时还给出了&lt;/font&gt;&lt;font size="3" face="Comic Sans MS"&gt;ASP.NET路由过程的可视化工作流&lt;/font&gt;&lt;font size="3" face="Comic Sans MS"&gt;。可以看到ASP.NET路由就是一个请求分发器，它必须明确地获知一个特定的请求究竟应途经哪个处理器。&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="3" face="Comic Sans MS"&gt;URL重写通常被用于在Web服务器处理请求之前操作URL路径。URL重写模块并不知道处理器实际处理URL重写的任何内容。此外，实际的请求处理器并不知道URL是否已被重写。 &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Comic Sans MS"&gt;ASP.NET路由通常根据请求的URL路径将请求分发到处理器。与URL重写相反，路由组件知道处理器，并能够选择可以为请求的URL生成反应的处理器。你可以将ASP.NET路由看作是一个高级的处理器映射机制。 &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Comic Sans MS"&gt;IIS URL重写模块能够用于任何类型的Web应用程序，包括ASP.NET，PHP，ASP和静态文件。ASP.NET路由只能用于基于.NET框架的Web应用程序。 &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Comic Sans MS"&gt;在用于应用程序池方面，不管是集成的还是经典的IIS管道模式，IIS URL重写模块的工作方式都是相同的。而ASP.NET路由则会优先选择使用集成管道模式。ASP.NET路由也可以工作于经典模式，但是在这种情况下，应用程序的URL必须包含文件扩展名，或者应用程序必须在IIS中使用“*”配置处理器。 &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Comic Sans MS"&gt;URL重写模块可以根据域名、HTTP标头和服务器变量进行重写判断。默认情况下，ASP.NET路由只能使用URL路径以及标头的形式。 &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Comic Sans MS"&gt;除了重写功能，URL重写模块能够执行HTTP重定向，确定自定义状态码以及取消请求。ASP.NET路由则不具有这些功能。 &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="3" face="Comic Sans MS"&gt;URL重写模块在当前版本中是不能扩展的。ASP.NET路由完全能够扩展和定制。&lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="3" face="Comic Sans MS"&gt;左：IIS7 URL Rewrite &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Comic Sans MS"&gt;右：ASP.Net Route&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/RuiLei/201110/201110101558419686.png"&gt;&lt;font size="3" face="Comic Sans MS"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/RuiLei/201110/201110101558427668.png" width="333" height="484" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/RuiLei/201110/201110101558425442.png"&gt;&lt;font size="3" face="Comic Sans MS"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/RuiLei/201110/201110101558439521.png" width="333" height="484" /&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Comic Sans MS"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="3" face="Comic Sans MS"&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RuiLei/aggbug/2205720.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RuiLei/archive/2011/10/10/2205720.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RuiLei/archive/2011/08/02/2124546.html</id><title type="text">Entity Framework 4 &amp;amp; 4.1</title><summary type="text">Entity Framework中的批量提交与事务处理Entity Framework 4.1 Code First学习之路（二）QA1:布署EF 4.1时遇到此问题：未能加载文件或程序集“Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。拒绝访问。1.检查一下Web.Config中是否缺少&lt;system.web&gt; &lt;compilation debug="true" targetFramework="4.0"&gt; &lt;assemblies</summary><published>2011-08-02T01:24:00Z</published><updated>2011-08-02T01:24:00Z</updated><author><name>RicoRui</name><uri>http://www.cnblogs.com/RuiLei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RuiLei/archive/2011/08/02/2124546.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RuiLei/archive/2011/08/02/2124546.html"/><content type="html">&lt;p&gt;&lt;a id="ctl02_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/aisini/archive/2011/03/25/1994487.html"&gt;&lt;span style="color: #075db3;"&gt;Entity Framework中的批量提交与事务处理&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a id="ctl02_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/jiaxingseng/archive/2011/04/22/2024934.html"&gt;&lt;span style="color: #6466b3;"&gt;Entity Framework 4.1 Code First学习之路（二）&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;QA1:&lt;/p&gt;&lt;p&gt;布署EF 4.1时遇到此问题：&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6600;"&gt;&lt;em&gt;未能加载文件或程序集&amp;ldquo;Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&amp;rdquo;或它的某一个依赖项。拒绝访问。&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;1.检查一下Web.Config中是否缺少&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;compilation debug="true" targetFramework="4.0"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;assemblies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff6600;"&gt;&lt;strong&gt;&amp;lt;add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/assemblies&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/compilation&amp;gt;&lt;/p&gt;&lt;p&gt;2.这时问题应该解决了一半，还会报一个错&amp;ldquo;&lt;span style="color: #ff6600;"&gt;&lt;em&gt;用户 'IIS APPPOOL\ASP.NET v4.0' 登录失败。&lt;/em&gt; &amp;rdquo;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6600;"&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp; 在iis管理器中&amp;mdash;&amp;mdash;》应用程序池&amp;mdash;&amp;mdash;》ASP.NET V4.0&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;》高级设置&amp;mdash;&amp;mdash;》标识&amp;mdash;&amp;mdash;》改为localSystem或者NetworkService。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6600;"&gt;&lt;span style="color: #000000;"&gt;3.如果还有问题，请参照&amp;ldquo;&lt;a href="http://www.crazyfrom.com/basics/phpasp/iis-apppoolrwindrhine.html"&gt;IIS APPPOOL\RwindRhine登录失败的解决方案&lt;/a&gt;&amp;rdquo;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6600;"&gt;&lt;span style="color: #000000;"&gt;QA2:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;EF4.1 报错：Unable to load the specified metadata resource&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;是因为以下数据配置有问题&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;lt;add name="DecisionAuthContext" connectionString="metadata=res://*/&lt;span style="color: #ff9900;"&gt;&lt;strong&gt;DecisionAuthModel.DecisionAuth.csdl&lt;/strong&gt;&lt;/span&gt;|res://*/&lt;span style="color: #ff9900;"&gt;&lt;strong&gt;DecisionAuthModel.DecisionAuth.ssdl&lt;/strong&gt;&lt;/span&gt;|res://*/&lt;span style="color: #ff9900;"&gt;&lt;strong&gt;DecisionAuthModel.DecisionAuth.msl&lt;/strong&gt;&lt;/span&gt;;provider=System.Data.SqlClient;provider connection string=&amp;amp;quot;data source=10.1.249.38;initial catalog=ProjectDecision;persist security info=True;user id=mqpan;password=123456;multipleactiveresultsets=True;App=EntityFramework&amp;amp;quot;" providerName="System.Data.EntityClient" /&amp;gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;4.&amp;ldquo;&lt;em&gt;Unable to update the EntitySet XXXXXX because it has a DefiningQuery and no element exists in the element to support the current operation.&lt;/em&gt;&amp;rdquo; is one of the errors you will eventually run into with the ADO.NET Entity Framework 1.0.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;A Probable Cause&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;If a table doesn&amp;rsquo;t have a primary key defined&lt;/strong&gt;, this error will occur when you&amp;rsquo;re trying to delete an object. The generated EDMX file should also generate a warning:&lt;/p&gt;&lt;p class="code"&gt;Warning 6002: The table/view &amp;lsquo;TABLENAME&amp;rsquo; does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view.&lt;/p&gt;&lt;p&gt;A solution to this problem is simply adding a primary key to the table and update your EDMX model.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RuiLei/aggbug/2124546.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RuiLei/archive/2011/08/02/2124546.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RuiLei/archive/2011/07/13/2105077.html</id><title type="text">[转] LINQ Method cannot be translated into a store expression.</title><summary type="text">LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method, and this method cannot be translated into a store expression.</summary><published>2011-07-13T03:19:00Z</published><updated>2011-07-13T03:19:00Z</updated><author><name>RicoRui</name><uri>http://www.cnblogs.com/RuiLei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RuiLei/archive/2011/07/13/2105077.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RuiLei/archive/2011/07/13/2105077.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;i&gt;LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method, and this method cannot be translated into a store expression.&lt;/i&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This is a shortcomming of LINQ to Entities, and indeed the ADO.NET Entity Framework at the current release! The reason for a similar exception message is that in queries on the Entity Framework, custom methods and extensions methods cannot be translated into store expressions.&lt;/p&gt;&lt;p&gt;There are workarounds to still enjoy LINQ to Entities and as an example please read the following:&lt;/p&gt;&lt;p&gt;My example uses the AdventureWorksDB database which can be downloaded from &lt;a href="http://www.codeplex.com"&gt;http://www.codeplex.com&lt;/a&gt;. I&amp;rsquo;ve generated the Entity Data Model from the database (in case you wish to replicate this behavior). The scenario is the following: I have a TextBox and a Button on a form and I want to print the name of the Contact by entering the ContactID into the TextBox.&lt;/p&gt;&lt;div id="highlighter_512375" class="syntaxhighlighter "&gt;&lt;div class="lines"&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;1.&lt;/code&gt;&lt;span class="content"&gt;&lt;span style="margin-left: 0px !important;" class="block"&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;div&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;2.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;asp:Label&lt;/code&gt; &lt;code class="color1"&gt;ID&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"lblContactID"&lt;/code&gt; &lt;code class="color1"&gt;runat&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"server"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;3.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 120px !important;" class="block"&gt;&lt;code class="color1"&gt;AssociatedControlID&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"txtContactID"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;ContactID:&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;asp:Label&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;4.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;asp:TextBox&lt;/code&gt; &lt;code class="color1"&gt;ID&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"txtContactID"&lt;/code&gt; &lt;code class="color1"&gt;runat&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"server"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;asp:TextBox&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;5.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;asp:Button&lt;/code&gt; &lt;code class="color1"&gt;ID&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"btn"&lt;/code&gt; &lt;code class="color1"&gt;runat&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"server"&lt;/code&gt; &lt;code class="color1"&gt;Text&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"Search"&lt;/code&gt; &lt;code class="color1"&gt;OnClick&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"btn_Click"&lt;/code&gt; &lt;code class="plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;6.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;7.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="keyword"&gt;asp:Label&lt;/code&gt; &lt;code class="color1"&gt;ID&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"lblContactName"&lt;/code&gt; &lt;code class="color1"&gt;runat&lt;/code&gt;&lt;code class="plain"&gt;=&lt;/code&gt;&lt;code class="string"&gt;"server"&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;asp:Label&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;8.&lt;/code&gt;&lt;span class="content"&gt;&lt;span style="margin-left: 0px !important;" class="block"&gt;&lt;code class="plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="keyword"&gt;div&lt;/code&gt;&lt;code class="plain"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;The obvious thing to do is to apply a Where clause on an EntityCollection and filtering everything on the ContactID given in the txtContactID TextBox. If you use Convert.ToInt32(&amp;ldquo;ID&amp;rdquo;) in the Where clause the upper Exception is thrown.&lt;/p&gt;&lt;div id="highlighter_938116" class="syntaxhighlighter "&gt;&lt;div class="lines"&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;01.&lt;/code&gt;&lt;span class="content"&gt;&lt;span style="margin-left: 0px !important;" class="block"&gt;&lt;code class="keyword"&gt;protected&lt;/code&gt; &lt;code class="keyword"&gt;void&lt;/code&gt; &lt;code class="plain"&gt;btn_Click(&lt;/code&gt;&lt;code class="keyword"&gt;object&lt;/code&gt; &lt;code class="plain"&gt;sender, EventArgs e)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;02.&lt;/code&gt;&lt;span class="content"&gt;&lt;span style="margin-left: 0px !important;" class="block"&gt;&lt;code class="plain"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;03.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="plain"&gt;AdventureWorksEntities entities = &lt;/code&gt;&lt;code class="keyword"&gt;new&lt;/code&gt; &lt;code class="plain"&gt;AdventureWorksEntities();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;04.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="plain"&gt;Contact contact = entities.Contact&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;05.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 96px !important;" class="block"&gt;&lt;code class="plain"&gt;.Where(c =&amp;gt; c.ContactID == &lt;strong&gt;Convert.ToInt32(txtContactID.Text)&lt;/strong&gt;).FirstOrDefault();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;06.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(contact != &lt;/code&gt;&lt;code class="keyword"&gt;null&lt;/code&gt;&lt;code class="plain"&gt;)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;07.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 64px !important;" class="block"&gt;&lt;code class="plain"&gt;lblContactName.Text = contact.FirstName + &lt;/code&gt;&lt;code class="string"&gt;" "&lt;/code&gt; &lt;code class="plain"&gt;+ contact.LastName;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;08.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="keyword"&gt;else&lt;/code&gt; &lt;code class="plain"&gt;lblContactName.Text = &lt;/code&gt;&lt;code class="string"&gt;"Contact not found!"&lt;/code&gt;&lt;code class="plain"&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;09.&lt;/code&gt;&lt;span class="content"&gt;&lt;span style="margin-left: 0px !important;" class="block"&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;The workaround to this is to declare a variable of type int, which contains the converted value from the TextBox and use this variable in the Where query.&lt;/p&gt;&lt;div id="highlighter_612224" class="syntaxhighlighter "&gt;&lt;div class="lines"&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;01.&lt;/code&gt;&lt;span class="content"&gt;&lt;span style="margin-left: 0px !important;" class="block"&gt;&lt;code class="keyword"&gt;protected&lt;/code&gt; &lt;code class="keyword"&gt;void&lt;/code&gt; &lt;code class="plain"&gt;btn_Click(&lt;/code&gt;&lt;code class="keyword"&gt;object&lt;/code&gt; &lt;code class="plain"&gt;sender, EventArgs e)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;02.&lt;/code&gt;&lt;span class="content"&gt;&lt;span style="margin-left: 0px !important;" class="block"&gt;&lt;code class="plain"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;03.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="plain"&gt;AdventureWorksEntities entities = &lt;/code&gt;&lt;code class="keyword"&gt;new&lt;/code&gt; &lt;code class="plain"&gt;AdventureWorksEntities();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;04.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;strong&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="keyword"&gt;int&lt;/code&gt; &lt;code class="plain"&gt;ContactID = Convert.ToInt32(txtContactID.Text);&lt;/code&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;05.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="plain"&gt;Contact contact = entities.Contact&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;06.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 168px !important;" class="block"&gt;&lt;code class="plain"&gt;.Where(c =&amp;gt; c.ContactID == &lt;strong&gt;ContactID&lt;/strong&gt;).FirstOrDefault();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;07.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="keyword"&gt;if&lt;/code&gt; &lt;code class="plain"&gt;(contact != &lt;/code&gt;&lt;code class="keyword"&gt;null&lt;/code&gt;&lt;code class="plain"&gt;)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;08.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 64px !important;" class="block"&gt;&lt;code class="plain"&gt;lblContactName.Text = contact.FirstName + &lt;/code&gt;&lt;code class="string"&gt;" "&lt;/code&gt; &lt;code class="plain"&gt;+ contact.LastName;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt1"&gt;&lt;code class="number"&gt;09.&lt;/code&gt;&lt;span class="content"&gt;&lt;code class="spaces"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/code&gt;&lt;span style="margin-left: 32px !important;" class="block"&gt;&lt;code class="keyword"&gt;else&lt;/code&gt; &lt;code class="plain"&gt;lblContactName.Text = &lt;/code&gt;&lt;code class="string"&gt;"Contact not found!"&lt;/code&gt;&lt;code class="plain"&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line alt2"&gt;&lt;code class="number"&gt;10.&lt;/code&gt;&lt;span class="content"&gt;&lt;span style="margin-left: 0px !important;" class="block"&gt;&lt;code class="plain"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Because this feature is available in normal LINQ to SQL I hope the ADO.NET team will do some improvement on this in the next major release of the Entity Framework.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RuiLei/aggbug/2105077.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RuiLei/archive/2011/07/13/2105077.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RuiLei/archive/2011/04/28/2032322.html</id><title type="text">Script#</title><summary type="text">Script# brings productivity to Ajax and JavaScript development. Script# is a free tool that enables developers to author C# source code and subsequently compile it into regular script that works across all modern browsers, and in doing so, leverage the productivity and power of existing .NET tools as well as the Visual Studio IDE. Script# empowers you with a development methodology and approach that brings software engineering, long term maintainability and scalable development approaches for yo</summary><published>2011-04-28T15:52:00Z</published><updated>2011-04-28T15:52:00Z</updated><author><name>RicoRui</name><uri>http://www.cnblogs.com/RuiLei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RuiLei/archive/2011/04/28/2032322.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RuiLei/archive/2011/04/28/2032322.html"/><content type="html">&lt;p&gt;At MIX11 last week, I presented the &lt;a href="http://channel9.msdn.com/events/MIX/MIX11/HTM16"&gt;Script#: Compiling C# to JavaScript using Visual Studio&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;As full-fledged script-based development becomes widespread with the HTML5 wave, a couple set of interesting questions emerge - what are the development tools you and your team uses to productively author and manage a code base? Shouldn&amp;rsquo;t you write code in a model that is optimized for development and productivity and let a compiler do its magic and produce code that is optimized for deployment and runtime?&lt;/p&gt;&lt;p&gt;&lt;a href="http://projects.nikhilk.net/ScriptSharp"&gt;Script#&lt;/a&gt; allows you to write your code in C# and compile it down to deployable JavaScript, it also unlocks the power of C#, Visual Studio and existing .NET tools for scripting scenarios.&lt;/p&gt;&lt;p&gt;&lt;img alt="Development with Script#" src="http://www.nikhilk.net/Content/Presentations/MIX11/IDETools.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Script# Project&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Productivity and better tooling are primary motivators behind Script#. At the same time, a fundamental design tenet and driving philosophy behind the design of Script# is to produce script that resembles hand-written script that is aware and faithful to the script runtime environment found in browsers. Specifically the compiler does not introduce unnecessary layers of abstraction or indirection. The idea is you&amp;rsquo;re simply writing script in a better and pragmatic way, rather than trying to port a .NET application to the browser, which is more likely to produce impractical results.&lt;/p&gt;&lt;p&gt;Script# allows programming against the DHTML DOM APIs and JavaScript APIs, as well as &lt;a href="http://msdn.microsoft.com/en-us/library/cc903928%28VS.95%29.aspx"&gt;Silverlight 1.0 script API&lt;/a&gt;. The compiler itself isn&amp;rsquo;t coupled to any one particular framework. You can use Script# to program against &lt;a href="http://ajax.asp.net"&gt;Microsoft ASP.NET Ajax&lt;/a&gt; as well as other 3rd party frameworks such as &lt;a href="http://www.extjs.com/"&gt;ExtJS&lt;/a&gt; (via &lt;a href="http://code.google.com/p/extsharp/"&gt;Ext#&lt;/a&gt;). At the same time, the compiler is complemented by an optional ScriptFX framework, which is a small framework built using Script# itself. Finally, if you have existing scripts, they can be imported and then used from new C# code so you don&amp;rsquo;t have to rewrite everything from scratch to start using Script#.&lt;/p&gt;&lt;p&gt;Scripts generated using Script# are honest-to-goodness plain old JavaScript files, that you can freely deploy into your applications, and there is no runtime dependency on the Script# compiler. This is further explained in the &lt;a href="http://projects.nikhilk.net/ScriptSharp/Conceptual-Understanding"&gt;Understanding Script#&lt;/a&gt; page. You will need .NET 2.0+ and/or Visual Studio on your development machine. You can also use &lt;a href="http://www.microsoft.com/express/vcsharp/"&gt;Visual C# Express&lt;/a&gt; which is available for free.&lt;/p&gt;&lt;p&gt;Script# is an evolving project, but is quite mature and ready for use in real-world projects such as those listed in the &lt;a href="http://projects.nikhilk.net/ScriptSharp/Showcase"&gt;showcase&lt;/a&gt;. Script# is being used both internally within Microsoft as well as external applications. It was first released in May 2006 (&lt;a href="http://www.nikhilk.net/ScriptSharpIntro.aspx"&gt;introductory blog post&lt;/a&gt;). Over the course of the last two+ years, it has been regularly updated with new features and bug fixed based on actual usage and feedback from developers like you. You can read about the latest release on the &lt;a href="http://projects.nikhilk.net/ScriptSharp/ReleaseHistory"&gt;release history&lt;/a&gt; page. Please do continue sending any feedback on Script# that you might have.&lt;/p&gt;&lt;p&gt;The content on this site will be updated periodically to include additional concepts and tutorials. Please subscribe to the Script# feed to stay up-to-date or check this page often.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What you can build with Script# Project&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Ajax Applications&lt;/b&gt; &amp;ndash; Script# allows you to implement the Ajax code for your pages and mashups using a choice of frameworks. (see tutorial) &lt;/li&gt;&lt;li&gt;&lt;b&gt;Ajax Frameworks and Components&lt;/b&gt; &amp;ndash; Script# allows you to create reusable script libraries and components that can be consumed during further application development using either Script# or via direct JavaScript as well. &lt;/li&gt;&lt;li&gt;&lt;b&gt;ASP.NET Ajax Server Controls&lt;/b&gt; &amp;ndash; Script# can be used to develop script libraries containing components such as controls and behaviors that can then be embedded into server controls and control extenders. (see tutorial) &lt;/li&gt;&lt;li&gt;&lt;b&gt;Sidebar Gadgets&lt;/b&gt; &amp;ndash; Script# can be used to program gadgets for Windows Vista by referencing the Gadget APIs, RSS Feed APIs and File System APIs in addition to the default DHTML DOM APIs. (see tutorial) &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;A set of samples available with the Script# install demonstrate some of these uses of Script# further. Read the topic on &lt;a href="http://projects.nikhilk.net/ScriptSharp/Conceptual-What"&gt;What's in Script#&lt;/a&gt; to understand more about what is currently available.&lt;/p&gt;&lt;p&gt;An in-depth list of how C# constructs are mapped to JavaScript is described on the topic From C# to Script. On the flip side, an in-depth list of how script constructs are modeled in C# is described on the topic Achieving Script&amp;rsquo;isms in C#.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Script# Roadmap&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The Script# project has been an on-going piece of work. The following are on the list for a v1 release during 2009 beyond what is available in the current and latest build:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Unit testing support &lt;/li&gt;&lt;li&gt;jQuery support &lt;/li&gt;&lt;li&gt;High priority bug fixes and improved Visual Studio integration &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Longer term, there are a number of additional features on the roadmap such as:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Support for generics &lt;/li&gt;&lt;li&gt;Support for static linking and other script optimizations &lt;/li&gt;&lt;li&gt;Support for additional script APIs and scenarios &lt;/li&gt;&lt;/ul&gt;&lt;img src="http://www.cnblogs.com/RuiLei/aggbug/2032322.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RuiLei/archive/2011/04/28/2032322.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RuiLei/archive/2011/04/27/2031028.html</id><title type="text">C# + Html5 =C3</title><summary type="text">There are some rumors lately about a new Microsoft project called C3 (cloud computing client, or a s...</summary><published>2011-04-27T11:41:00Z</published><updated>2011-04-27T11:41:00Z</updated><author><name>RicoRui</name><uri>http://www.cnblogs.com/RuiLei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RuiLei/archive/2011/04/27/2031028.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RuiLei/archive/2011/04/27/2031028.html"/><content type="html">&lt;p&gt;There are some rumors lately about a new &lt;strong&gt;Microsoft project called &lt;em&gt;&lt;span style="text-decoration: underline;"&gt;C3&lt;/span&gt;&lt;/em&gt; (cloud computing client, or a synonym to C# [the # key is the same as '3' in a QWERTY keyboard])&lt;/strong&gt; which is designed to bring better development experience to web, using Html5, JavaScript and CSS in combination with some Microsoft based technologies (.Net, C#, etc.).&lt;/p&gt;&lt;p&gt;&lt;a href="http://lh4.ggpht.com/__yGAwoTVvQg/TbZ61iPjkFI/AAAAAAAAHZ0/n-_3hzo0be8/s1600-h/Microsoft%20C3%20What%5B7%5D.png"&gt;&lt;img title="Microsoft C3 What" alt="Microsoft C3 What" src="http://lh4.ggpht.com/__yGAwoTVvQg/TbZ62eMIU-I/AAAAAAAAHZ4/XNTJhOFdyi8/Microsoft%20C3%20What_thumb%5B2%5D.png?imgmax=800" border="0" height="215" width="240" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;In very high level, what Microsoft is trying to do with this project is to ease the development experience of building a web application using Html5 by providing better coding tools that will provide things that &lt;span style="text-decoration: underline;"&gt;do not exist today&lt;/span&gt; such as: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;type-safe variables &lt;/li&gt;&lt;li&gt;modular architecture &lt;/li&gt;&lt;li&gt;managed languages such as C# &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Microsoft is constantly trying to keep developers from leaving Visual Studio in favor of other IDE's and a new set of tools for Html5 can definitely bring value to web developers aiming to build features rich applications that will work both online and offline. &lt;/p&gt;&lt;p&gt;I've recently predicted that &lt;a href="http://www.mobilespoon.net/2011/04/by-2013-html5-will-rule-enterprise.html"&gt;by 2013, Html5 based applications will rule the enterprise&lt;/a&gt;, because of all the advantages this technology brings together with being the only true device agnostic technology to date. &lt;/p&gt;&lt;p&gt;&lt;a href="http://lh5.ggpht.com/__yGAwoTVvQg/TbZ63KHOaEI/AAAAAAAAHZ8/jd6M2yVwnco/s1600-h/Html5-MobileSpoon%5B3%5D.png"&gt;&lt;img title="Html5-MobileSpoon" alt="Html5-MobileSpoon" src="http://lh5.ggpht.com/__yGAwoTVvQg/TbZ64LcO2BI/AAAAAAAAHaA/LRu4aHsioOE/Html5-MobileSpoon_thumb%5B1%5D.png?imgmax=800" border="0" height="266" width="321" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Since I've recently participated in a project which involved Html5, mobile apps, offline mode, and an extremely powerful design, I would like to give an example of how web development (for mobile) can change with the introduction of Html5: &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In most web applications, every time you a submit a request, save a change, or goes to another page &amp;ndash; you actually send a request to the server. This is probably the oldest pattern in web, but it also means you &lt;span style="text-decoration: underline;"&gt;need a valid connection to the server 100% of the time.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The request is sent to the server, the server builds the response, generates the page and content, and sends it back to the client. &lt;/p&gt;&lt;p&gt;This is perfect for desktop applications , but what about a smartphone or tablet which is sometimes offline? no connection then, which means the application is stuck. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;This is where Html5 can come to the rescue&lt;/strong&gt;; with a local database, caching of the pages, and some extensive JavaScript code &amp;ndash; you can practically process the requests in the &lt;strong&gt;client side&lt;/strong&gt;, without having to call the server. The requests to the server can be stored in the database as well and can be synced whenever connectivity is back. (In the past, developers tried to minimize the use of JavaScript in the client side due to performance issues &amp;ndash; but as we progress, browsers are now completely capable of doing massive JS work without any issue). &lt;/p&gt;&lt;p&gt;Such kind of pattern (offline storage, message queues, client side processing) was typical for native mobile applications years ago, and now Html5 enables such patterns for mobile web apps as well. The only problem with it is that as a developer &lt;strong&gt;you have to build your product infrastructure to make it work&lt;/strong&gt;. That's a lot of work, and I'm talking from my own experience. Unless&amp;hellip; unless &lt;strong&gt;Microsoft&lt;/strong&gt; comes up with a new technology that will make most of it ready, and thus simplify the entire thing. It will be similar to building a new improved version of Silverlight which is based on Html5, JavaScript and CSS and does not require any ActiveX installation whatsoever. Think how efficient that could be!&lt;/p&gt;&lt;p&gt;Now, if Microsoft can also add to it some C# wrappers so that developers can use C# when they code instead of JavaScript &amp;ndash; that can be even better! Faster coding, type-safe, database, client side processing, a perfect world. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Amazing stuff. &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What's even more amazing is that such a product already exists. &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Thousands are already using it. It's called: &lt;span style="text-decoration: underline;"&gt;Script#&lt;/span&gt; (Script Sharp). &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Oh, and it's free too&amp;hellip;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;And you can read all about it in here: &lt;/strong&gt;&lt;a href="http://projects.nikhilk.net/ScriptSharp"&gt;&lt;strong&gt;Script#&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;---&lt;/p&gt;&lt;p&gt;You can &lt;a href="http://www.zdnet.com/blog/microsoft/beyond-the-browser-microsofts-c3-next-gen-platform-for-html-based-applications/9282"&gt;read more about Microsoft C3 in here&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://www.cnblogs.com/RuiLei/aggbug/2031028.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RuiLei/archive/2011/04/27/2031028.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RuiLei/archive/2011/04/15/2016792.html</id><title type="text">[转]qUIpt：JavaScript Cache Library</title><summary type="text">qUIpt 是一个很小很小的 JavaScript Library，所有原始码也才只有 115 行而已（包括批注），我觉得作者 Mario Heiderich 真是太有创意了，他的原理十分简单，使用的 Cache 方法是将数据储存在 window 对象的 name 属性中 ( window.name )，在这里他是将透过 XHR ( XML Http Request ) 取回的 JavaScript 档案内容储存在 window.name 属性里。通常 window.name 是用在 window.open() 的时候指定的第二的参数，还有当我们在窗体(form)中设定 target 属性的时</summary><published>2011-04-15T02:11:00Z</published><updated>2011-04-15T02:11:00Z</updated><author><name>RicoRui</name><uri>http://www.cnblogs.com/RuiLei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RuiLei/archive/2011/04/15/2016792.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RuiLei/archive/2011/04/15/2016792.html"/><content type="html">&lt;p align="left"&gt;&lt;a target="_blank" href="http://code.google.com/p/quipt/"&gt;qUIpt&lt;/a&gt; 是一个很小很小的 JavaScript Library，所有原始码也才只有 115 行而已（包括批注），我觉得作者 Mario Heiderich 真是太有创意了，他的原理十分简单，使用的 Cache 方法是将数据储存在 window 对象的 name 属性中 ( window.name )，在这里他是将透过 &lt;a target="_blank" href="http://en.wikipedia.org/wiki/XMLHttpRequest"&gt;XHR&lt;/a&gt; ( XML Http Request ) 取回的 JavaScript 档案内容储存在 window.name 属性里。&lt;/p&gt;&lt;p align="left"&gt;通常 window.name 是用在 &lt;a target="_blank" href="http://www.javascriptkit.com/jsref/window.shtml"&gt;window.open()&lt;/a&gt; 的时候指定的第二的参数，还有当我们在窗体(form)中设定 target 属性的时候，这个 target 指定的就是 window.name 的值，但预设来说 window.name 大部分来讲都是空的，所以 qUIpt 就拿这个属性来做额外的快取(Cache)用途。&lt;/p&gt;&lt;p align="left"&gt;qUIpt 基本的运作流程如下：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;首先，他先检查你的 window.name 是否有资料。 &lt;/li&gt;&lt;li&gt;如果 window.name 是空的，就透过 &lt;a target="_blank" href="http://en.wikipedia.org/wiki/XMLHttpRequest"&gt;XHR&lt;/a&gt; 动态下载 JavaScript 档案，并将档案内容储存在 window.name 属性中。 &lt;/li&gt;&lt;li&gt;如果使用者第一次造访你的网页，或从其他网站进来的，就会先将 window.name 给清空，并重新下载 JS 档回来。 &lt;/li&gt;&lt;li&gt;等使用者下次造访你的网页（例如连到下一页），就直接用 eval() 函示将 window.name 的 JS 读出执行，这样所有对象都重新被加载回来了，完全不需要重新下载 JavaScript 檔。&lt;/li&gt;&lt;/ul&gt;&lt;p align="left"&gt;底下这段 code 说明了这个运作流程：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;*&lt;br /&gt; * some security checks to avoid arbitrary off-site&lt;br /&gt; * self.name poisoning&lt;br /&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(document.referrer &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;||&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;   document.referrer.match(&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;\w+:\/\/[^\/]+&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;)[&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #000000;"&gt;!==&lt;/span&gt;&lt;span style="color: #000000;"&gt; location.href.match(&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;\w+:\/\/[^\/]+&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;)[&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;]) {&lt;br /&gt;    self.name &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;*&lt;br /&gt; * let's start&lt;br /&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #000000;"&gt;self.name.length) {&lt;br /&gt;    quipt_load();&lt;br /&gt;} &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt; {&lt;br /&gt;    quipt_eval();&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p align="left"&gt;原理就是这么简单，你可以下载看原始码回来看，才几行而已，也许可以激发你一些更有创意的想法。&lt;/p&gt;&lt;p align="left"&gt;由于此项目十分的阳春，毕竟是第一版嘛，经我个人测试之后发现只有 Firefox 能用，IE 目前是无法执行的，所以我小修了一下程序把一些仅支持 Firefox 的语法给修正了，底下的 code 应该可以运作于 Firefox 与 IE 7 ( 其他版本的 IE 我没测试过 )。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;*&lt;br /&gt; * quipt - caching in the name of performance&lt;br /&gt; *&lt;br /&gt; * @author  Mario Heiderich &amp;lt;mario.heiderich@gmail.com&amp;gt; , Will 保哥 &amp;lt;doggy.huang@gmail.com&amp;gt;&lt;br /&gt; * @license LGPL&lt;br /&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt; quipt_init() {&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;*&lt;br /&gt;     * the config object&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; quipt_config &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; {&lt;br /&gt;        &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;*&lt;br /&gt;         * the method to call when loading is done&lt;br /&gt;         *&lt;br /&gt;         * hint: just set it to false if not needed&lt;br /&gt;         &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;starter&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; : &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;my_init_function&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;br /&gt;        &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;*&lt;br /&gt;         * add files to load to this array&lt;br /&gt;         * &lt;br /&gt;         * hint: you can add as many files as you wish - as long as they &lt;br /&gt;         *       come from the same domain. quipt also supports proxied &lt;br /&gt;         *       off-domain scripts.&lt;br /&gt;         &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;files&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;   : [&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;jquery-1.2.6.min.js&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;dummy-js-file-01.js&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;dummy-js-file-02.js&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        ],&lt;br /&gt;        &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;*&lt;br /&gt;         * don't touch this - private stuff! else!&lt;br /&gt;         &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;status&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; : &lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; quipt_code &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; [];&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;*&lt;br /&gt;     * the loader method - it monitors the status of the ressource &lt;br /&gt;     * fetching and kick-starts the XHR method&lt;br /&gt;     * &lt;br /&gt;     &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; quipt_load &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt;() {&lt;br /&gt;        quipt_request();&lt;br /&gt;    }   &lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;*&lt;br /&gt;     * this method just fires XHR requests against the files given in the &lt;br /&gt;     * config literal until all ressources are fetched&lt;br /&gt;     * &lt;br /&gt;     &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; quipt_request &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt;() {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt; {&lt;br /&gt;                console.log(&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;loading ressources from filesystem&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;            } &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt;&lt;span style="color: #000000;"&gt;(e) {}&lt;br /&gt;            &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; x &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; XMLHttpRequest();&lt;br /&gt;            x.open(&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;GET&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, quipt_config.files[quipt_config.status], &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;            x.send(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;            x.onreadystatechange &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt;() {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(x.readyState &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt; x.status &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;200&lt;/span&gt;&lt;span style="color: #000000;"&gt;) {&lt;br /&gt;                    quipt_code.push(x.responseText);&lt;br /&gt;                    quipt_config.status&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;                    self.name &lt;/span&gt;&lt;span style="color: #000000;"&gt;+=&lt;/span&gt;&lt;span style="color: #000000;"&gt; x.responseText &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;\n&lt;/span&gt;&lt;span style="color: #000000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(quipt_config.status &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; quipt_config.files.length) {&lt;br /&gt;                        quipt_request();&lt;br /&gt;                    } &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt; {&lt;br /&gt;                        quipt_eval();&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }   &lt;br /&gt;            &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;*&lt;br /&gt;         * the eval method - which is called if window.name contains &lt;br /&gt;         * the right data&lt;br /&gt;         &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; quipt_eval &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt;() {&lt;br /&gt;            self.eval(self.name);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(quipt_config.starter) {&lt;br /&gt;                self[quipt_config.starter]();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;*&lt;br /&gt;         * some security checks to avoid arbitrary off-site&lt;br /&gt;         * self.name poisoning&lt;br /&gt;         &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(document.referrer &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;||&lt;/span&gt;&lt;span style="color: #000000;"&gt; document.referrer.match(&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;\w+:\/\/[^\/]+&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;)[&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #000000;"&gt;!==&lt;/span&gt;&lt;span style="color: #000000;"&gt; location.href.match(&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;\w+:\/\/[^\/]+&lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt;)[&lt;/span&gt;&lt;span style="color: #000000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;]) {&lt;br /&gt;            self.name &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;''&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;span style="color: #008000;"&gt;*&lt;br /&gt;         * let's start&lt;br /&gt;         &lt;/span&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;!&lt;/span&gt;&lt;span style="color: #000000;"&gt;self.name.length) {&lt;br /&gt;            quipt_load();&lt;br /&gt;        } &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt; {&lt;br /&gt;            quipt_eval();&lt;br /&gt;        }&lt;br /&gt;    })();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/RuiLei/aggbug/2016792.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RuiLei/archive/2011/04/15/2016792.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RuiLei/archive/2011/03/02/1969358.html</id><title type="text">Project Calculation Rules</title><summary type="text"/><published>2011-03-02T14:38:00Z</published><updated>2011-03-02T14:38:00Z</updated><author><name>RicoRui</name><uri>http://www.cnblogs.com/RuiLei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RuiLei/archive/2011/03/02/1969358.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RuiLei/archive/2011/03/02/1969358.html"/><content type="html">&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/RuiLei/201103/201103022236519121.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/RuiLei/201103/201103022237164070.png" width="856" height="404" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/RuiLei/201103/201103022237339746.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/RuiLei/201103/201103022237563366.png" width="842" height="454" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RuiLei/aggbug/1969358.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RuiLei/archive/2011/03/02/1969358.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RuiLei/archive/2011/03/02/1969220.html</id><title type="text">Proposal for Delayed Script Execution</title><summary type="text">Presently, HTML5 documents are limited in the number of ways a script can be loaded: By default, a &lt;script&gt; tag immediately begins to download an external JavaScript file and executes when the downloa...</summary><published>2011-03-02T12:01:00Z</published><updated>2011-03-02T12:01:00Z</updated><author><name>RicoRui</name><uri>http://www.cnblogs.com/RuiLei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RuiLei/archive/2011/03/02/1969220.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RuiLei/archive/2011/03/02/1969220.html"/><content type="html">&lt;p&gt;&lt;strong&gt;Presently, HTML5 documents are limited in the number of ways a script can be loaded: &lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;By default, a &amp;lt;script&amp;gt; tag immediately begins to download an external JavaScript file and executes when the download is complete. Multiple &amp;lt;script&amp;gt; tags placed in order will always execute in order, blocking further execution and resource downloads until each script is executed. User agents may download the external files in parallel but always execute the scripts in order. &lt;/li&gt;    &lt;li&gt;When a &amp;lt;script&amp;gt; tag is marked with defer, the download of the external file begins immediately but execution is deferred until after the DOMContentLoaded event and before the load the event. Deferred scripts do not block but do preserve the order of execution. &lt;/li&gt;    &lt;li&gt;When a &amp;lt;script&amp;gt; tag is marked with async, the download of the external file begins immediately and execution occurs as soon as the file is completely downloaded. An async script does not block other resources from being downloaded. Multiple async scripts do not preserve the order in which they are specified, instead each executes as soon as it is completely downloaded. This occurs before the load event. &lt;/li&gt; &lt;/ol&gt;  &lt;br /&gt;Each approach solves a very specific problem but no approach solves them all. For instance, there is no way to download a JavaScript file and delay it’s execution until a later point in time that can be defined by the developer (deferred scripts are the closest, but the execution point is predetermined and unchangeable).   &lt;p&gt;&lt;strong&gt;Goal&lt;/strong&gt;&lt;/p&gt; This proposal is intended to describe a mechanism whereby JavaScript can be included in an HTML page, either via inline script or external file, and the parsing and execution is delayed until a time determined by the developer.   &lt;p&gt;&lt;strong&gt;Rationale&lt;/strong&gt;&lt;/p&gt; Currently, there are various script loaders such as LAB.js and ControlJS that seek to alter the way that scripts are loaded onto a page. Each script loader operates on their own theory of how best to load script files, whether to optimize for parallel downloads or delay execution until a later point in time. After some consideration, it seems that developer-controlled execution time of JavaScript is a minimal feature that would enable parallel downloads as well as other execution paradigms.   &lt;p&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;The functionality must be exposed to feature detection techniques. &lt;/li&gt;    &lt;li&gt;Avoid double downloads of a single file. &lt;/li&gt;    &lt;li&gt;Don’t inhibit the ability to download files in parallel and execute in any arbitrary order. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Proposal Summary&lt;/strong&gt;&lt;/p&gt; Allow scripts to be marked as “preload”, indicating that the script should be downloaded (in the case of external scripts) but not executed immediately. Since the script isn’t being executed, it must not block other page resources from being downloaded (which would allow parallel downloading). Developers may instruct the script to execute at a later point in time.   &lt;br /&gt;This proposal is based largely on the Internet Explorer implementation for dynamic script nodes. In that implementation, the external script file begins to download as soon as src is assigned but the script is not executed until the node is added to the document. This is a nice feature but suffers from several drawbacks:   &lt;ul&gt;   &lt;li&gt;No way to feature detect that this behavior happens (as opposed to other browsers that only begin to download when the script node is added to the document). &lt;/li&gt;    &lt;li&gt;No way to determine when the script is downloaded but not ready for execution. &lt;/li&gt; &lt;/ul&gt;  &lt;br /&gt;This proposal seeks to build upon this behavior to fix these shortcomings.   &lt;p&gt;&lt;strong&gt;Proposal Details&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;HTML Usage&lt;/strong&gt;&lt;/p&gt; There is no HTML usage for the preload attribute. If an attribute named preload is included in an HTML &amp;lt;script&amp;gt; tag, it must be treated as an unknown attribute.   &lt;p&gt;&lt;strong&gt;JavaScript Usage&lt;/strong&gt;&lt;/p&gt; Scripts may be dynamically loaded from JavaScript by creating a &amp;lt;script&amp;gt; element and setting its preload property to true (default value is false). Example:   &lt;br /&gt;  &lt;span class="kwrd"&gt;var&lt;/span&gt; script = document.createElement(“script”); &lt;br/&gt;script.preload = &lt;span class="kwrd"&gt;true&lt;/span&gt;; &lt;br/&gt;script.src = “foo.js”; &lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;When the src attribute is assigned, the JavaScript file should be downloaded per user agent default and stored in the appropriate user agent cache(s) but not executed. User agents may background parse or compile the script in preparation for execution but must not execute the code until instructed to do so. &lt;br /&gt;In order to execute the code, the script node must be added to the document: &lt;br /&gt;document.body.appendChild(script); &lt;br /&gt;Upon adding into the document, the contents of the external file referenced by the &amp;lt;script&amp;gt; element must be executed synchronously in the global scope per usual user agent behavior. &lt;p&gt;&lt;strong&gt;Additional HTMLScriptElement Members&lt;/strong&gt;&lt;/p&gt;In order to accurately detect and react to changes in script state due to this proposal, several changes and additions are necessary to the HTMLScriptElement. &lt;br /&gt;&lt;span class="kwrd"&gt;interface&lt;/span&gt; HTMLScriptElement : HTMLElement { &lt;br/&gt;attribute DOMString src; &lt;br/&gt;attribute boolean async; &lt;br/&gt;attribute boolean defer; &lt;br/&gt;attribute DOMString type; &lt;br/&gt;attribute DOMString charset; &lt;br/&gt;attribute DOMString text; &lt;br/&gt;attribute boolean preload; &lt;br/&gt;}; &lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;br /&gt;The only change is the introduction of a preload property. As discussed earlier, setting this to true prior to the src being set puts the script into preload mode, where code may be downloaded but not executed. &lt;br /&gt;The default value for preload is false. When preload is false, the user agent may download and execute the external script according to its normal behavior. &lt;br /&gt;For feature detection, a developer may determine if this proposal has been implemented by detecting the preload property: &lt;br /&gt;&lt;p&gt;&lt;strong&gt;  &lt;span class="kwrd"&gt;var&lt;/span&gt; preloadSupported = (&lt;span class="kwrd"&gt;typeof&lt;/span&gt; &lt;br/&gt;document.createElement(“script”).preload == “boolean”);   &lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;Changes to HTMLScriptElement Events&lt;/strong&gt;&lt;/p&gt;HTML5 defines two events: load and error. The load event fires on preload scripts only after the script has been downloaded and executed; the error event functions exactly the same for preload scripts. &lt;br /&gt;Additionally, In order to fulfill the requirements of this proposal, it’s necessary to introduce a new event for HTMLScriptElement. The preload event fires with a preload script has been completely loaded and is ready for execution. You can therefore determine when a script has been preloaded using the following: &lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; script = document.createElement(“script”); &lt;br/&gt;script.preload = &lt;span class="kwrd"&gt;true&lt;/span&gt;; &lt;br/&gt;script.src = “foo.js”; &lt;br/&gt;script.onpreload = &lt;span class="kwrd"&gt;function&lt;/span&gt;(&lt;span class="kwrd"&gt;event&lt;/span&gt;){ &lt;br/&gt;document.head.appendChild(script); &lt;br/&gt;}; &lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;To ensure a script has been preloaded properly, you should also listen for the error event. &lt;p&gt;&lt;strong&gt;Additional Behaviors&lt;/strong&gt;&lt;/p&gt;Since preloaded scripts alter the behavior of dynamic scripts slightly, there are a few edge cases to consider. &lt;ul&gt;  &lt;li&gt;Any attempt to set the text property on a dynamic script element already marked with preload is ignored. If the preload property is set to true after the text property is set to a value, then the preload property is ignored and remains false. &lt;/li&gt;  &lt;li&gt;If cloneNode() is called on a script marked as preload, then the cloned script node cannot be executed. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Possible Augmentation&lt;/strong&gt;&lt;/p&gt;One possible augmentation of this proposal is that preload automatically be set to true for script elements created using JavaScript, thus allowing developers to opt-out of this functionality by setting to false rather than opt-in. This likely would work since this is the default behavior in Internet Explorer already. &lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Mimic deferred scripts&lt;/strong&gt;&lt;/p&gt;The following is an example of using this proposal’s functionality to simulate deferred scripts in JavaScript. Note that real deferred scripts fire before DOMContentLoaded, while this will fire during. &lt;br /&gt;&lt;p&gt;&lt;strong&gt;  (&lt;span class="kwrd"&gt;function&lt;/span&gt;(){ &lt;br/&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; domLoaded = &lt;span class="kwrd"&gt;false&lt;/span&gt;, &lt;br/&gt;script = document.createElement(“script”); &lt;br/&gt;script.preload = &lt;span class="kwrd"&gt;true&lt;/span&gt;; &lt;br/&gt;script.onpreload = &lt;span class="kwrd"&gt;function&lt;/span&gt;(){ &lt;br/&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt;(domLoaded){ &lt;span class="rem"&gt;//just in case it’s too late &lt;/span&gt;&lt;br/&gt;document.body.appendChild(script); &lt;br/&gt;} &lt;span class="kwrd"&gt;else&lt;/span&gt; { &lt;br/&gt;script._ready = &lt;span class="kwrd"&gt;true&lt;/span&gt;; &lt;br/&gt;} &lt;br/&gt;}; &lt;br/&gt;script.src = “foo.js”; &lt;br/&gt;document.addEventListener(“DOMContentLoaded”, &lt;span class="kwrd"&gt;function&lt;/span&gt;(){ &lt;br/&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (script._ready){ &lt;br/&gt;document.body.appendChild(script); &lt;br/&gt;} &lt;br/&gt;domLoaded = &lt;span class="kwrd"&gt;true&lt;/span&gt;; &lt;br/&gt;}, &lt;span class="kwrd"&gt;false&lt;/span&gt;); &lt;br/&gt;})();   &lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;Script Loader with Parallelization&lt;/strong&gt;&lt;/p&gt;The following is an example of a script loader that allows scripts to download in parallel but execute in the order in which they are specified. This is done by creating preload scripts for each external JavaScript file and waiting until they are all loaded. Once all are loaded, a loop is used to execute each in order. &lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; ScriptLoader = (&lt;span class="kwrd"&gt;function&lt;/span&gt;(){ &lt;br/&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; batches = []; &lt;br/&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; handlePreload(batchId, scriptId){ &lt;br/&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; batch = batches[batchId], &lt;br/&gt;script = batch.scripts[scriptId]; &lt;br/&gt;batch.loaded++; &lt;br/&gt;&lt;span class="rem"&gt;//all scripts are now loaded &lt;/span&gt;&lt;br/&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (batch.loaded == batch.scripts.length){ &lt;br/&gt;&lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; i=0, len=batch.scripts.length; i&amp;lt;len; i++){ &lt;br/&gt;document.body.appendChild(batch.scripts[i].scriptNode); &lt;br/&gt;} &lt;br/&gt;batch.success(); &lt;br/&gt;} &lt;br/&gt;} &lt;br/&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; handleError(batchId, scriptId){ &lt;br/&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; batch = batches[batchId]; &lt;br/&gt;batch.error() &lt;br/&gt;} &lt;br/&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; { &lt;br/&gt;loadScripts: &lt;span class="kwrd"&gt;function&lt;/span&gt;(urls, successCallback, &lt;br/&gt;errorCallback){ &lt;br/&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; batch = { &lt;br/&gt;scripts: [], &lt;br/&gt;success: successCallback, &lt;br/&gt;error: errorCallback, &lt;br/&gt;id: batches.length, &lt;br/&gt;loaded: 0 &lt;br/&gt;}, &lt;br/&gt;i=0, &lt;br/&gt;len = urls.length, &lt;br/&gt;script; &lt;br/&gt;batches.push(batch); &lt;br/&gt;&lt;span class="kwrd"&gt;while&lt;/span&gt;(i &amp;lt; len){ &lt;br/&gt;script = document.createElement(&lt;span class="str"&gt;&amp;quot;script&amp;quot;&lt;/span&gt;); &lt;br/&gt;script.type = &lt;span class="str"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;; &lt;br/&gt;script.preload = &lt;span class="kwrd"&gt;true&lt;/span&gt;; &lt;br/&gt;script.onpreload = (&lt;span class="kwrd"&gt;function&lt;/span&gt;(scriptId){ &lt;br/&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;function&lt;/span&gt;(){ &lt;br/&gt;handlePreload(batch.id, scriptId); &lt;br/&gt;}; &lt;br/&gt;})(i); &lt;br/&gt;script.onerror = (&lt;span class="kwrd"&gt;function&lt;/span&gt;(scriptId){ &lt;br/&gt;&lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;function&lt;/span&gt;(){ &lt;br/&gt;handleError(batch.id, scriptId); &lt;br/&gt;}; &lt;br/&gt;})(i); &lt;br/&gt;batch.scripts.push({scriptNode: script, id: i}); &lt;br/&gt;script.src = urls[i]; &lt;br/&gt;document.head.appendChild(script); &lt;br/&gt;i++; &lt;br/&gt;} &lt;br/&gt;} &lt;br/&gt;}; &lt;br/&gt;})(); &lt;br/&gt;&lt;span class="rem"&gt;//usage &lt;/span&gt;&lt;br/&gt;ScriptLoader.loadScripts([“foo.js”, “bar.js”], &lt;br/&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt;(){ &lt;br/&gt;foo.init(); &lt;br/&gt;}, &lt;br/&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt;(){ &lt;br/&gt;alert(“On no!”); &lt;br/&gt;} &lt;br/&gt;);&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://www.cnblogs.com/RuiLei/aggbug/1969220.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RuiLei/archive/2011/03/02/1969220.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/RuiLei/archive/2011/01/10/1932411.html</id><title type="text">10个有用的网站访问分析工具</title><summary type="text">几乎所有的网站,不论是门户网站还是个人博客,都少不了一些网站访问分析,最简单的就是一个计数器!这对于分析网站的访问人群等等指数具有十分重要的意义,对于广告的投放也十分重要!下面是10个常用的网站分析工具!goingup!ClickyGoogle AnalyticsW3CounterWoopraW3PerlPiwikTraceWatchSnoop</summary><published>2011-01-10T14:54:00Z</published><updated>2011-01-10T14:54:00Z</updated><author><name>RicoRui</name><uri>http://www.cnblogs.com/RuiLei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/RuiLei/archive/2011/01/10/1932411.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/RuiLei/archive/2011/01/10/1932411.html"/><content type="html">&lt;p&gt;&lt;strong&gt;几乎所有的网站,不论是门户网站还是个人博客,都少不了一些网站访问分析,最简单的就是一个计数器!这对于分析网站的访问人群等等指数具有十分重要的意义,对于广告的投放也十分重要!&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下面是10个常用的网站分析工具!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.jawstats.com/"&gt;&lt;img src="http://webdesignledger.com/wp-content/uploads/2010/03/website_analysis_4.jpg" alt="website analysis 4 10个有用的网站访问分析工具" title="10个有用的网站访问分析工具" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.goingup.com/"&gt;goingup!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.goingup.com/"&gt;&lt;img src="http://webdesignledger.com/wp-content/uploads/2010/03/website_analysis_5.jpg" alt="website analysis 5 10个有用的网站访问分析工具" title="10个有用的网站访问分析工具" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.getclicky.com/"&gt;Clicky&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.getclicky.com/"&gt;&lt;img src="http://webdesignledger.com/wp-content/uploads/2010/03/website_analysis_6.jpg" alt="website analysis 6 10个有用的网站访问分析工具" title="10个有用的网站访问分析工具" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.google.com/analytics/"&gt;&lt;img src="http://webdesignledger.com/wp-content/uploads/2010/03/website_analysis_1.jpg" alt="website analysis 1 10个有用的网站访问分析工具" title="10个有用的网站访问分析工具" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.w3counter.com/"&gt;W3Counter&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.w3counter.com/"&gt;&lt;img src="http://webdesignledger.com/wp-content/uploads/2010/03/website_analysis_2.jpg" alt="website analysis 2 10个有用的网站访问分析工具" title="10个有用的网站访问分析工具" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.woopra.com/"&gt;Woopra&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.woopra.com/"&gt;&lt;img src="http://webdesignledger.com/wp-content/uploads/2010/03/website_analysis_7.jpg" alt="website analysis 7 10个有用的网站访问分析工具" title="10个有用的网站访问分析工具" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.w3perl.com/index.html"&gt;W3Perl&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.w3perl.com/index.html"&gt;&lt;img src="http://webdesignledger.com/wp-content/uploads/2010/03/website_analysis_3.jpg" alt="website analysis 3 10个有用的网站访问分析工具" title="10个有用的网站访问分析工具" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.piwik.org/"&gt;Piwik&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.piwik.org/"&gt;&lt;img src="http://webdesignledger.com/wp-content/uploads/2010/03/website_analysis_8.jpg" alt="website analysis 8 10个有用的网站访问分析工具" title="10个有用的网站访问分析工具" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.tracewatch.com/"&gt;TraceWatch&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.tracewatch.com/"&gt;&lt;img src="http://webdesignledger.com/wp-content/uploads/2010/03/website_analysis_9.jpg" alt="website analysis 9 10个有用的网站访问分析工具" title="10个有用的网站访问分析工具" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://report.reinvigorate.net/snoop"&gt;Snoop&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://report.reinvigorate.net/snoop"&gt;&lt;img src="http://webdesignledger.com/wp-content/uploads/2010/03/website_analysis_10.jpg" alt="website analysis 10 10个有用的网站访问分析工具" title="10个有用的网站访问分析工具" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/RuiLei/aggbug/1932411.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/RuiLei/archive/2011/01/10/1932411.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
