`
PatrickZhong
  • 浏览: 12111 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Tips and Tricks to improve JQuery efficiency

 
阅读更多
Tips and Tricks to improve JQuery efficiency
* Always use the latest version of jQuery core where possible.
* Use faster selector
	- id selector, tag selector > class selector > pseudoclass selector, attribute selector
* Faster way to get child ele from a parent ele.
	- $parent.find('.child')
* Don't use jQuery unless it's absolutely necessary
	- javascript's original methods are faster.
* Do cache
	- var parents = $('.parents'); // caching
	  {
	  // bad way
	  children = $('.parents').find('.child');
	  others = $('.parents').find('.others');
	  }
	  {
	  // better way, use cache
	  children = parents.find('.child');
	  others = parents.find('.others')
	  }
* Chaining
	- e.g. var parents = $('.parents').doSomething().doSomethingElse();
	- in this way, jQuery will cache the result of each step automatically, 
	  so it's faster than non-chaining way.
* Use event delegation
	- javascript allow events to bubble up the DOM tree to a parent element.
	  as "<table><tr></tr>...<tr></tr></table>", it's better to bind a single
	  event handler to <table> element than each <tr> element.
	  2 ways for delegation:
	  1) // .delegate() method  
		 $("td").bind("click",function(){
			$(this).toggleClass("click");
		 });
	  2) // .live() method
		 $("table").each(function(){
			$("td",this).live("click", function(){
			$(this).toggleClass("click");
			});
		 });
	  Difference:
	  .delegate() fire when event bubble to the specific parent element.
	  .live() fire when event bubble to the root element.
	  so .delegate() is a little faster than .live()
* You'd better not to modify the DOM tree
	- each DOM insertion is costly. so be careful to use append(), 
	  insertBefore(), insertAfter()
	  if you want to insert several element items, you can put them together
	  and use a single append() method
	- when you're doing heavy interaction with a node, you should use .detach() method first.
	- if you're to attach data to a node, please use $.data(elem,key,value)
	  //bad
	  var ele = $('#elem');
	  ele.data(key, value);
	  //good, 10 times faster than above one
	  var ele = $('#elem');
	  $.data(ele, key, value);
* Understand loops
	- unless absolutely necessary, avoid loops.
	- javascript's for, while statement is faster than jQuery.each() method
* Avoid constructing new jQuery object unless necessary
	- // slower
	  var $text = $('#text');
	  var $ts = $text.text();
	  // faster
	  var $text = $('#text');
	  var $ts = $.text($text);


// http://addyosmani.com/jqprovenperformance/

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics