【问题标题】:Disable JavaScript function based on the user's computer's performance根据用户计算机的性能禁用 JavaScript 功能
【发布时间】:2011-03-17 14:54:05
【问题描述】:

我的网站有一个 jQuery 脚本(来自 Shadow animation jQuery plugin),它不断改变主页上各种<div>s 的框阴影颜色。

动画不是必需的,但在较慢的机器上确实会占用大量 CPU 时间。

是否可以确定脚本是否会“运行得太慢”?然后我可以在它影响性能之前将其禁用。

这是个好主意吗?如果没有,是否有一种简单的方法来分解 jQuery 动画?

【问题讨论】:

  • 如果有什么安慰的话 - 它看起来很漂亮。
  • 我不是 javascript 专家,但我的猜测是“不容易”。 (我最近开始考虑类似的想法。)到目前为止,我最好的建议可能是通过 Date 对象添加您自己的性能监控。每隔一段时间采样一次,如果差异超过某个阈值,请停止脚本执行动画。但是,我们会看看是否有人有更正确的建议! :)
  • +1 考虑到客户端的渲染性能是个好主意。
  • Google 实际上在他们的即时搜索中做了类似的事情。有一次我在一台速度很慢的计算机上,几秒钟后,即时搜索被自动禁用,并显示一条消息,说明计算机无法处理它。

标签: javascript jquery performance jquery-plugins


【解决方案1】:

这可能会间接解决您的问题。从这个站点http://dromaeo.com/ 中挑选一些看起来与您的 jQuery 插件相似的算法和性能测试。不要像在网站上那样运行综合测试。相反,选择相当小和快速的算法,并运行它们一段不明显的时间。

使用一个微小的预定义时间跨度来限制允许这些测试运行多长时间。假设该跨度为 200 毫秒,并且在具有浏览器 A 的快速机器上,您可以获得 100 次迭代,而在某些随机用户的机器上,它只能完成 5 次迭代,那么您可能需要考虑在用户的机器上禁用它机器。不断调整,直到找到最佳数字。

作为奖励,将所有测试结果发送回您的服务器,以便您更好地了解您的用户在速度范围内的位置。如果绝大多数用户使用速度较慢的计算机和较旧的浏览器,那么完全删除这些东西可能是有意义的。

【讨论】:

  • 你能解释一下在哪里可以找到测试的源代码吗?
【解决方案2】:

您可能可以通过在循环中对页面加载进行一些密集处理来计时几次来做到这一点,但这会减慢页面速度并进一步增加 CPU 负载,因此这似乎不是一个很好的解决方案.

不过,我过去使用的一种折衷方案是根据浏览器版本做出决定,例如,Internet Explorer 6 用户获得更简单的内容,而具有更好 JavaScript 性能的较新浏览器获得动画。在实际水平上,这似乎工作得很好。在实践中,浏览器的选择是影响 JavaScript 性能的一个重要因素,只要考虑到这一点,您可能会得到 90% 的匹配度。

【讨论】:

  • 不过,第二个想法将无法检查计算机性能...确实,许多快速计算机的所有者正在使用慢速软件,只是因为他们没有注意到它很慢。跨度>
  • 好主意。我没有任何数据,但我敢打赌,运行 IE6 的用户比运行 Chrome 的用户的计算机功能更弱(例如)
  • 一般来说是的,我想是的。除此之外,具有慢速 javascript 引擎的浏览器在任何机器上都无法很好地执行密集型任务,因此虽然它不是 100% 的解决方案,但禁用基于浏览器版本的密集型、非关键功能确实会有所帮助。
【解决方案3】:

您可以执行$(window).width() 之类的操作来获取浏览器宽度。使用它,您可以假设任何< 1024px 宽的东西都可能是上网本、智能手机或旧电脑。

这不会像计时循环那样准确,但效率更高。

显然它的这条规则是一个概括,会有 > 1024px 的慢速计算机。但总的来说,一台 1024 像素以上的计算机通常能够处理相当多的 javascript(直到所有者加载大量软件、病毒扫描和浏览器工具栏!)

希望这有用!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    相关资源
    最近更新 更多