J'utilise le code original de l'éditeur WMD (pas la version Stack Overflow) car j'ai besoin de plusieurs d'entre eux sur la même page et la version de Stack Overflow utilise intensivement les ID d'élément en interne car ils ne vont pas avoir plus d'une instance d'éditeur par page.L'éditeur WMD gèle Internet Explorer 7 pendant 3 secondes en charge
Le code fonctionne bien dans Firefox 3.5, etc. Cependant, lorsque je l'exécute dans Internet Explorer 8 (en mode de compatibilité Internet Explorer 7), il gèle le navigateur entier pendant environ 3 secondes. avant qu'une nouvelle instance apparaisse. J'ai essayé de le profiler avec les outils de développement d'Internet Explorer, et il semble que la fonction getWidth()
sur la ligne 520 de la version minifiée du code prend tout le temps. Cependant, quand j'ai essayé de coder en dur le retour (puisqu'il revenait toujours la même chose), le goulot d'étranglement est passé à la fonction getHeight()
.
Je joins le code que j'utilise pour le convertir en un plugin jQuery.
jQuery.fn.wmd = function(params) {
function createInstance(container, params) {
/* Make sure WMD has finished loading */
if (!Attacklab || !Attacklab.wmd) {
alert("WMD hasn't finished loading!");
return;
}
var defaultParams = {
width : "600px",
rows : 6,
autogrow : false,
preview : false,
previewDivClassName: "wmd-preview-div"
};
if (typeof(params) == "undefined") {
var params = defaultParams;
}
else {
var params = jQuery.extend({}, defaultParams, params);
}
/* Build the DOM elements */
var textarea = document.createElement("textarea");
textarea.style.width = params.width;
textarea.rows = params.rows;
jQuery(container).append(textarea);
var previewDiv = document.createElement("div");
if (params.preview) {
jQuery(previewDiv).addClass(params.previewDivClassName);
jQuery(container).append(previewDiv);
}
/* Build the preview manager */
var panes = {input:textarea, preview:previewDiv, output:null};
var previewManager = new Attacklab.wmd.previewManager(panes);
/* Build the editor and tell it to refresh the preview after commands */
var editor = new Attacklab.wmd.editor(textarea,previewManager.refresh);
/* Save everything so we can destroy it all later */
var wmdInstance = {ta:textarea, div:previewDiv, ed:editor, pm:previewManager};
var wmdInstanceId = $(container).attr('postID');
wmdInstanceProcs.add(wmdInstanceId, wmdInstance);
if (params.autogrow) {
// $(textarea).autogrow();
}
};
if (jQuery(this).html().length > 0) {
var wmdInstanceId = jQuery(this).attr('postID');
var inst = wmdInstanceProcs.get(wmdInstanceId);
jQuery(inst.ta).show();
}
else {
createInstance(this, params);
}
}
jQuery.fn.unwmd = function(params) {
var wmdInstanceId = $(this).attr('postID');
var inst = wmdInstanceProcs.get(wmdInstanceId);
if (inst != null) {
jQuery(inst.ta).hide();
}
}
wmdInstanceProcs = function() {
var wmdInstances = { };
var getProc = function(wmdInstanceId) {
var inst = wmdInstances[wmdInstanceId];
if (typeof(inst) != "undefined") {
return inst;
}
else {
return null;
}
};
var addProc = function(wmdInstanceId, wmdInstance) {
wmdInstances[wmdInstanceId] = wmdInstance;
};
return {
add: addProc,
get: getProc
};
}();
Toute aide serait grandement appréciée.
J'ai étudié plus à ce sujet et la raison du ralentissement était que IE récupère toutes les images (qui sont actuellement stockées en tant qu'images individuelles) avant de rendre l'éditeur WMD. Ainsi, il attend que toutes ces images soient téléchargées. Si je change les images individuelles en un seul sprite, cela accélère beaucoup! – dhruvbird