jQuery 开发者应该注意的9个错误


Posted in Javascript onMay 03, 2012

jQuery is so easy to use that sometimes we just forget that it's not CSS. While using CSS, we don't have to give much thought to performance, because it's so fast that it's not worth the effort to optimize it. But when it comes to the real world, jQuery can drive developers crazy with performance issues. Sometimes you lose precious milliseconds without even noticing it. Also, it's so easy to forget about some functions and we keep using the old (and not-so-good) ones.

Let's take a look at a few of the most-common-and-easiest-to-fix mistakes while using jQuery in your projects.

1. You aren't using the latest jQuery version
Each version update means higher performance and several bug fixes. The current stable release is 1.7.2, and I'm pretty sure you know about plenty of sites developed using 1.6 and below. Ok, ok, you can't just update every old site for every jQuery update (unless your client is paying you to do so) but you should at least start using it for your new projects. So, forget about this local copy and just grab the latest release every time you start a new project.

2. You aren't using a CDN-hosted copy of jQuery
How many unique visitors you`ve got last month? I bet the number is still under 1 billion, right?
So you'd better use Google's copy of jQuery instead of yours. If your user still has the cached file of Google's website (or from many other sites that uses its CDN) his browser will just get the cached version, improving a lot your website's performance. You can use it by copying & pasting this HTML:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>

3. You aren't using a fallback for CDN version
I know I said Google is awesome and stuff, but they can fail. So, every time you rely upon external sources, make sure you have a local fallback. I've seen this snippet in the HTML5 boilerplate source code and just found it amazing. You should use it too:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.2.min.js"><\/script>')</script>

4. You aren't chaining stuff
While doing common operations, you don't need to call the element every time you want to manipulate it. If you're doing several manipulations in a row, use chaining, so jQuery won't need to get the element twice.

Instead of this:

$(“#mydiv”).hide();
$(“#mydiv”).css(“padding-left”, “50px”);

Use this:

$(“#mydiv”).hide().css(“padding-left”, “50px”);

5. You aren't caching stuff
This is one of the most important performance tips. If you'll call an element at least twice, you should cache it. Caching is just saving the jQuery selector in a variable, so when you need to call it again you'll just reference the variable and jQuery won't need to search the whole DOM tree again to find your element.

/* you can use it this way because almost every jQuery function returns
the element, so $mydiv will be equal to $(“#mydiv”); also it's good to
use the $mydiv so you know it's a jQuery caching var */

var $mydiv = $(“#mydiv”).hide();
[.. lot of cool stuff going on here …]
$mydiv.show();

6. You aren't using pure js
Specially for attributes modification, we have several built in methods to get stuff done with pure javascript. You can even “convert” jQuery objects back to DOM nodes to use them with simpler methods, like this:

$mydiv[0].setAttribute('class', 'awesome'); //you can convert jQuery objects to DOM nodes using $jqObj[0]

7. You aren't checking plugins before including in your site
You know, jQuery is not the hardest thing in the world to code. But good JS (and jQuery), that is pretty hard. The bad news is that while you aren't a good programmer, you'll have to rely on trial and error to find out what is good and what isn't. A few points you must be aware of while including a plugin in your project:

File Size (the easiest to check!) ? if a tooltip plugin is bigger than jQuery source, something is really wrong;
Performance ? You can try it with firebug and others. They give you easy to understand charts to you'll know when something is out of place;
Cross-browsing ? Test, at least on IE7, but Chrome, Firefox, Safari and Opera are good ones to try also
Mobile ? Don't forget that everything is getting mobile. See if the plugin works, or at least doesn't crash your mobile browser
8. You aren't open to remove jQuery
Sometimes it's just better to remove it and use simple ol' CSS. Actually if you want, for instance, an opacity hover, or transition can be done with CSS along with good browser support. And there's no way jQuery can beat plain CSS.

9. You are using jQuery for server side tasks
I know that masking and validating are good, but don't rely just on jQuery for those. You need to recheck everything on the server side. That is especially important if you are thinking about using AJAX. Also, make sure everything will work with JS disabled.

So, it's your turn!

Do you have anything you think should be on this list? Share your thoughts!

About the Author

Javascript 相关文章推荐
textContent在Firefox下与innerText等效的属性
May 12 Javascript
弹出广告特效(一个IP只弹出一次)的代码
Jul 27 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
Sep 28 Javascript
node+express+ejs制作简单页面上手指南
Nov 26 Javascript
js实现防止被iframe的方法
Jul 03 Javascript
javascript实现简单的可随机变色网页计算器示例
Dec 30 Javascript
使用jQuery实现页面定时弹出广告效果
Aug 24 jQuery
VUE前端cookie简单操作
Oct 17 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
May 21 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
Sep 12 Javascript
angularjs手动识别字符串中的换行符方法
Oct 02 Javascript
vue项目中使用vue-i18n报错的解决方法
Jan 13 Javascript
jQuery Ajax请求状态管理器打包
May 03 #Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
May 03 #Javascript
Firefox中beforeunload事件的实现缺陷浅析
May 03 #Javascript
统计jQuery中各字符串出现次数的工具
May 03 #Javascript
JQuery插件Style定制化方法的分析与比较
May 03 #Javascript
拉动滚动条加载数据的jquery代码
May 03 #Javascript
基于jquery的固定表头和列头的代码
May 03 #Javascript
You might like
PHP脚本的10个技巧(8)
2006/10/09 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
详解PHP中foreach的用法和实例
2016/10/25 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
js实现文本上下来回滚动
2017/02/03 Javascript
canvas 绘制圆形时钟
2017/02/22 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
python常用函数详解
2016/09/13 Python
Python实现的栈(Stack)
2018/01/26 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
2018/12/18 Python
了解不常见但是实用的Python技巧
2019/05/23 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
Django中ORM的基本使用教程
2020/12/22 Python
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
自考生自我鉴定范文
2013/10/01 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
入党积极分子自我鉴定范文
2014/03/25 职场文书
公司副总经理任命书
2014/06/05 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
大队委员竞选稿
2015/11/20 职场文书
小学英语课教学反思
2016/02/15 职场文书
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis