我有一个div,在这个div中,我从AJAX请求的结果动态加载一段代码。然后我想用prettify来格式化它。它起作用了,但它太慢了。我使用的代码如下:
var jqxhr = $.get(fileName)
.success(function(data) {
$('#myDiv').html(data);
prettyPrint();
$('#myDiv').fadeIn();
})
简而言之,我做了GET请求,我把请求的结果放在#myDiv中,我格式化它,然后我fadeIn这个div。这需要一段时间,但负载很大。但是当我淡出div时,页面会保持几秒钟的无响应状态。我删除了prettyPrint(),页面运行得很好。有什么提示吗?
发布于 2012-04-15 02:04:40
我只是在猜测,但有几件事值得一提。
根据源代码,prettify.js的默认模式是使用continuations运行,为了避免一次占用CPU超过250ms (我引用的是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,它应该最多占用250ms,并且通过将你对fadeIn的调用放在传递给prettyPrint调用的回调函数中,它不会淡出它,直到所有的语法突出显示都完成了。如果此时对prettyPrint (250ms)的一系列调用仍然感觉很慢,其他建议可能是将最大时间值减少到小于250的值,或者找出如何确保prettyPrint只对从ajax调用中更新的元素进行prettyPrints。
https://stackoverflow.com/questions/10155017
复制相似问题