在JS中有些内存只需执行一遍即可,如浏览器类型检测是最常用的一个功能,因为我们使用Ajax的时候需要检测浏览器的内置的XHR。我们可以在第一次检测的时候记录下类型,往后在使用Ajax的时候就不需要再去检测浏览器类型了。在JS中就算只有一个if也总比没有if的语句效率要高。
普通Ajax方法
/** * JS惰性函数 */ function ajax(){ if(typeof XMLHttpRequest != "undefined"){ return new XMLHttpRequest(); }else if(typeof ActiveXObject != "undefined"){ if(typeof arguments.callee.activeXString != "string"){ var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"]; for(var i=0,k=version.length;i<k;i++){ try{ new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; break; }catch(ex){ throw ex; } } } return new ActiveXObject(arguments.callee.activeXString); }else{ throw "No XHR object"; } }
使用惰性方式的方法
/** * JS惰性函数 */ function ajax(){ if(typeof XMLHttpRequest != "undefined"){ ajax = function(){ return new XMLHttpRequest(); }; }else if(typeof ActiveXObject != "undefined"){ ajax = function(){ if(typeof arguments.callee.activeXString != "string"){ var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"]; for(var i=0,k=version.length;i<k;i++){ try{ var xhr = new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; return xhr; }catch(ex){ throw ex; } } } return new ActiveXObject(arguments.callee.activeXString); } }else{ ajax = function(){ throw "No XHR object"; } } return ajax(); }
优化重点
要执行特定代码只有实际调用才执行,而某些JS库一开始就检测浏览器,预先设置好。
由于加了复杂的判断所以首次运行速度慢,但后边的多册运行的效率会更快。
有时候写代码久了,不能一成不变,要经常思考怎样才能使程序运行的更快,更有效率。这样的思考下写出来的程序才是精装,而不会产生多余的垃圾代码。这也不是简单OO就能一刀切,实际上代码很多地方都是活的,人更是活的。
我们目前有几个@OneToOne关系,由于已知的惰性加载的限制,它们总是会急切地从反方向获取。 为了启用逆关系的延迟加载,我正在尝试启用构建时字节码检测。 到目前为止我所做的... 这些关系现在不再急切地加载...但是它们也不会延迟加载,它们只是静默地返回null。 我尝试从实体中删除接口和字段,因为我不确定是否需要这样做,在此之后,我在启动时不再获得消息,并且默认情况下返回到急切加载。 我是不是
我有一个数据表的问题-懒加载。我认为问题是在IdiomasBean.java(TableBean.java),如果我把: 我得到了正确的数据表,但是<代码>按排序、筛选和不起作用。 我得到:java。lang.NullPointerException这里是堆栈跟踪: 下面是代码的其余部分: 指数xhtml diomasBean.java 懒散的数据模型。JAVA IdiomasBo.java 习语
简介 惰性求值(Lazy evaluation)是在需要时才进行求值的计算方式。惰性求值自然地在数据结构中包含递归,可以以简单的方式表示无限的概念,这种方式有利于程序的模块化。 你可以从《Why Functional Programming Matters》中知晓惰性计算可以带来哪些好处。 Haskell语言以采用惰性求值而广为人熟知。Scheme也部分采用了惰性求值。 用于惰性求值的函数 下面这
我正在使用JPA2.1(Eclipselink2.5.1)和JBoss7.1。 为什么不工作是懒惰加载? 谢谢
我遇到的问题类似于以下情况:Jboss Wildfly EJB3和Mybatis部署错误:NoSuchMethodError javax.persistence.table.indexes()[ljavax/persistence/index;但这并没有阻止我部署EAR,我的问题发生在尝试执行DAO中的一个方法时,该方法使用Mybatis映射器,并对另一个映射器进行惰性加载引用。我得到以下异常:
我以primefaces页面为例(http://www.primefaces.org/showcase/ui/datatableLazy.jsf),它起了作用,但因为示例是在构造函数上加载列表,所以它并不是完全的延迟加载。我知道这是一个虚构的例子,所以我在我的bean上添加了以下几行 我的初始化功能我把一些部分改成了这个 我的FichaLazyList是这样的 我得到这个错误, 第55行是这个吗