jquery的一些优化手段(转)

Posted by & filed under Uncategorized.

缓存变量 DOM遍历是昂贵的,所以尽量将会重用的元素缓存。

避免全局变量 jQuery与javascript一样,一般来说,最好确保你的变量在函数作用域内。

使用匈牙利命名法 在变量前加$前缀,便于识别出jQuery对象。

使用 Var 链(单 Var 模式) 将多条var语句合并为一条语句,我建议将未赋值的变量放到后面。

请使用’On’ 在新版jQuery中,更短的 on(“click”) 用来取代类似 click() 这样的函数。在之前的版本中 on() 就是 bind()。自从jQuery 1.7版本后,on() 附加事件处理程序的首选方法。然而,出于一致性考虑,你可以简单的全部使用 Read more […]

js的一些优化手段(转)

Posted by & filed under Uncategorized.

1.使用 === 代替 == JavaScript 使用2种不同的等值运算符:===|!== 和 ==|!=,在比较操作中使用前者是最佳实践。 “如果两边的操作数具有相同的类型和值,===返回true,!==返回false。”——JavaScript:语言精粹 然而,当使用==和!=时,你可能会遇到类型不同的情况,这种情况下,操作数的类型会被强制转换成一样的再做比较,这可能不是你想要的结果。 2.Eval=邪恶 起初不太熟悉时,“eval”让我们能够访问JavaScript的编译器(译注:这看起来很强大)。从本质上讲,我们可以将字符串传递给eval作为参数,而执行它。 这不仅大幅降低脚本的性能(译注:JIT编译器无法预知字符串内容,而无法预编译和优化),而且这也会带来巨大的安全风险,因为这样付给要执行的文本太高的权限,避而远之。 3.省略未必省事 从技术上讲,你可以省略大多数花括号和分号。大多数浏览器都能正确理解下面的代码:

然后,如果像下面这样:

有人可能会认为上面的代码等价于下面这样:

不幸的是,这种理解是错误的。实际上的意思如下:

你可能注意到了,上面的缩进容易给人花括号的假象。无可非议,这是一种可怕的实践,应不惜一切代价避免。仅有一种情况下,即只有一行的时候,花括号是可以省略的,但这点是饱受争议的。

未雨绸缪 很可能,有一天你需要在if语句块中添加更多的语句。这样的话,你必须重写这段代码。底线——省略是雷区。 4.使用JSLint JSLint是由大名鼎鼎的道格拉斯(Douglas Read more […]

跨浏览器开发工作小结(转)

Posted by & filed under Uncategorized.

1.eval(idName) 【问题描述】:IE、safari、Chrome浏览器下都可以使用eval(idName)或getElementById(idName)来取得id为idName的HTML对象;firefox下只能使用getElementById(idName)来取得id为idName的HTML对象. 【兼容办法】:统一用getElementById(“idName”)来取得id为idName的HTML对象。 2.ActiveXObject 【问题描述】:IE下支持用var obj = new ActiveXObject()?的方式创建对象,但其它浏览器都会提示ActiveXObject对象未定义。 【兼容办法】: (1)在使用new ActiveXObject()之前先判断浏览器是否支持ActiveXObject对象,以创建AJAX对象为例:

(2)使用jQuery封装的ajax方法来创建对象,以创建AJAX对象为例(推荐):

3.XML操作 【问题描述】:通常装载xml文档使用ActiveXObject对象,但除非IE外,其它浏览器都不支持此方法。XML文档操作,IE和其它浏览器也存在不同,通常取XML对象的XML文本的方法是xml.documentElement.xml,但xml属性只有IE支持,其它浏览器均不支持。查找节点是常用的方法有selectNodes和selectSingleNode,这两个方法也只有IE支持,其它浏览器需要自己扩展。 【兼容办法】 (1)装载XML文档:用$.ajax(),参考jquery帮助文档 (2)xml对象转字符串,如:

(3)字符串转xml对象,如:

(4)查找结点:可以用JQUERY同的find方法来查找结点,如:

或者用原型扩展方法为XML对象添加selectNodes和selectSingleNode方法,扩展方法如下:

4.window.execScript() 【问题描述】:只有IE浏览器支持execScript方法,其它的都不支持。但所有浏览器都支持window.eval()方法。 【兼容办法】:用window.eval()方法代替window.execScript()。如

5.window.createPopup() 【问题描述】:创建一个弹出窗口的方法,IE支持此方法,Safari、FireFox、Chrome都不支持,使用时会提示createPopup方法未定义。 【兼容办法】:可用如下方法为window对象添加createPopup方法。

6.getYear()方法 【问题描述】:如下代码:

在IE中得到的日期是”2011″,在Firefox中看到的日期是”111″,主要是因为在?Firefox?里面getYear返回的是?”当前年份-1900″?的值。 【兼容办法】:解决办法是加上对年份的判断,如:

也可以通过?getFullYear Read more […]

(转)C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)

Posted by & filed under Uncategorized.

之前写过一篇博客是关于各种数据库数据类型的介绍 http://dev.conris.com/?p=1429 现在看到了一篇C#和各种数据库类型的对应关系 感觉还不错 一、C# vs SQLite: C# SQLite 字段名 类型 库类型 GetFieldType(#) 转换 备注 F_BOOL bool BIT NOT NULL Boolean F_BOOL_NULL bool? BIT Boolean F_SBYTE sbyte INT8 NOT NULL SByte sbyte_ F_SBYTE_NULL sbyte? INT8 SByte sbyte_ F_BYTE byte UINT8 NOT NULL Byte F_BYTE_NULL byte? UINT8 Byte F_SHORT short INT16 NOT NULL Int16 F_SHORT_NULL short? INT16 Int16 F_USHORT ushort UINT16 NOT NULL UInt16 ushort_ F_USHORT_NULL ushort? UINT16 UInt16 ushort_ F_INT int INT32 NOT NULL Int32 F_INT_NULL int? INT32 Int32 F_UINT uint UINT32 Read more […]

jquery操作与原生js操作 部分(转)

Posted by & filed under Uncategorized.

注意 有些操作需要浏览器支持HTML5 1 选择器

  2 DOM

  3 CSS

 

“TAFFY DB”可以将json当数据库一样操作的javascript lib(转)

Posted by & filed under Uncategorized.

前言 Json数据简单的增删改查 优点 Technorati 标记: Json,Json查询,Javascript DB,TAFFY 使用的是BSD开源协议,不用担心商业使用限制。 一直在有人进行更新,并且不和其他框架(如Jquery,YUI,Dojo等)冲突 功能齐全——增删改查、排序等等都有了。 小巧,压缩后只有17k大小。 配合Json.net,可以方便的进行序列化和反序列化,工作量减少了不少   TAFFY DB 基本信息 项目主页:http://taffydb.com/ 托管地址:https://github.com/typicaljoe/taffydb 最新更新:2013年2月 类库版本:2.7 许可协议:BSD 具体操作示例 英文好的兄弟们可以直接浏览:http://www.taffydb.com/workingwithdata 先引用类库

初始化方式示例: // 创建空白数据库 var db Read more […]

使用NuGet管理项目类库引用(转)

Posted by & filed under Uncategorized.

NuGet 是微软开发平台(包括.NET平台)的一个包管理器,这里只介绍和.NET相关的NuGet Visual Studio扩展客户端, 在VS2010 ,VS2012 ,VS2013中默认集成了NuGet 工具, 有了它,管理项目中的第三方库变得异常简单和便捷。 NuGet 提供用户两种交互方式, 一是用户界面, 二是powershell命令行. 从vs的工具->包管理器 我们可以看到这两个选项 NuGet用户界面 NuGet命令行 下面主要介绍命令行的使用:  Get-Help nuget  , 打印NuGet包含的命令, 比如获得项目中引用的库文件Get-Package, 安装,卸载,更新库 Install/Uninstall/Update-Package等 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 PM> Read more […]

防止表单重复提交的几种策略(转)

Posted by & filed under Uncategorized.

表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次。 点击刷新按钮。 使用浏览器后退按钮重复之前的操作,导致重复提交表单。 使用浏览器历史记录重复提交表单。 浏览器重复的HTTP请求。 几种防止表单重复提交的方法 禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。 我之前的文章曾说过用一些Jquery插件效果不错。 Post/Redirect/Get模式。在提交后执行页面重定向,这就是所谓的Post-Redirect-Get Read more […]

你真的已经搞懂JavaScript了吗(转)

Posted by & filed under Uncategorized.

题目一:

  题目二:

  题目三:

  题目四:

  题目五:

答案: 题目1

代码含义:如果window不包含属性a,就声明一个变量a,然后赋值为1。 你可能认为alert出来的结果是1,然后实际结果是“undefined”。要了解为什么,需要知道JavaScript里的3个概念。 首先,所有的全局变量都是window的属性,语句 var a = 1;等价于window.a = 1; 你可以用如下方式来检测全局变量是否声明:

第二,所有的变量声明都在范围作用域的顶部,看一下相似的例子:

此时,尽管声明是在alert之后,alert弹出的依然是true,这是因为JavaScript引擎首先会扫墓所有的变量声明,然后将这些变量声明移动到顶部,最终的代码效果是这样的:

这样看起来就很容易解释为什么alert结果是true了。 第三,你需要理解该题目的意思是,变量声明被提前了,但变量赋值没有,因为这行代码包括了变量声明和变量赋值。 你可以将语句拆分为如下代码:

当变量声明和赋值在一起用的时候,JavaScript引擎会自动将它分为两部以便将变量声明提前,不将赋值的步骤提前是因为他有可能影响代码执行出不可预期的结果。 所以,知道了这些概念以后,重新回头看一下题目的代码,其实就等价于:

这样,题目的意思就非常清楚了:首先声明a,然后判断a是否在存在,如果不存在就赋值为1,很明显a永远在window里存在,这个赋值语句永远不会执行,所以结果是undefined。 提前这个词语显得有点迷惑了,你可以理解为:预编译。   题目2

这个题目看起来比实际复杂,alert的结果是1;这里依然有3个重要的概念需要我们知道。 首先,在题目1里我们知道了变量声明在进入执行上下文就完成了;第二个概念就是函数声明也是提前的,所有的函数声明都在执行代码之前都已经完成了声明,和变 量声明一样。澄清一下,函数声明是如下这样的代码:

如下不是函数,而是函数表达式,相当于变量赋值:

澄清一下,函数表达式没有提前,就相当于平时的变量赋值。 第三需要知道的是,函数声明会覆盖变量声明,但不会覆盖变量赋值,为了解释这个,我们来看一个例子:

尽快变量声明在下面定义,但是变量value依然是function,也就是说这种情况下,函数声明的优先级高于变量声明的优先级,但如果该变量value赋值了,那结果就完全不一样了:

该value赋值以后,变量赋值初始化就覆盖了函数声明。 重新回到题目,这个函数其实是一个有名函数表达式,函数表达式不像函数声明一样可以覆盖变量声明,但你可以注意到,变量b是包含了该函数表达式,而该函数表达式的名字是a;不同的浏览器对a这个名词处理有点不一样,在IE里,会将a认为函数声明,所以它被变量初始化覆盖了,就是说如果调用a(–x)的话就会出错,而其它浏览器在允许在函数内部调用a(–x),因为这时候a在函数外面依然是数字。基本上,IE里调用b(2)的时候会出错,但其它浏览器则返回undefined。 理解上述内容之后,该题目换成一个更准确和更容易理解的代码应该像这样:

这样的话,就很清晰地知道为什么alert的总是1了。   题目3

这个题目比较简单:即函数声明和变量声明的关系和影响,遇到同名的函数声明,不会重新定义   题目4

关于这个题目,ECMAsCRIPT 262-3的规范有解释的。 活动对象是在进入函数上下文时刻被创建的,它通过函数的arguments属性初始化。arguments属性的值是Arguments对象. 关于 Read more […]

VS2010 上面搭建Python环境(转)

Posted by & filed under Uncategorized.

VS2010 上面搭建Python环境 1、下载PTVS 2.0 Alpha VS 2010 ,官网:http://pytools.codeplex.com/ 2、直接安装此插件 3、运行VS2010,新建工程,出现: 单击OK,即可。 4、出现: 5、运行此程序,会弹出: 这个是因为没有安装Python解释器的缘故。 6、安装Python解释器。 再次运行程序,如若还是出现第5步,则需要按照下图配置环境:(在VS中 Tool->Option->Python Tools->Inter Options) 7、运行程序可以看到: Read more […]