极乐门资源网 Design By www.ioogu.com
我喜欢到一些大型网站上去翻阅它们的原代码,期望能找到一些可以应用到自己的代码中的模式,或发现一些之前从未听说过的工具和技巧。可是,在我查看这些大型网站的源代码时,经常会发现一个问题,那就是重复的代码执行,重复的功能应用。下面就是一些在查看它们的源代码时发现一些问题,把这些分享给大家,希望能让你们更加简洁高效的写出JavaScript代码。
重复的收集元素
我在他们的JavaScript代码里看到的最常见的问题是重复的收集元素。虽然jQuery选择器引擎或querySelectorAll的执行速度都很快,但重复的工作就是会多占用时间和资源。这个问题很浅显,解决的方法如下:
复制代码 代码如下:
//
$$(".items").addClass("hide");
// ... 后来又 ...
$$(".items").removeClass("hide");
//
var items = $$(".items");
// ... 从这里开始使用这个引用变量!
对那些写出重复执行代码的程序员的谴责我们天天都在做,但仍需要加强。当然,有些重复的动作是无法避免的(比如ajax加载页面),可是,对于这些情况,我们最好是使用事件代理,而不是直接拉取内容。
重复的条件判断
重复的条件计算很常见,但通常也是有一个通用的模式来避免它们。你可能会看到一段代码写成这样:
复制代码 代码如下:
var performMiracle = function() {
// 如果浏览器支持A特征...
if(features.someFeature) {
}
// ... 如果不支持
else {
}
};
这是可行的,但不是最高效的代码,上面的条件可能会多次计算。写成下面的样子会更好:
复制代码 代码如下:
var performMiracle = features.someFeature ? function() {
// Plan A stuff
} : function() {
// Plan B stuff
};
只有一个条件,而且条件计算完成时方法或变量就已经作为结果返回了!
重复的对象创建
相比较重复的操作,重复的对象创建更难发现,通常是表现在正则表达式上。看一下下面的这段代码:
复制代码 代码如下:
function cleanText(dirty) {
// 去除SCRIPT tags
clean = dirty.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, "");
// Do some more cleaning, maybe whitespace, etc.
return clean;
}
上面的代码会不断的重复创建一个新的(但是相同的)正则表达式对象,对于这种情况,如果你在这个函数的外部创建这个对象,就能避免这种情况的出现:
复制代码 代码如下:
var scriptRegex = /<script[^>]*>([\s\S]*?)<\/script>/gi;
function cleanText(dirty) {
// Get rid of SCRIPT tags
clean = dirty.replace(scriptRegex, "");
// Do some more cleaning, maybe whitespace, etc.
return clean;
}
在上面的例子中,正则表达式对象只创建了一次,但多次使用——省了很多CPU处理。
这只是一部分我经常看到的其它程序员写的有重复问题的例子,你也有这方面的发现吗?
重复的收集元素
我在他们的JavaScript代码里看到的最常见的问题是重复的收集元素。虽然jQuery选择器引擎或querySelectorAll的执行速度都很快,但重复的工作就是会多占用时间和资源。这个问题很浅显,解决的方法如下:
复制代码 代码如下:
//
$$(".items").addClass("hide");
// ... 后来又 ...
$$(".items").removeClass("hide");
//
var items = $$(".items");
// ... 从这里开始使用这个引用变量!
对那些写出重复执行代码的程序员的谴责我们天天都在做,但仍需要加强。当然,有些重复的动作是无法避免的(比如ajax加载页面),可是,对于这些情况,我们最好是使用事件代理,而不是直接拉取内容。
重复的条件判断
重复的条件计算很常见,但通常也是有一个通用的模式来避免它们。你可能会看到一段代码写成这样:
复制代码 代码如下:
var performMiracle = function() {
// 如果浏览器支持A特征...
if(features.someFeature) {
}
// ... 如果不支持
else {
}
};
这是可行的,但不是最高效的代码,上面的条件可能会多次计算。写成下面的样子会更好:
复制代码 代码如下:
var performMiracle = features.someFeature ? function() {
// Plan A stuff
} : function() {
// Plan B stuff
};
只有一个条件,而且条件计算完成时方法或变量就已经作为结果返回了!
重复的对象创建
相比较重复的操作,重复的对象创建更难发现,通常是表现在正则表达式上。看一下下面的这段代码:
复制代码 代码如下:
function cleanText(dirty) {
// 去除SCRIPT tags
clean = dirty.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, "");
// Do some more cleaning, maybe whitespace, etc.
return clean;
}
上面的代码会不断的重复创建一个新的(但是相同的)正则表达式对象,对于这种情况,如果你在这个函数的外部创建这个对象,就能避免这种情况的出现:
复制代码 代码如下:
var scriptRegex = /<script[^>]*>([\s\S]*?)<\/script>/gi;
function cleanText(dirty) {
// Get rid of SCRIPT tags
clean = dirty.replace(scriptRegex, "");
// Do some more cleaning, maybe whitespace, etc.
return clean;
}
在上面的例子中,正则表达式对象只创建了一次,但多次使用——省了很多CPU处理。
这只是一部分我经常看到的其它程序员写的有重复问题的例子,你也有这方面的发现吗?
标签:
js代码,重复执行
极乐门资源网 Design By www.ioogu.com
极乐门资源网
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
极乐门资源网 Design By www.ioogu.com
暂无JavaScript避免代码的重复执行经验技巧分享的评论...
更新日志
2025年01月20日
2025年01月20日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]