jQuery性能优化指南[译](4)

作者:Robin 来源:Time Machine 时间:2009-05-12 11:54:00 

7. 冒泡

除非在特殊情况下, 否则每一个js事件(例如:click, mouseover, 等.)都会冒泡到父级节点. 当我们需要给多个元素调用同个函数时这点会很有用.

代替这种效率很差的多元素事件监听的方法就是, 你只需向它们的父节点绑定一次, 并且可以计算出哪个节点触发了事件.

例如, 我们要为一个拥有很多输入框的表单绑定这样的行为: 当输入框被选中时为它添加一个class

像这样绑定事件是低效的:

$(‘#entryform input).bind(’focus‘, function(){
$(this).addClass(’selected‘);
}).bind(’blur‘, function(){
$(this).removeClass(’selected‘);
});

我们需要在父级监听获取焦点和失去焦点的事件:

$(‘#entryform’).bind(‘focus’, function(e){
var cell = $(e.target); // e.target grabs the node that triggered the event.
cell.addClass(’selected’);
}).bind(‘blur’, function(e){
var cell = $(e.target);
cell.removeClass(’selected’);
});

父级元素扮演了一个调度员的角色, 它可以基于目标元素绑定事件. 如果你发现你给很多元素绑定了同一个事件监听, 那么你肯定哪里做错了.

8.消除无效查询

尽管jquery可以很优雅的处理没有匹配元素的情况, 但它还是需要花费时间去寻找. 如果你整站只有一个全局js, 那么极有可能把所有的jquery函数塞进$(document)ready(function(){//所有你引以为傲的代码})里.

只运行在页面里用到的函数. 大多数有效的方法就是使用行内初始化函数, 这样你的模板就能准确的控制何时何处该执行js.

例如, 你的”文章”页面模板, 你可能会引用如下的代码在body结束处:

<script type=“text/javascript>
mylib.article.init();
</script>
</body>

如果你的页面模板包含一些多变的模块可能不会出现在页面中, 或者为了视觉呈现的原因你需要它们能够快速加载, 你可以将初始化函数紧跟在模块之后.

<ul id=“traffic_light”>
<li><input type=“radio” class=“on” name=“light” value=“red” /> Red</li>
<li><input type=“radio” class=“off” name=“light” value=“yellow” /> Yellow</li>
<li><input type=“radio” class=“off” name=“light” value=“green” /> Green</li>
</ul>
<script type=“text/javascript>
mylib.traffic_light.init();
</script>

你的全局js库可能会是这样子的:

var mylib =
{
article_page :
{
init : function()
{
// Article 特有的jQuery函数.
}
},
traffic_light :
{
init : function()
{
// Traffic light 特有的jQuery函数.
}
}
}

 

标签:javascript,jquery,性能
0
投稿

猜你喜欢

  • Python 2.7中文显示与处理方法

    2021-06-14 16:07:39
  • 非常酷炫的Bootstrap图片轮播动画

    2024-04-23 09:16:34
  • 详细介绍查询优化技术在现实系统中的运用

    2009-01-04 13:34:00
  • Python批量解压&压缩文件夹的示例代码

    2023-02-17 17:43:29
  • pandas使用函数批量处理数据(map、apply、applymap)

    2023-03-07 11:12:09
  • Django 开发调试工具 Django-debug-toolbar使用详解

    2022-03-18 02:31:07
  • pycharm中显示CSS提示的知识点总结

    2023-11-02 02:56:00
  • PyCharm搭建Spark开发环境的实现步骤

    2022-05-21 04:21:17
  • Vue中使用vux配置代码详解

    2023-07-02 16:39:45
  • Windows7中配置安装MySQL 5.6解压缩版

    2024-01-26 16:02:34
  • javascript中var与let、const的区别详解

    2024-05-09 15:07:32
  • asp下查询xml的实现代码

    2011-04-19 10:37:00
  • Django drf使用Django自带的用户系统的注册功能

    2023-07-15 00:21:38
  • 如何将服务器上的python代码通过QQ发送回传信息(附实现方法)

    2022-04-24 04:27:08
  • SQL 特殊语句(学习笔记)

    2024-01-13 16:24:40
  • JS/jQ实现免费获取手机验证码倒计时效果

    2023-09-23 05:21:41
  • 对python使用telnet实现弱密码登录的方法详解

    2023-12-28 02:52:46
  • mysql中为用户设置密码的多种方法

    2024-01-26 07:36:07
  • Python如何将图像音视频等资源文件隐藏在代码中(小技巧)

    2023-08-03 10:29:49
  • Bootstrap弹出带合法性检查的登录框实例代码【推荐】

    2024-04-16 08:49:54
  • asp之家 网络编程 m.aspxhome.com