摘要: 既然是总结,就不要重复书中内容了,适当总结、扩展、思考。 实际上会用在javascript上面的算法实在是不会太多,但由于js非编译语言的特性,所以浏览器解释器能给的优化不能算太好。优化仅有的一些循环和流程控制显得非常必要。 然后我一上来就中枪了,以为for in这样的写法会比较好写,所以一直做数组操作的时候使用这个方法。但是,这个方法会同时搜索实例或原型属性,所以每次迭代的时候都会产生额外的开销。因些,不要用for in来遍历数组。 递归如果次数太多,就不要使用了,会抛出异常。改用迭代。 如果不是均匀分布的话,可以使用二分法,找出数据出现次数多的一部分做数据判断切割。 书中提到了三... 阅读全文
posted @ 2013-01-11 19:38 Bug罗 阅读(503) 评论(0) 推荐(1) 编辑
摘要: 既然是总结,就不要重复书中内容了,适当总结、扩展、思考。访问dom与操作dom是javascript存在的最重要意义。为什么要这么说,因为js就是为浏览器而生的。浏览器上的每一个文字图片与布局的存在,都是dom。操作dom代价是昂贵的,因为是两个相当于跨域的操作。因此,我们需要在这样的操作中做一些优化。1.用变量缓存dom2.innerHTML比原生操作更快 ------在最新的浏览器反过来,但是还是用innerHTML比较好。3.elemnt集合的length操作是实时的,所以会造成性能问题。也是用变量缓存4.用children比childNodes好,也就是说用一些新的dom操作比老的好。 阅读全文
posted @ 2013-01-09 19:01 Bug罗 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 既然是总结,就不要重复书中内容了,适当总结、扩展、思考。1.访问方式由于JavaScript的数据结构很简单,所以数据访问的方式很少。直接量、变量、数组元素、对象成员。访问前两个相对快些。2.作用域var doc = document,hasOwn = Object.prototype.hasOwnProperty,push = Array.prototype.push看了gitHub上许多成熟的js类库都有这样的写法,把全局变量保存在局部变量中使用,访问速度会比直接使用快。因为全局变量被放在作用域最末端。如果一个变量定义两遍,那么会取前面一个,然后全局变量又被放在最末端,所以你懂的。3.尽可 阅读全文
posted @ 2013-01-07 19:09 Bug罗 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 既然是总结,就不要重复书中内容了,适当总结、扩展、思考。书中提到以下几种脚本引用方式。1 直接引用1.1 放在head中 相比body会阻塞dom元素生成,使页面空白1.2 放在body的最后 ---较好的实践方法用此颜色2 脚本合并打包3.无阻塞方式加载3.1 用defer不会阻塞进程 但是不能跨浏览器3.2 动态添加script3.3 xmlhttpRequest注入 不能跨域、不能cdn为什么我会标注三种最佳实践方式,实际上这三种是不重复的。1.放在body最后,会使dom元素在script的下载阻塞页面之前生成。2.脚本合并压缩可以减少http请求数以及减小文件大小。3.动态添加... 阅读全文
posted @ 2013-01-07 18:52 Bug罗 阅读(1025) 评论(0) 推荐(0) 编辑
摘要: 上一次,我依据Ajax原理简单讲了一下怎么样封装一个对象,用于执行页面上需要的Ajax请求,并保存Ajax数据。但是一个完善的Data对象需求有哪些?可控制权限可并发可收集异常信息可有进度提示可分页可数据验证但是以上的需求,有很多都是建立在一个View的显示上面的,例如进度提示,我们通常用这样一个组件去表示数据还在查询中。所以,我们并不能把以上许多功能都封装在Data组件中,例如分页、数据验证。于是,我们不得不提到一个模式:MVVM,这个模式是SilverLight盛行的时候被提出的,最大的特点就是数据Model和View有效解耦。当View上面数据被更改时,不需要执行如Data.Name = 阅读全文
posted @ 2012-12-25 19:28 Bug罗 阅读(464) 评论(0) 推荐(0) 编辑
摘要: 如何获取DOM中当前获取焦点的元素 由于底层库的数据传递的做法,是当Input、TextArea这样的输入库失去焦点时候更新数据到Data对象。于是产生了这样一个bug。当用户输入一些内容,然后点击DataInput组件的时间选择框时,前面的Input并没有失去焦点。所以为了解决这个bug,理所当然想到把焦点放到DataInput组件上,$("#DateInput").focus();可是却没有生效。(生效与否看字体是否变红)于是改成将焦点取消。$(document.activeElement).blur(),成功。可是ff下却没有document.activeElemen 阅读全文
posted @ 2012-12-21 10:39 Bug罗 阅读(431) 评论(0) 推荐(0) 编辑
摘要: 假如你手机充电器的插头坏了,但是线还是好的,你会怎么办?对,把线插在电脑的usb插口上面。那么适配器模式是什么。?如果你觉得$("#")不够cool.那么function $id(id){ return $("#"+id);}$id("bugluo");能不能满足你呢?jQuery源码中,将$的使用权让给别的类库之后。jQuery.noConflict();我们只有使用jQuery("#"+id)去获取对象了。这显然很不爽。照着我上面的处理方法,取一个你最喜欢的命名吧。 阅读全文
posted @ 2012-12-19 19:28 Bug罗 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 观察者模式可以干什么?当 div绑定onclick时候就会触发事件,当div没有绑定时候就不会触发。div.onclick = function click (){ alert ( ''click' )}所以dom与js之间就存在这样一个观察者模式。、function click(event,c){ alert(event+c);}var CopyrightLabel = new radf.Label({id:"CopyrightLabel",parent:BgPannel,width:470,height:22,vAlign:3,hAlign:3, 阅读全文
posted @ 2012-12-19 19:14 Bug罗 阅读(1311) 评论(0) 推荐(0) 编辑
摘要: AJAX作为RIA实现的一个最重要的技术,不得不拿出来分析一下。AJAX整个过程即,发送请求,使用XMLHttpRequest对象动态获取数据。服务端授受请求,返回数据,客户端接受数据,操作DOM元素。Data对象的封装就是对以上过程进行简化。一个完整的Data对象封装如上。针对AJAX实现过程,我们要做以下封装内容。1.ajax请求地址及基本参数。一般来说,一个项目的ajax访问地址是相同的,根据action的不同,请求到不同的数据。2.返回的数据的处理通过访问之后的回调,将json数据格式的内容解析为多条的object内容,以方便实现mvc操作方式。 t = eval... 阅读全文
posted @ 2012-12-19 18:33 Bug罗 阅读(751) 评论(0) 推荐(1) 编辑
摘要: radf是此库命名,意为快速应用开发框架。 radf按类的功能分为Data、布局、数据组件、工具。 Data类:用于绑定从服务器端传来的数据。 布局:有Pannel、StackPannel、GridPannel、Splitter、TabForm,用于页面元素风格构建。 数据组件:MsgBox、Input、Radio、CheckBox、Select、Image、gridData、Portlet、RollerMenu、Calendar、DateInput、MoveWindow、Marque、FusionCharts后面五个是我做的,嘿嘿 工具: clone、copy、dataUnbi... 阅读全文
posted @ 2012-12-19 18:32 Bug罗 阅读(1355) 评论(0) 推荐(0) 编辑