如何检测页面是否因第三方JavaScript而变慢?

9
对于我们这些运营内容网站并与广告网络打交道的人来说,对抗恶意或故障的流氓广告是很令人沮丧的。
我拥有一个嵌入了许多Youtube和Dailymotion视频的网站。偶尔会出现糟糕的广告,导致视频播放卡顿。我总是根据具体情况处理这些问题。但是,有没有一种方法可以使用JavaScript检测页面是否缓慢?
在我的脑海中,一个非常简陋的方法是定时器以100毫秒的速度运行。如果它检测到一个间隔中有很大的延迟,就采取相应措施。还有其他更优雅的方法吗?

我今天在一个名为Techsnap的播客上听到了这样一段内容,一个广告公司的员工说,他们故意减慢页面加载速度,以延长展示时间...从而赚更多的钱。所以是的,广告,尤其是Flash广告,这就是为什么我完全禁用了Flash,一切都运行得很好。 - Piotr Kula
@ppumkin 哇,这就是我认为网络广告领域需要革命的众多原因之一。有太多可以利用的地方。最近,我不得不处理一个奇怪的流氓广告,它禁用了页面滚动和右键单击... - Dave
是的...Flash是0day漏洞或未修补浏览器中漏洞的主要来源...问题在于,遗憾的是没有可以替代Flash的东西 :( 而且Adobe发布补丁的速度惊人地缓慢,并威胁白帽研究人员进行反向工程并免费为Adobe提供补丁。这是苹果的一个优点,他们解决了这些问题并禁止使用Flash...但缺点是他们不想分享。Google和Firefox是唯一积极开发Flash替代品的人...但是这需要很长时间,并且非常有错误。 - Piotr Kula
1
Chrome自2015年9月1日起开始阻止Flash广告。https://plus.google.com/+GoogleAds/posts/2PmwKinJ7nj - Dave
好消息...先是YouTube,现在又是广告...我喜欢Google这一点...其他人还在假装Flash没有问题... - Piotr Kula
我认为艾伦·图灵曾经问过同样的问题... - Mad Physicist
1个回答

1

第一种方法,如果你的网页加载速度过慢,可以为广告创建占位符,并在其他所有内容加载完成后再加载广告。

第二种方法,创建一个JavaScript定时器或包含一个计时器库来测量页面加载时间。如果超过你所接受的阈值,则使用JavaScript杀掉广告或将缓慢记录到Web服务中。

第三种方法,如果计时器没有检测到缓慢,因为它是增量式的,那么可以使用setTimeout函数记录时间戳,并每200毫秒调用自身一次,并将每次调用的新时间戳与前一次调用的旧时间戳进行比较。

如果设置为200ms运行的setTimeout调用需要500ms才能最终运行,那么你就有了相当大的延迟,应该使用JavaScript杀掉广告或将缓慢记录到Web服务中。

每种方法都需要根据实际网站进行调整。


如果广告是从Flash加载的,JavaScript将无法检测到“缓慢”,因为JavaScript引擎仍在运行而没有滞后...它们将其他垃圾放入Flash中,导致UI变得非常缓慢,另一个进程不可访问JavaScript。Flash需要很快死掉,非常快。 - Piotr Kula
Flash广告可能对JavaScript引擎没有压倒性的影响,但如果该广告导致整个网页由于浏览器完全减速而变得缓慢,JavaScript计时器将会显示出来。 - N-ate
我真的很想测试一下...因为根据我的经验,操作系统的整体滞后并不会影响浏览器进程(内存空间进程)...因为它们具有不同的优先级。不过,Chrome有一些很好的性能测试工具。 - Piotr Kula
你说得对,这可能是一个冒险。如果延迟只是图形方面的话,那么JavaScript将按预期运行。 - N-ate
1
你甚至可以编写一个闪存性能测试器... :) 监控用户计算机的 CPU 使用情况并将其转储到服务中... 哇,现代世界中闪存的一个实际用例 :) - Piotr Kula
1
你可能会遇到同样的问题。如果缓慢是图形而不是特定的Flash引擎问题,那么即使有糟糕的广告,Flash性能测试也可能表现良好。:( - N-ate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接