2012年6月30日
摘要:
正则表达式可以:•测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证•替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字•根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字正则表达式语法一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。创建正则表达式Js代码varre=newRe
阅读全文
posted @ 2012-06-30 14:07
【艾伦】
阅读(82445)
推荐(70)
摘要:
realazy在blog上给出了一个JavaScript Memoization的实现,Memoization就是函数返回值的缓存,比如一个函数参数与返回结果一一对应的hash列表,wiki上其实也有详细解释,我不细说了,只讨论一下具体实现的问题,realazy文中的代码有一些问题,比如直接用参数拼接成的字符串作为查询缓存结果的key,如果参数里包括对象或数组的话,就很难保证唯一的key,还有1楼评论里提到的:[221,3]和[22,13]这样的参数也无法区分。那么来改写一下,首先还是用hash表来存放缓存数据:functionMemoize(fn){ varcache={}; returnf
阅读全文
posted @ 2012-06-30 10:27
【艾伦】
阅读(742)
推荐(1)
摘要:
Ajax,在它最基本的层面,是一种与服务器通讯而不重载当前页面的方法,数据可从服务器获得或发送给服务器。有多种不同的方法构造这种通讯通道,每种方法都有自己的优势和限制。 有五种常用技术用于向服务器请求数据: (1)XMLHttpRequest (XHR) (2)动态脚本标签插入 (3)框架 (4)Comet (5)多部分的XHR 在现代高性能JavaScript中使用的三种技术是XHR,动态脚本标签插入和多部分的XHR。使用Comet和iframe(作为数据传输技术)往往是极限情况,不在这里讨论。一、XMLHttpRequest 目前最常用的方法中,XMLHttpRequest(XHR)用来.
阅读全文
posted @ 2012-06-30 10:10
【艾伦】
阅读(15090)
推荐(4)
摘要:
在大多数现代正则表达式实现中(包括JavaScript所需的),回溯是匹配过程的基本组成部分。它很大程度上也是正则表达式如此美好和强大的根源。然而,回溯计算代价昂贵,如果你不够小心的话容易失控。虽然回溯是整体性能的唯一因素,理解它的工作原理,以及如何减少使用频率,可能是编写高效正则表达式最重要的关键点。因此后面几节用较长篇幅讨论这个话题。 当一个正则表达式扫描目标字符串时,它从左到右逐个扫描正则表达式的组成部分,在每个位置上测试能不能找到一个匹配。对于每一个量词和分支,都必须决定如何继续进行。如果是一个量词(诸如*,+?,或者{2,}),正则表达式必须决定何时尝试匹配更多的字符;如果遇到分支(
阅读全文
posted @ 2012-06-30 10:05
【艾伦】
阅读(5519)
推荐(1)
摘要:
粗浅地编写正则表达式是造成性能瓶颈的主要原因,但还有很多可以改进正则表达式效率的地方。两个正则表达式匹配相同的文本并不意味着他们具有同等的速度。 许多因素影响正则表达式的效率,首先,正则表达式适配的文本千差万别,部分匹配时比完全不匹配所用的时间要长。每种浏览器的正则表达式引擎也有不同的内部优化。 为了有效地使用正则表达式,重要的是理解它们的工作原理。下面是一个正则表达式处理的基本步骤: 第一步:编译 当你创建了一个正则表达式对象之后(使用一个正则表达式直接量或者RegExp构造器),浏览器检查你的模板有没有错误,然后将它转换成一个本机代码例程,用于执行匹配工作。如果你将正则表达式赋给一个变量.
阅读全文
posted @ 2012-06-30 10:02
【艾伦】
阅读(5244)
推荐(1)
摘要:
闭包和柯里化都是JavaScript经常用到而且比较高级的技巧,所有的函数式编程语言都支持这两个概念,因此,我们想要充分发挥出JavaScript中的函数式编程特征,就需要深入的了解这两个概念,闭包事实上更是柯里化所不可缺少的基础。一、柯里化的概念 在计算机科学中,柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。这个技术由Christopher Strachey以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的。在直觉上,柯里化声称“
阅读全文
posted @ 2012-06-30 09:59
【艾伦】
阅读(689)
推荐(2)
摘要:
Currying好像是函数式语言都有的一个特性,比如Perl,Python,Javascript。那么到底什么是Currying,我是在学习Closure时无意中接触到这个定义的,觉得很是有趣。先看看Wiki中的定义:Curryingis the technique of transforming afunctionthat takes multipleargumentsin such a way that it can be called as a chain of functions each with a single argument.大概的意思就是说,将拥有多个参数的函数Curryi
阅读全文
posted @ 2012-06-30 09:22
【艾伦】
阅读(2144)
推荐(2)
摘要:
函数可以用对象去记住先前操作的结果,从而能避免无谓的运算,这种优化被称为记忆(Memoization)。JavaScript 的对象和数组要实现这种优化是非常方便的Memoization 是一种将函数返回值缓存起来的方法,在 Lisp, Ruby, Perl, Python 等语言中使用非常广泛。随着 Ajax 的兴起,客户端对服务器的请求越来越密集(经典如 autocomplete),如果有一个良好的缓存机制,那么客户端 JavaScript 程序的效率的提升是显而易见的。Memoization 原理非常简单,就是把函数的每次执行结果都放入一个散列表中,在接下来的执行中,在散列表中查找是否已
阅读全文
posted @ 2012-06-30 04:38
【艾伦】
阅读(508)
推荐(2)
2012年4月8日
摘要:
1.命名规范2.无用的判断分支3.通过封装,继承,多态把程序的耦合度降低,用设计模式使得程序更加的灵活,容易修改,并且易于复用4.业务逻辑与界面逻辑分开,降低耦合
阅读全文
posted @ 2012-04-08 12:29
【艾伦】
阅读(286)
推荐(0)
2012年3月9日
摘要:
每一个执行上下文都有一个变量对象,在函数内部定义的所有变量和函数都被添加到这个对象的属性.整个过程的描述: 1> 对于任何形参,在变相对象上添加相应的属性,并把它们的值设置为传递给函数参数的值 2> 对于任何函数声明,在变量对象上添加相应的属性,值即为该函数.如果一个函数声明使用了和形参中任何一个相同的标识符,那么那个属性将被覆盖. 3>对于任何变量声明,在变量对象上添加相应的属性,初始化它们的值为undefined,不管这些变量在源代码中是怎样呗初始化的,如果一个变量使用与一个已经定义过的属性相同的标识符,那么 这些定义过的属性不一定被覆盖该算法的作用就是是所谓的函数和变量
阅读全文
posted @ 2012-03-09 08:53
【艾伦】
阅读(303)
推荐(0)
2012年2月25日
摘要:
HTTP协议基于请求响应模式,客户端向服务器发送一个请求,请求头包含请求的方法,URI,协议版本以及包含请求修饰符,客户端信息和内容的类似 MIME的消息结果。服务器则以一个状态行为作为响应,相应的内容包括消息协议的版本,成功或错误编码加上包含服务器信息,实体元信息以及可能的实体内容。缓存:当浏览器第一次请求某个URL时,顺利访问的话,服务器返回状态200的状态,同时会返回给浏览器一些Headers集合,例如set-cookie,Last-Mondified,Etag等等下面重点说明Last-Mondified与Etag,即浏览器缓存.HTTP/1.x 200 OKServer: Micros
阅读全文
posted @ 2012-02-25 11:16
【艾伦】
阅读(609)
推荐(1)