jQuery能处理非常大的文档吗?
Will jQuery work on a very large document?
大家好!我有一个问题: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动态加载内容。
- 是否存在Javascript Liferay Service库的文档?如何处理错误情况
- 使用mongoose保存多个文档时的错误处理
- RxJs如何处理文档事件
- 在火狐插件中处理右键单击,仅适用于文档
- 如何使用 AngularJS 处理文档单击并通知其他控制器
- 将 AJAX 响应作为文档处理
- 谷歌脚本 - 将 Gmail 附件添加到文档和云端硬盘中的处理
- 文档.写入和委托事件处理程序持久性
- Twitter 引导弹出窗口 :如何在不使用正文/文档事件处理程序的情况下在外面单击时隐藏它
- 处理上传的文本文件后,在Google云端硬盘中创建新的文档
- 阻止删除在准备就绪的文档上分配的处理程序
- CouchDB更新处理程序:文档id不能为空
- 函数没有'我不处理文档
- 如何在嵌入式文档中处理DOM事件
- alert()在加载jQuery文档就绪处理程序时未显示
- 为什么toggle()能处理文档而不能处理正文
- 为什么我的点击处理程序已经在文档上运行了
- Jquery反弹动画函数来处理文档加载
- Jquery trigger()无法处理文档就绪
- 有没有办法处理加载缓慢的文档.写脚本