Я использую оригинальный код редактора WMD (а не версию переполнения стека), так как мне нужно несколько из них на одной странице, а версия Stack Overflow сильно использует идентификаторы элементов внутри так как у них не будет более одного экземпляра редактора на странице.Редактор WMD замораживает Internet Explorer 7 в течение 3 секунд при загрузке
Код отлично работает в Firefox 3.5 и т. Д. Однако, когда я запускаю его в Internet Explorer 8 (в режиме совместимости с Internet Explorer 7), он замораживает весь браузер примерно на 3 секунды. перед появлением нового экземпляра. Я пробовал профилировать его с помощью средств разработки Internet Explorer, и кажется, что функция getWidth()
в строке 520 миниатюрной версии кода занимает все время. Однако, когда я пытался жестко закодировать возврат (поскольку он всегда возвращал то же самое), узкое место переключилось на функцию getHeight()
.
Я использую код, который я использую, чтобы преобразовать его в плагин 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
};
}();
Любая помощь будет очень признательна.
Я исследовал больше об этом, и причина замедления заключалась в том, что он загружает все изображения (которые в настоящее время хранятся как отдельные изображения) перед рендерингом редактора WMD. Итак, он ожидает, что все эти изображения будут загружены. Если я изменяю отдельные изображения на один спрайт, это ускоряет работу! – dhruvbird