mirror of
https://github.com/jupyter/notebook.git
synced 2025-01-30 12:11:32 +08:00
get rid of most slowdown at notebook loading.
1) Do not setOption('mode',new_mode) on CM if new and old mode are the same. It triggert **a lot** of calculation of bounding box in the end. 2) Do **not** select cell when loading the notebook it triggers **a lot** of CM even that check visible things and so on and so forth. So add a option to add_cell_at_index not to select it 3) jQuery $.attr has some magics, but has a slight overhead on real native ELEM.setAttribute DOM method. Seem slight improvement when loads of PNGs on one page
This commit is contained in:
parent
5db9624d44
commit
048ccde41b
@ -295,6 +295,7 @@ var IPython = (function (IPython) {
|
|||||||
this.code_mirror.setOption('mode', mode);
|
this.code_mirror.setOption('mode', mode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
var current_mode = this.code_mirror.getOption('mode', mode);
|
||||||
var first_line = this.code_mirror.getLine(0);
|
var first_line = this.code_mirror.getLine(0);
|
||||||
// loop on every pairs
|
// loop on every pairs
|
||||||
for( var mode in modes) {
|
for( var mode in modes) {
|
||||||
@ -303,8 +304,12 @@ var IPython = (function (IPython) {
|
|||||||
for(var reg in regs ) {
|
for(var reg in regs ) {
|
||||||
// here we handle non magic_modes
|
// here we handle non magic_modes
|
||||||
if(first_line.match(regs[reg]) != null) {
|
if(first_line.match(regs[reg]) != null) {
|
||||||
|
if(current_mode == mode){
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (mode.search('magic_') != 0) {
|
if (mode.search('magic_') != 0) {
|
||||||
this.code_mirror.setOption('mode', mode);
|
this.code_mirror.setOption('mode', mode);
|
||||||
|
console.log('from',current_mode,'to',mode)
|
||||||
CodeMirror.autoLoadMode(this.code_mirror, mode);
|
CodeMirror.autoLoadMode(this.code_mirror, mode);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -312,6 +317,9 @@ var IPython = (function (IPython) {
|
|||||||
var close = modes[mode]['close']|| "%%end";
|
var close = modes[mode]['close']|| "%%end";
|
||||||
var mmode = mode;
|
var mmode = mode;
|
||||||
mode = mmode.substr(6);
|
mode = mmode.substr(6);
|
||||||
|
if(current_mode == mode){
|
||||||
|
return;
|
||||||
|
}
|
||||||
CodeMirror.autoLoadMode(this.code_mirror, mode);
|
CodeMirror.autoLoadMode(this.code_mirror, mode);
|
||||||
// create on the fly a mode that swhitch between
|
// create on the fly a mode that swhitch between
|
||||||
// plain/text and smth else otherwise `%%` is
|
// plain/text and smth else otherwise `%%` is
|
||||||
@ -328,6 +336,7 @@ var IPython = (function (IPython) {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
this.code_mirror.setOption('mode', mmode);
|
this.code_mirror.setOption('mode', mmode);
|
||||||
|
console.log('from',current_mode,'to', mmode)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -339,7 +348,11 @@ var IPython = (function (IPython) {
|
|||||||
} catch(e) {
|
} catch(e) {
|
||||||
default_mode = 'text/plain';
|
default_mode = 'text/plain';
|
||||||
}
|
}
|
||||||
|
if( current_mode === default_mode){
|
||||||
|
return
|
||||||
|
}
|
||||||
this.code_mirror.setOption('mode', default_mode);
|
this.code_mirror.setOption('mode', default_mode);
|
||||||
|
console.log('from',current_mode,'to', default_mode)
|
||||||
};
|
};
|
||||||
|
|
||||||
IPython.Cell = Cell;
|
IPython.Cell = Cell;
|
||||||
|
@ -789,8 +789,8 @@ var IPython = (function (IPython) {
|
|||||||
*
|
*
|
||||||
* @return cell {cell|null} created cell or null
|
* @return cell {cell|null} created cell or null
|
||||||
**/
|
**/
|
||||||
Notebook.prototype.insert_cell_at_index = function(type, index){
|
Notebook.prototype.insert_cell_at_index = function(type, index, opts){
|
||||||
|
var opts = opts || {select:false};
|
||||||
var ncells = this.ncells();
|
var ncells = this.ncells();
|
||||||
var index = Math.min(index,ncells);
|
var index = Math.min(index,ncells);
|
||||||
index = Math.max(index,0);
|
index = Math.max(index,0);
|
||||||
@ -810,7 +810,9 @@ var IPython = (function (IPython) {
|
|||||||
|
|
||||||
if(this._insert_element_at_index(cell.element,index)){
|
if(this._insert_element_at_index(cell.element,index)){
|
||||||
cell.render();
|
cell.render();
|
||||||
this.select(this.find_cell_index(cell));
|
if(opts.select){
|
||||||
|
this.select(this.find_cell_index(cell));
|
||||||
|
}
|
||||||
$([IPython.events]).trigger('create.Cell', {'cell': cell, 'index': index});
|
$([IPython.events]).trigger('create.Cell', {'cell': cell, 'index': index});
|
||||||
this.set_dirty(true);
|
this.set_dirty(true);
|
||||||
}
|
}
|
||||||
@ -886,9 +888,9 @@ var IPython = (function (IPython) {
|
|||||||
* @return handle to created cell or null
|
* @return handle to created cell or null
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
Notebook.prototype.insert_cell_below = function (type, index) {
|
Notebook.prototype.insert_cell_below = function (type, index, opts) {
|
||||||
index = this.index_or_selected(index);
|
index = this.index_or_selected(index);
|
||||||
return this.insert_cell_at_index(type, index+1);
|
return this.insert_cell_at_index(type, index+1, opts);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -900,9 +902,9 @@ var IPython = (function (IPython) {
|
|||||||
*
|
*
|
||||||
* @return the added cell; or null
|
* @return the added cell; or null
|
||||||
**/
|
**/
|
||||||
Notebook.prototype.insert_cell_at_bottom = function (type){
|
Notebook.prototype.insert_cell_at_bottom = function (type, opts){
|
||||||
var len = this.ncells();
|
var len = this.ncells();
|
||||||
return this.insert_cell_below(type,len-1);
|
return this.insert_cell_below(type,len-1, opts);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1588,7 +1590,7 @@ var IPython = (function (IPython) {
|
|||||||
cell_data.cell_type = 'raw';
|
cell_data.cell_type = 'raw';
|
||||||
}
|
}
|
||||||
|
|
||||||
new_cell = this.insert_cell_below(cell_data.cell_type);
|
new_cell = this.insert_cell_at_bottom(cell_data.cell_type,{select:false});
|
||||||
new_cell.fromJSON(cell_data);
|
new_cell.fromJSON(cell_data);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -576,12 +576,13 @@ var IPython = (function (IPython) {
|
|||||||
|
|
||||||
OutputArea.prototype.append_png = function (png, md, element) {
|
OutputArea.prototype.append_png = function (png, md, element) {
|
||||||
var toinsert = this.create_output_subarea(md, "output_png");
|
var toinsert = this.create_output_subarea(md, "output_png");
|
||||||
var img = $("<img/>").attr('src','data:image/png;base64,'+png);
|
var img = $("<img/>")
|
||||||
|
img[0].setAttribute('src','data:image/png;base64,'+png);
|
||||||
if (md['height']) {
|
if (md['height']) {
|
||||||
img.attr('height', md['height']);
|
img[0].setAttribute('height', md['height']);
|
||||||
}
|
}
|
||||||
if (md['width']) {
|
if (md['width']) {
|
||||||
img.attr('width', md['width']);
|
img[0].setAttribute('width', md['width']);
|
||||||
}
|
}
|
||||||
this._dblclick_to_reset_size(img);
|
this._dblclick_to_reset_size(img);
|
||||||
toinsert.append(img);
|
toinsert.append(img);
|
||||||
|
Loading…
Reference in New Issue
Block a user