我正在尝试为冲浪浏览器实现自己的链接提示脚本,并且
我一直在遇到带有
大量链接。例如,提示所有内容大约需要2秒
在https://gunther.suckless.org/patches/上显示可见链接,在上显示3秒
https://en.wikipedia.org/wiki/Japan。我认为,问题在于我
尝试使用querySelectorAll("a")
查找所有链接标记(或
getElementsByTagName("a")
-它在我的表现中几乎相同
大小写),然后通过检查功能过滤所有这些标签
链接是否在视口中(换句话说,就是找到链接
该过程将大部分时间浪费在无法显示的链接上
无论如何):
var all_elems = document.body.querySelectorAll("a");
for (var i = 0; i < all_elems.length; i++) {
if (isHintDisplay(all_elems[i])) {
hint_elems.push(all_elems[i]);
}
}
我认为,也许是一个“手动”链接标签迭代,一次处理一个链接标签,并在发现不可见链接时停止,这将是一个更好的解决方案。
我尝试使用querySelector("a")
/ parentElement
/ nextElementSibling
来实现这些迭代,但是最终得到了难看且绝对不健壮的代码...
是否有其他方法可以找到上一个/下一个类似标签而无需使用
querySelectorAll
/ getElementsByTagName
?或这些性能问题是Javascript本身固有的,没有太多可以做的事情。
改善情况?
P.S。假定已处理的标签将不包含任何ID和类。
添加
isHintDisplay的实现:
function isHintDisplay(elem) {
var pos = elem.getBoundingClientRect();
var viewHeight = Math.max(document.documentElement.clientHeight,
window.innerHeight);
return !(pos.bottom < 0 || pos.top - viewHeight >= 0);
}