1
0
mirror of https://github.com/DataTables/DataTables.git synced 2025-02-18 16:54:14 +01:00

Fix: The initalisation object was being cloned on init which could cause a major performance hit if you pass in a large data set into dt-init data. The table node and internal API reference also should not be cloned.

* Thank you to B Lyon for spotting this issue and writing it up:
  http://www.nowherenearithaca.com/2015/03/avoiding-performance-gotcha-with-jquery.html
This commit is contained in:
Allan Jardine 2015-03-02 13:25:51 +00:00
parent ba62dcba43
commit 7ef92e4f56
3 changed files with 6 additions and 5 deletions

View File

@ -1 +1 @@
f4d088020e88ecb2e079f61254934acec7026ec2
995cb50c3050e97fe7a1e5a4d1a6763238e91a50

View File

@ -6140,13 +6140,14 @@
/* Create the settings object for this table and set some of the default parameters */
var oSettings = $.extend( true, {}, DataTable.models.oSettings, {
"nTable": this,
"oApi": _that.internal,
"oInit": oInit,
"sDestroyWidth": $this[0].style.width,
"sInstance": sId,
"sTableId": sId
} );
oSettings.nTable = this;
oSettings.oApi = _that.internal;
oSettings.oInit = oInit;
allSettings.push( oSettings );
// Need to add the instance after the instance after the settings object has been added

View File

@ -81,7 +81,7 @@ a.nodeName.toLowerCase():"";return b!==k||"td"==d||"th"==d?c.cell(a,b).data():c.
function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){var c=this.api(!0).page(a);(b===k||b)&&c.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===k||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return za(this[x.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var g=this.api(!0);
c===k||null===c?g.row(b).data(a):g.cell(b,c).data(a);(e===k||e)&&g.columns.adjust();(d===k||d)&&g.draw();return 0};this.fnVersionCheck=x.fnVersionCheck;var b=this,c=a===k,d=this.length;c&&(a={});this.oApi=this.internal=x.internal;for(var e in o.ext.internal)e&&(this[e]=Nb(e));this.each(function(){var e={},e=1<d?Lb(e,a,!0):a,h=0,i,j=this.getAttribute("id"),m=!1,l=o.defaults,p=g(this);if("table"!=this.nodeName.toLowerCase())R(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{eb(l);
fb(l.column);H(l,l,!0);H(l.column,l.column,!0);H(l,g.extend(e,p.data()));var n=o.settings,h=0;for(i=n.length;h<i;h++){var r=n[h];if(r.nTable==this||r.nTHead.parentNode==this||r.nTFoot&&r.nTFoot.parentNode==this){h=e.bRetrieve!==k?e.bRetrieve:l.bRetrieve;if(c||h)return r.oInstance;if(e.bDestroy!==k?e.bDestroy:l.bDestroy){r.oInstance.fnDestroy();break}else{R(r,0,"Cannot reinitialise DataTable",3);return}}if(r.sTableId==this.id){n.splice(h,1);break}}if(null===j||""===j)this.id=j="DataTables_Table_"+
o.ext._unique++;var q=g.extend(!0,{},o.models.oSettings,{nTable:this,oApi:b.internal,oInit:e,sDestroyWidth:p[0].style.width,sInstance:j,sTableId:j});n.push(q);q.oInstance=1===b.length?b:p.dataTable();eb(e);e.oLanguage&&O(e.oLanguage);e.aLengthMenu&&!e.iDisplayLength&&(e.iDisplayLength=g.isArray(e.aLengthMenu[0])?e.aLengthMenu[0][0]:e.aLengthMenu[0]);e=Lb(g.extend(!0,{},l),e);E(q.oFeatures,e,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));
o.ext._unique++;var q=g.extend(!0,{},o.models.oSettings,{sDestroyWidth:p[0].style.width,sInstance:j,sTableId:j});q.nTable=this;q.oApi=b.internal;q.oInit=e;n.push(q);q.oInstance=1===b.length?b:p.dataTable();eb(e);e.oLanguage&&O(e.oLanguage);e.aLengthMenu&&!e.iDisplayLength&&(e.iDisplayLength=g.isArray(e.aLengthMenu[0])?e.aLengthMenu[0][0]:e.aLengthMenu[0]);e=Lb(g.extend(!0,{},l),e);E(q.oFeatures,e,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));
E(q,e,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"],["bJQueryUI","bJUI"]]);E(q.oScroll,e,[["sScrollX","sX"],["sScrollXInner",
"sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);E(q.oLanguage,e,"fnInfoCallback");z(q,"aoDrawCallback",e.fnDrawCallback,"user");z(q,"aoServerParams",e.fnServerParams,"user");z(q,"aoStateSaveParams",e.fnStateSaveParams,"user");z(q,"aoStateLoadParams",e.fnStateLoadParams,"user");z(q,"aoStateLoaded",e.fnStateLoaded,"user");z(q,"aoRowCallback",e.fnRowCallback,"user");z(q,"aoRowCreatedCallback",e.fnCreatedRow,"user");z(q,"aoHeaderCallback",e.fnHeaderCallback,"user");z(q,"aoFooterCallback",
e.fnFooterCallback,"user");z(q,"aoInitComplete",e.fnInitComplete,"user");z(q,"aoPreDrawCallback",e.fnPreDrawCallback,"user");j=q.oClasses;e.bJQueryUI?(g.extend(j,o.ext.oJUIClasses,e.oClasses),e.sDom===l.sDom&&"lfrtip"===l.sDom&&(q.sDom='<"H"lfr>t<"F"ip>'),q.renderer)?g.isPlainObject(q.renderer)&&!q.renderer.header&&(q.renderer.header="jqueryui"):q.renderer="jqueryui":g.extend(j,o.ext.classes,e.oClasses);p.addClass(j.sTable);if(""!==q.oScroll.sX||""!==q.oScroll.sY)q.oScroll.iBarWidth=Hb();!0===q.oScroll.sX&&