3

我有一个 div,我在其中从 AJAX 请求的结果中动态加载一段代码。然后我想使用 prettify 对其进行格式化。它可以工作,但速度很慢。我使用的代码如下:

var jqxhr = $.get(fileName)
 .success(function(data) {
  $('#myDiv').html(data);
  prettyPrint();
  $('#myDiv').fadeIn();
})

简而言之,我执行 GET 请求,将请求的结果放入#myDiv 中,然后对其进行格式化,然后在 div 中淡入淡出。这需要一段时间,但加载。但是当我淡出 div 时,页面会在几秒钟内保持无响应。我删除了 prettyPrint() 并且页面表现得非常完美。有什么提示吗?

4

1 回答 1

3

我只是推测,但有几点值得一提。

根据消息来源,prettify.js 的默认模式是使用延续运行,并避免一次占用 CPU 超过 250 毫秒(我在http://code.google.com/p引用源/google-code-prettify/source/browse/trunk/src/prettify.js):

/**
 * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
 * UI events.
 * If set to {@code false}, {@code prettyPrint()} is synchronous.
 */
window['PR_SHOULD_USE_CONTINUATION'] = true;

您在上面编写代码的方式表明它可能被配置为以同步模式运行,这就是它速度慢并且占用您的页面的原因。您应该确保此标志未设置为 false,并将您的 fadeIn 调用添加到您传递给 prettyPrint 调用的回调函数中。

假设我理解正确,如果你设法在异步模式下运行 prettyPrint,它最多应该占用 250 毫秒,并且通过将你对 fadeIn 的调用放在传递给 prettyPrint 调用的回调函数中,它不会褪色直到所有语法突出显示完成。如果当时对 prettyPrint(250 毫秒)的一系列调用仍然感觉很慢,其他建议可能是将最大时间值减少到小于 250 的值,或者找出如何确保 prettyPrint 仅从 prettyPrints 更新的元素你的ajax调用。

于 2012-04-14T18:04:40.257 回答