jQuery能处理非常大的文档吗?

Will jQuery work on a very large document?

本文关键字:文档 处理 非常 jQuery      更新时间:2023-09-26

大家好!我有一个问题:jQuery。我们有一个软件应用程序正在生成一个非常大的HTML报告……可印刷500-2000页。谷歌浏览器从硬盘上加载它需要12-20秒。

有一些JavaScript在使用,只是为了给HTML版本的报告一些额外的功能。现在,所有的事件都是由内联HTML onclick等触发的。

如果我转换到jQuery并使用选择器来绑定事件,选择器可以很容易地匹配成千上万个元素中的10个。另外,使用jQuery的典型方法(例如:($(document).ready())将导致click事件直到文档完全加载后才触发。

所以问题是:jQuery是否能够胜任这项任务?还是我更适合留下内联脚本?如果是,我是否需要使用某些技巧来使其发挥作用?是否有一种方法可以规避"在文档加载之前没有事件"的情况?

第二个问题 (这是我在写这篇文章时突然想到的):这份报告被卖给了一个客户。如果jQuery作为报告的一部分包含,我的许可义务是什么?

编辑

@jfriend00:我对如何做到这一点有点茫然(拆分报告)。该报告以HTML和PDF两种格式发布。客户希望有一个数字手册,他们可以从中打印部分。他们还想要HTML版本,因为它提供了链接关键部分的锚。JavaScript允许弹出窗口,该窗口提供了对报告所基于的底层数据的视图。我们遇到了一个规模问题。所分析的数据大大增加了,结果报告的大小也大大增加了。

出于保密原因,该报告不能在线直播,也不能在内部内网上直播。它必须是可以在单个本地机器上运行的可交付产品。

如果有人有关于如何优雅地处理这个问题的建议,我很乐意听到你的想法。这是一个困扰我一段时间的问题

document.ready而言,您可以使用.live()函数来绑定您的事件,以便事件处理程序将随着元素添加到DOM而添加:

代替:

$(function () {
    $(<selector>).bind(<event>, <callback>);
});

您可以使用.live():

$(<selector>).live(<event>, <callback>);

.live()描述(http://api.jquery.com/live/):

为所有匹配当前元素的事件附加一个处理程序选择器,现在和将来。

jquery几乎可以胜任任何任务。问题是,如果浏览器将这些报告加载到可以跟上。你可以在报告中嵌入一个"开始处理"指令,每隔一定的行数,所以(说)100行报告出来后,有一个JS调用启动你的脚本在这100行。

然后是另一个100行报告,和另一个函数调用。这很痛苦,但至少前几百行可以在页面加载时进行交互。

至于#2,这是一个法律问题。jquery在MIT/GPL双重许可下,所以你可能没问题,但请咨询律师以确定。如果你因为侵犯版权而被告上法庭,"但是网上随便有个怪人说没关系!"并不是一个有效的辩护。

至于许可部分,我认为你没问题,因为jQuery是免费使用的,并且没有特定的客户端部署规则。

至于性能部分,我认为jQuery不是问题。当然,对于一个大DOM,一切都会变慢一些。我认为你还需要看看浏览器,因为它们都使用不同的js引擎来执行你的脚本。

如果脚本变慢了,你可能想要把事情分开或添加更具体的选择器,而不是一点一点地处理你的报告。

为500-2000个打印页面的文档进行分页,并使用ajax动态加载内容。