私はいくつかの Jquery コードをクリーンアップしています。私はいつも読んでいますが、チェーンはパフォーマンスに優れています。
質問:これには、多数のqueue() および filter()
を持つチェーンも含まれますか?
たとえば、チェーンを解除しました:
var self = this,
co = el.jqmData("panel"),
pop = $('div:jqmData(id="'+co+'")'),
wrap = pop.closest('div:jqmData(wrapper="true")');
if ( pop.is(":visible") ) {
if ( pop.hasClass('switchable') && wrap.jqmData('switchable') ) {
pop.css('display','none').addClass("switched-hide");
self.panelWidth( true );
} else {
self.hideAllPanels("8");
}
} else {
if ( pop.hasClass('switchable') && wrap.jqmData('switchable') ) {
pop.css('display','block').removeClass("switched-hide");
self.panelWidth( true );
} else {
self.hideAllPanels("8");
if ( pop.hasClass('ui-popover-center') ){
pop.css("left", (($(window).width() - pop.outerWidth()) / 2) + $(window).scrollLeft() + "px");
}
pop.jqmData("fixed") == "top" ?
pop.css( "top", $( window ).scrollTop() + "px" ) :
pop.css( "bottom", wrap.outerHeight() - $( window ).scrollTop() - $.mobile.getScreenHeight() + "px" );
...there's more
}
そもそも重複したコードが好きではありませんでした。私は今、そのようにチェーンされたバージョンで遊んでいて、やり過ぎているのではないかと心配しています:
wrap.filter(':jqmData(switchable="true")')
.find( pop )
.filter('.switchable:visible')
.css('display','none')
.addClass("switched-hide")
.end()
.filter('.switchable:hidden')
.css('display','block')
.removeClass("switched-hide")
.end()
.queue(function(next){
self.panelWidth( true )
next();
})
.end()
.end() // back to wrap
.filter(':not(:jqmData(switchable="true")')
.find( pop )
.queue(function(next){
self.hideAllPanels("8")
next();
})
.filter('.ui-popover-center')
.css("left", (($(window).width() - pop.outerWidth()) / 2) + $(window).scrollLeft() + "px")
.end()
.filter(':jqmData(fixed="top")')
.css( "top", $( window ).scrollTop() + "px" )
.end()
.filter(':jqmData(fixed="bottom")')
.css( "bottom", wrap.outerHeight() - $( window ).scrollTop() - $.mobile.getScreenHeight() + "px" )
.end()
...
質問:
特に queue() と filter() を使用している場合、Jquery の連鎖がパフォーマンスに悪影響を与えるポイントはありますか?
ご意見ありがとうございます。
PS: 上記はテストしていません。おそらくいくつかの間違いがあります。概念的な情報をもっと探しています。