我喜欢到一些大型网站上去翻阅它们的原代码,期望能找到一些可以应用到自己的代码中的模式,或发现一些之前从未听说过的工具和技巧。可是,在我查看这些大型网站的源代码时,经常会发现一个问题,那就是重复的代码执行,重复的功能应用。下面就是一些在查看它们的源代码时发现一些问题,把这些分享给大家,希望能让你们更加简洁高效的写出JavaScript代码。
重复的收集元素
我在他们的JavaScript代码里看到的最常见的问题是重复的收集元素。虽然jQuery选择器引擎或querySelectorAll的执行速度都很快,但重复的工作就是会多占用时间和资源。这个问题很浅显,解决的方法如下:
| 2 | $$(".items").addClass("hide"); | 
 
| 4 | $$(".items").removeClass("hide"); | 
 
| 7 | varitems = $$(".items"); | 
 
 
 
对那些写出重复执行代码的程序员的谴责我们天天都在做,但仍需要加强。当然,有些重复的动作是无法避免的(比如ajax加载页面),可是,对于这些情况,我们最好是使用事件代理,而不是直接拉取内容。
重复的条件判断
重复的条件计算很常见,但通常也是有一个通用的模式来避免它们。你可能会看到一段代码写成这样:
| 01 | varperformMiracle = function() { | 
 
| 03 |     if(features.someFeature) { | 
 
 
 
这是可行的,但不是最高效的代码,上面的条件可能会多次计算。写成下面的样子会更好:
| 1 | varperformMiracle = features.someFeature ? function() { | 
 
 
 
只有一个条件,而且条件计算完成时方法或变量就已经作为结果返回了!
重复的对象创建
相比较重复的操作,重复的对象创建更难发现,通常是表现在正则表达式上。看一下下面的这段代码:
| 1 | functioncleanText(dirty) { | 
 
| 3 |     clean = dirty.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, ""); | 
 
| 5 |     // Do some more cleaning, maybe whitespace, etc. | 
 
 
 
上面的代码会不断的重复创建一个新的(但是相同的)正则表达式对象,对于这种情况,如果你在这个函数的外部创建这个对象,就能避免这种情况的出现:
| 1 | varscriptRegex = /<script[^>]*>([\s\S]*?)<\/script>/gi; | 
 
| 2 | functioncleanText(dirty) { | 
 
| 3 |     // Get rid of SCRIPT tags | 
 
| 4 |     clean = dirty.replace(scriptRegex, ""); | 
 
| 6 |     // Do some more cleaning, maybe whitespace, etc. | 
 
 
 
在上面的例子中,正则表达式对象只创建了一次,但多次使用——省了很多CPU处理。
这只是一部分我经常看到的其它程序员写的有重复问题的例子,你也有这方面的发现吗?
(英文:JavaScript: Avoiding Repeated Work.)
来自:http://www.webhek.com/javascript-optimization/
												
												
								- 使用定时器实现JavaScript的延期执行或重复执行
		使用定时器实现JavaScript的延期执行或重复执行 window 对象提供了两个方法来实现定时器的效果,分别是window.setTimeout()和 window.setInterval.其中前 ... 
- 【JavaScript】使用定时器实现Js的延期执行或重复执行setTimeout,setInterval
		使用定时器实现JavaScript的延期执行或重复执行 window对象提供了两个方法来实现定时器的效果,分别是window.setTimeout()和window.setInterval.其中前者可 ... 
- JS流程控制语句 反反复复(while循环) 和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足。
		反反复复(while循环) 和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足. while语句结构: while(判断条件) { 循环语句 } 使用w ... 
- JavaScript代码是怎么执行的?
		前言 众所周知,JavaScript是单线程语言.所以JavaScript是按顺序执行的! 先编译再执行 变量提升 请看下面的例子: console.log(cat) catName("Ch ... 
- javascript常用代码大全
		http://caibaojian.com/288.html    原文链接 jquery选中radio //如果之前有选中的,则把选中radio取消掉 $("#tj_cat .pro_ca ... 
- javascript的预编译和执行顺序
		原文:javascript的预编译和执行顺序 最近在复习javascript的事件处理时发现了一个问题,然后也是我来写javascript的预编译和执行顺序的问题 代码: 代码一<html> ... 
- JavaScript standard 代码规范的全文
		这是 JavaScript standard 代码规范的全文. 掌握本规范的最好方法是安装并在自己的代码中使用它. 细则 使用两个空格进行缩进. eslint: indent function hel ... 
- js定时器(执行一次、重复执行)
		代码如下: <script> //定时器 异步运行 function hello(){ alert("hello"); } //使用方法名字执行方法 var t1 =  ... 
- 前端性能优化:细说JavaScript的加载与执行
		本文主要是从性能优化的角度来探讨JavaScript在加载与执行过程中的优化思路与实践方法,既是细说,文中在涉及原理性的地方,不免会多说几句,还望各位读者保持耐心,仔细理解,请相信,您的耐心付出一定会 ... 
随机推荐
	
									- fastadmin iframe 表单提交之后跳转
			controller 对应的那个js文件中添加: define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function($, und ... 
- 【2-SAT】The Ministers’ Major Mess UVALive – 4452
			题目链接:https://cn.vjudge.net/contest/209474#problem/C 题目大意: 一共有m个提案,n个政客,每个政客都会对一些提案(最多四个)提出自己的意见——通过或 ... 
- Web应用安全审计工具WATOBO
			Web应用安全审计工具WATOBO   WATOBO是一款Web应用程序安全测试工具.该工具使用代理方式,对Web会话数据进行审计.它是一款半自动化工具,可以自动对请求和响应进行分析,找出潜在漏洞信息 ... 
- Python中的模块(1)
			Python中的模块 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt这个函数,必须用语句"#include<math.h>"引入math.h这个头文件,否则 ... 
- FFTW3学习笔记2:FFTW(快速傅里叶变换)中文参考
			据说FFTW(Fastest Fourier Transform in the West)是世界上最快的FFT.为了详细了解FFTW以及为编程方便,特将用户手册看了一下,并结合手册制作了以下FFTW中 ... 
- luogu P2619 [国家集训队2]Tree I
			题目链接 luogu P2619 [国家集训队2]Tree I 题解 普通思路就不说了二分增量,生成树check 说一下坑点 二分时,若黑白边权有相同,因为权值相同优先选白边,若在最有增量时出现黑白等 ... 
- luoguP3255 [JLOI2013]地形生成 动态规划
			出题人语文真好... 各不相同的标号和高度 = 各不相同的标号 + 单独的高度... 第一问比较简单,考虑从大到小插入,在相同情况下,按关键值从小到大插入 这样子,关键大的元素一定会影响到关键小的元素 ... 
- HDU 1057 What Are You Talking About trie树 简单
			http://acm.hdu.edu.cn/showproblem.php?pid=1075 题意 : 给一个单词表然后给一些单词,要求翻译单词表中有的单词,没有则直接输出原单词. 翻译文段部分get ... 
- [ZROI #316] ZYB玩字符串
			Introduction 每次在一开始为空的串$S$的任意位置插入串$p$ 给出最终的$S$,求长度最短(相同时字典序最小)的串$p$ Solution: 样例出锅差评啊,让我这种直接看样例选手挂掉5 ... 
- HDU 6071 Lazy Running(最短路)
			[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6071 [题目大意] 给出四个点1,2,3,4,1和2,2和3,3和4,4和1 之间有路相连, 现在 ...