我有这样的情况:for(vari=0;i我是否应该担心在每次迭代中都执行了加法?或者JavaScript(它的解析器?)足够聪明,可以理解a+b是常量?换句话说,我应该这样做吗:varend=a+b;for(vari=0;i还是会浪费一行代码?嗯,实际上我担心的不是那一行代码,而是我每次在JavaScript中遇到这样的情况时都在想它!另外,今天是加法,明天可能是其他东西,比如它的平方根,所以我认为这很重要! 最佳答案 每次都会评估条件。发件人:https://developer.mozilla.org/en-US/docs/Web
有些css值是用数字定义的,比如opacity我知道在编写css时,我会这样做:#element{opacity:1;/*withoutaquotemark,just1*/}但是当我要用javascript修改opacity时,我应该提供什么?只有0.5或"0.5"?如果我运行:typeofdocument.getElementById('element').style.opacity//returns"srting"所以我过去常常在修改它的时候提供字符串。但是有人审查我的代码,建议我提供如下数字:document.getElementById('element').style.opa
我有一些jquery可以正常工作,但我想对其进行高度优化。基本上我是将标准的列表项附加到无序列表。谁能推荐最快的优化以下代码的方法,例如创建文档片段?for(keyindata){li=$(''+data[key]["Name"]+'');$('.item',li).data('ID',data[key]["Id"]);$(list).append(li);} 最佳答案 varsb=newArray();for(keyindata){sb.push('',data[key]["Name"],'')}$(list).append(sb
在阅读文档时,我发现了一个可以大大提高javascript性能的简单优化。原代码:functionparseRow(columns,parser){varrow={};for(vari=0;i优化代码:varcode='return{\n';columns.forEach(function(column){code+='"'+column.name+'":'+'parser.readColumnValue(),\n';});code+='};\n';varparseRow=newFunction('columns','parser',code);在这里找到:https://github
我在网上阅读了几篇关于优化javascript加载的文章。我得到的几个关键点是最小化脚本文件(http请求)的数量,缩小并在服务器上启用gzip。目前,我这边所做的是缩小所有javascript文件,并且也可以简单地启用gzip。第1部分)我的问题是我有大约20个javascript文件,其中一个common.js具有所有核心功能。除此之外,每个页面都会加载至少一个实现该页面功能的其他文件。解决方案1,是将所有脚本合并到一个大脚本文件中,并为每个客户端加载一次,这似乎是其他人正在做的。我猜YUI或者JSMin可以用来压缩,所以我应该手动合并文件?解决方案2,当需要一个必需的功能时延迟加
我想压缩我的2000多行javascript,我已经测试了http://dean.edwards.name/packer/和http://closure-compiler.appspot.com/home.但在这两种情况下,压缩脚本都会给我错误。一个错误的例子是jQuery(document).Daisnotafunction。为什么优化后我的脚本不工作?我可以做些什么来优化/压缩我的脚本? 最佳答案 确保每个JavaScript文件的开头都有一个分号。我知道这很奇怪,但这就是原因:你可能在一个文件中有这样的东西:functions
有没有一种快速有效的方法可以在canvas中移动大量对象?基本上,如果有大约1000个对象,并且我想一次移动所有对象以模拟滚动,则通过调用drawImage()1000多次来重绘每个对象会非常慢。有没有办法优化这个?我有一个问题的示例链接(而且只有100个对象):http://craftyjs.com/isometric/ 最佳答案 由于canvas不提供快速低级位图复制,因此很难在多个图层中执行操作,例如一次滚动整个背景然后只渲染边缘。那你能做什么?简而言之,什么都没有。尤其是在滚动时,当你有一个或多或少的静态背景时,你肯定可以用
我发现自己经常做的操作如下:OneTwoThreevar$allLi=$('li');$allLi.click(function(){$allLi.removeClass('current');$(this).addClass('current');});有没有办法通过组合$allLi和$(this)并使用toggleClass来压缩它?谢谢! 最佳答案 Jonathan的解决方案应该可以正常工作,但我想提出一个不同的解决方案。与其取消设置所有元素然后选择当前元素,为什么不只跟踪当前元素并只对其执行操作?OneTwoThree(fu
我正在为一个我无法控制的网站编写一个插件,除了我能够向它添加JS代码(实际上它是由一个过时的wysiwyghtml编辑器生成的一组html文档)。出于我的目的,我需要获取以特定方式命名的所有变量。名称始终以zzz开头并以数字结尾,从zzz1到zzz999999。现在我正在做以下事情:for(vari=1;i我想知道是否有比遍历一百万个undefinedvariable更有效的方法来检测这些变量。 最佳答案 您可以遍历所有顶级变量(window的属性),然后测试它们的名称是否与某些正则表达式模式匹配。像以前一样收集匹配的变量。varp
我正在使用一种可转换为JavaScript的语言工作。为了避免一些堆栈溢出,我通过将某些函数转换为for循环来应用尾调用优化。令人惊讶的是转换并不比递归版本快。http://jsperf.com/sldjf-lajf-lkajf-lkfadsj-f/5递归版本:(functionrecur(a0,s0){returna0==0?s0:recur(a0-1,a0+s0)})(10000,0)尾调用优化后:ret3=void0;a1=10000;s2=0;(function(){while(!ret3){a1==0?ret3=s2:(a1_tmp$=a1-1,s2_tmp$=a1+s2,a