我正在尝试创建一个语法高亮器脚本。我试着在一个一万行的代码上使用我的脚本,在加载时我看到的只是一个空白页面。当脚本完成它的任务后,一切都会显示出来。顺便说一下,我在jQuery的ready函数中调用了我的脚本。
$(myFunction);
脚本应该在页面完全呈现后执行,即使脚本还没有完成,用户也可以在页面中导航。JavaScript将在后台运行,因为它会逐个突出显示代码,而不会影响页面的响应。提前感谢。
编辑:
为了更清楚地说明这一点,我希望在所有内容都“呈现”而不是“加载”之后执行代码。所有内容都应该在屏幕上可见,用户可以看到代码在被突出显示时变得生动起来。谢谢。
5条答案
按热度按时间pcrecxhr1#
你的意思是在所有的图像都被加载之后吗?
我想window.onload就是您要找的
编辑
根据Chris的评论,下面是jQuery的方法:
4uqofj5v2#
如果你还没试过九年后。
我猜如果你把时间设置为9年的毫秒,页面可能已经呈现了,但这只是我的假设!
cyvaqqii3#
窗口出现问题.onload方法
即使您使用
$(window).load
方法,您的highlighter内容 * 也可能 * 在$(document).ready
完成之前运行,因为可能到处都有许多异步回调函数。"我的方法"
我使用了等待
document.readyState == 'complete
和setTimeout
的组合,其思想是我希望等待页面完全呈现(因此使用了'complete'
),然后进一步确保$(document).ready
JQuery Package 器内容已经完成(因此使用了setTimeout
)。假设200毫秒足够让
$(document).ready(function(){ /*...*/ });
内部的所有内容都完成,下面是我解决这个问题的方法。qybjjes14#
我知道最初的发帖者早就不想再提这个十年前的问题了,但我希望这个答案能帮助到一些人。
首先,良好的异步编程和window.onload的使用可能是解决方案的重要组成部分,具体的实现会有所不同。
我认为,我们在这里要克服的另一个问题是,客户端的主线程中完成了太多的工作。除了编写更高效的代码之外,我想不出任何方法来解决这个问题。唯一的解决方案是不在主线程中完成这些工作。一个选择是在服务器上完成更多的工作。
另一种选择是使用web worker将该工作放在后台线程中,您不能直接从工作线程更新DOM,但您仍然可以完成大部分准备工作。
如果您以前从未使用过Web工作者,请不要被吓倒;您真正需要的是
new Worker()
来启动一个后台线程,postMessage()
用来将数据从主线程发送到工作线程(反之亦然),以及onmessage
事件处理程序用来接收数据(在两个方向上)。它就像一个纯函数,运行时不会阻塞DOM,并在完成时用数据回调。
下面是一个示例实现,其中初始页面呈现为黑色文本。与此同时,web工作者决定蓝色更好,考虑了2秒钟,然后将结果报告给主线程。主线程随后更新DOM作为响应。
然后在worker.js中:
x8goxv8g5#
不确定到底有多少数据被带入...但是如果在document ready上运行一个jquery AJAX 调用并使用completed方法来运行highlighter函数会怎么样?如果有很多数据,页面加载速度会变慢。
总之想类似于这个
complete方法指定了一个在 AJAX 请求完成时要运行的函数。