Ruby's Louvre

每天学习一点点算法

导航

上一页 1 ··· 80 81 82 83 84 85 86 87 88 ··· 125 下一页

2011年2月11日 #

我的模块加载系统 v3

摘要: 近一年来,外国非常热衷异步加载的研究。为了加快页面的载入速度,无阻塞的动态script注入的应用重新回到舞台的中心。LAB.js,ControlJS ,Head JS, yepnopejs, $script.js,NBL JohnnyDepp.js loadrunner还有基于jquery的RequireJS,嘛,它已是另一个层面的东西,还搞了一个术语AMD(Modules/AsynchronousDefinition)来唬人。国内的,暂时只有岁月如歌的 SeaJS 比较有名。说是顺应潮流也好,跟风凑热闹也好,我也升级了我的模块加载系统,取名为并行加载器,作为我的框架的核心模块而存在。为方便起 阅读全文

posted @ 2011-02-11 09:39 司徒正美 阅读(4798) 评论(14) 推荐(8) 编辑

2011年1月30日 #

节点排序 2

摘要: 对支持sourceIndex的HTML文档的节点重排,使用JK提供的思路,速度至少比单纯使用nodes.sort(function(a,b){return a.sourceIndex - b.sourceIndex})这种方式快两倍:但标准浏览器不支持这属性,在IE中,XML文档也没有此属性,这时就需要跟据节点的parentNode与nextSibling,但如果单单是两两比较,速度是提升不了的。因此我们就转而比较最近公共祖先的孩子们的顺序了。这时,算法的威力就体现出来了。这是第一版,根据某一朋友提供的LCA搞出来的东西,当然大体思路还是归功于JK大神。但实际效果不如意,比jQuery的那个s 阅读全文

posted @ 2011-01-30 16:09 司徒正美 阅读(2299) 评论(2) 推荐(0) 编辑

2011年1月28日 #

节点排序

摘要: 为了让自定义选择选择出的节点集合尽可能接近原生API选出的结果,我们往往要对结果集进行排序,此顺序当然是从上到下,从左到右的DOM树顺序。在IE中我们可以利用sourceIndex,标准浏览器我们可以用compareDocumentPosition,但对于旧一点的标准浏览器呢?XML呢?因此我们就需要根据一个节点的属性确定它与另一个节点的关系了。我的思路很简单,如果它们相同,返回0(用于去重),如果它们的父节点相同,那么根据nextSibling确定两者的先后顺序,否则就找到其最近公共祖先与其他两个最接近这祖先的两个父节点(人性点说,是伯父与父亲),这时不就是与父节点相同的情况吗?!根据nex 阅读全文

posted @ 2011-01-28 23:16 司徒正美 阅读(2759) 评论(4) 推荐(0) 编辑

2011年1月27日 #

由addClass衍生出来的字符串去重问题

摘要: 现在先撇开性能不谈,就算是谈性能,也是把函数循环成千上万才看到几毫秒的差距,因此我才不管它呢。我首先考虑的是类库的大小,这就要求,不要才分膨胀其里的函数。我在群里提出的问题是,要为一个className为"aaa eee bbb"的元素节点添加多两个类名,“aaa”,"ddd",如果让此实现尽可能的简单,不能用框架,不能用for循环。经过一轮的跑题(主要如何用hash进行去重,总难免还是谈到性能上),最好得到两个比较好的方案: var str= 'aaa eee bbb aaa ddd';var o = {};var str= str.replace(/\S+/g, function($) { 阅读全文

posted @ 2011-01-27 21:46 司徒正美 阅读(2644) 评论(6) 推荐(3) 编辑

2011年1月26日 #

className的高效匹配

摘要: 在匹配类时,jQuery用于一种相对笨拙的方法,无论是目标节点的类名,还是表达式都要进行处理才能用。如果是match为.aaa还好,只用进行一次过滤,如果match为.aaa.bbb呢?!那么有没有更快的方法呢?有的。我们需要构造一个强大的正则出来,让它能同时匹配我们所需要的类名,可能是一个,也可能是多个,并且不分次序。拜群里的高手所赐了,这正则很快就解决了(我为我这个强大的智囊团而骄傲,从此不用上51js,javaeye,blueidea了……)。比如,我们想匹配同时拥有aaa与bbb的这些LI元素,就要只需要把表达式转换成正则,直接test验证就行了,无需再对元素上的className进行 阅读全文

posted @ 2011-01-26 23:35 司徒正美 阅读(3320) 评论(3) 推荐(3) 编辑

2011年1月24日 #

Sizzle是怎样工作的

摘要: 作为闻名遐迩的选择器,Sizzle并不是人们所说的从右到左选择那么简单的。本文将揭开其神秘的内幕,让大家看看其令人惊叹的优化。在此之前,大家必需有一些概念,否则无法勾勒其轮廓。这些概念我在做类似的事,一点点总结出来的。总的来说,有如下几个:种子选择器,候选集,映射集,迭代器,过滤器,切割器,查询次数……由于CSS选择器的种类是如此繁多,加上jQuery的自定义伪类就更多,因此它们组成的表达式一定要加以拆分,才能工作。我们就拿一个简单的CSS表达式着手吧。div div.aaa就是我们的小白鼠,大抵它可以拆分为四个部分,标签选择器,后代选择器,标签选择器与类选择器。但Sizzle一开始并没有这样 阅读全文

posted @ 2011-01-24 21:47 司徒正美 阅读(5830) 评论(6) 推荐(9) 编辑

2011年1月21日 #

jQuery1.5的新特征subclass——jQuery插件机制的救赎

摘要: 感觉jQuery1.5最大的改变有两个,jQuery子类与异步列队,本文只谈jQuery子类。首先要明白为何要推出此功能,是强化它那基本为零的OO功能吗?不是,从下面的源码你应该知道它不是让你自定义类。但这也是个愚蠢的问题,因为这样,这方法就叫Class,而不是subclass。我想它真正的用意是为了改善其插件机制。jQuery的插件是很容易开发,随便在其原型链上添加个方法就叫称“插件”,因此jQuery的插件很多,垃圾插件也很多,由于停止更新变成垃圾的也很多。当然这是在最理想的情况下,插件才这么简单(好像一个函数算一个插件也蛮多的)。比如你开发一个插件,然后你同事也开发了一个同名的插件,这时 阅读全文

posted @ 2011-01-21 11:04 司徒正美 阅读(3697) 评论(10) 推荐(3) 编辑

getElementsByTagName

摘要: DC大神为早期不支持getElementsByTagName的浏览器写的hack,当然与原生的不能同日而言,原生的用到缓存机制呢。 阅读全文

posted @ 2011-01-21 00:43 司徒正美 阅读(1139) 评论(1) 推荐(1) 编辑

2011年1月20日 #

facebook是如何管理代码的

摘要: 转自这里,看完之后,终于明白为什么优秀的工程师都去了/想去facebook,因为那里是工程师们的天堂。 我对facebook的运转着迷。这是一个很独特的环境,不容易被复制(他们的体系并不适合所有的公司,即使他们努力尝试过)。下面是我和facebook的朋友们关于他们如何开发和管理项目的记录。 现在距离我收集的这些信息又过去6个月了,我相信facebook肯定又对他们的项目开发实践进行了改进。所以这些记录可能会有点过时。同时facebook的工程师驱动文化也越来越为大众所知。非常感谢那些帮助我整理这篇文章的facebook的朋友们。 记录: 截止到2010年6月,facebook有将近200 阅读全文

posted @ 2011-01-20 09:36 司徒正美 阅读(1180) 评论(1) 推荐(0) 编辑

2011年1月19日 #

极限编程里对简单设计有四个原则

摘要: 极限编程里对简单设计有四个原则:1、通过所有测试2、所有代码体现作者意图3、没有重复代码4、类和方法足够短 阅读全文

posted @ 2011-01-19 09:17 司徒正美 阅读(1336) 评论(1) 推荐(0) 编辑

上一页 1 ··· 80 81 82 83 84 85 86 87 88 ··· 125 下一页