2010-03-29 1 views
0

Я использую оригинальный код редактора 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 
    }; 
}(); 

Любая помощь будет очень признательна.

+0

Я исследовал больше об этом, и причина замедления заключалась в том, что он загружает все изображения (которые в настоящее время хранятся как отдельные изображения) перед рендерингом редактора WMD. Итак, он ожидает, что все эти изображения будут загружены. Если я изменяю отдельные изображения на один спрайт, это ускоряет работу! – dhruvbird

ответ

0

Может быть, заморозить время загрузки из-за IE 7, отображающего JavaScript. Firefox может быть быстрее при рендеринге, поэтому IE заставляет замораживаться.