Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在运行时判断浏览器是否太慢而无法正常处理复杂的JavaScript/CSS的最佳方法是什么?_Javascript_Performance_Browser_Benchmarking - Fatal编程技术网

什么';在运行时判断浏览器是否太慢而无法正常处理复杂的JavaScript/CSS的最佳方法是什么?

什么';在运行时判断浏览器是否太慢而无法正常处理复杂的JavaScript/CSS的最佳方法是什么?,javascript,performance,browser,benchmarking,Javascript,Performance,Browser,Benchmarking,我一直在考虑逐步启用/禁用页面上的JavaScript(和CSS)效果,这取决于浏览器的速度 我特别想到的是低功耗的移动设备和老式台式电脑——而不仅仅是IE6:-) 有没有这样的例子 衡量这一点的最佳方法是什么——考虑一些事情,比如繁忙CPU上的临时减速 注意事项: 我对浏览器/操作系统检测不感兴趣 目前,我对带宽测量不感兴趣——只对浏览器/cpu性能感兴趣 可能值得衡量的事情: 基本JavaScript DOM操作 DOM/CSS呈现 我希望这样做的方式尽可能少地影响页面的渲染速度 顺

我一直在考虑逐步启用/禁用页面上的JavaScript(和CSS)效果,这取决于浏览器的速度

我特别想到的是低功耗的移动设备和老式台式电脑——而不仅仅是IE6:-)

有没有这样的例子

衡量这一点的最佳方法是什么——考虑一些事情,比如繁忙CPU上的临时减速

注意事项:

  • 我对浏览器/操作系统检测不感兴趣
  • 目前,我对带宽测量不感兴趣——只对浏览器/cpu性能感兴趣
  • 可能值得衡量的事情:
    • 基本JavaScript
    • DOM操作
    • DOM/CSS呈现
  • 我希望这样做的方式尽可能少地影响页面的渲染速度
顺便说一句:为了不让不一致的行为迷惑/激怒用户,这当然需要屏幕上的通知,以允许用户选择加入/退出整个性能调整过程


[更新:我错过了一个相关的问题:。谢谢!]

你可以尝试一些基本操作的时间安排——看看史蒂夫·苏德的剧集和雅虎的《回力棒》,找到一个很好的方法来安排浏览器端的内容。然而,要计算出这些指标与可接受的性能水平/有回报的用户体验之间的关系将相当复杂


如果你打算提供一个用户界面,让用户选择加入/退出,为什么不让用户选择应用程序中的眼力级别和渲染速度呢?

在这里不是一个杀手锏,但在我看来,这不是一个目前可能以任何有意义的方式实现的壮举

这有几个原因,主要有:

  • 无论您做什么测量,如果要有任何意义,都必须测试浏览器/cpu的最大潜力,这是您无法做到的,并且无法保持任何合理的用户体验

  • 即使可以,这也将是一个毫无意义的快照,因为在测试运行时,您不知道cpu在浏览器以外的其他应用程序中承受何种负载,并且在用户访问您的网站时,这种情况是否会继续

  • 即使你能做到这一点,每个浏览器都有自己的优缺点,也就是说,你必须测试每个dom操作函数,以了解浏览器完成它的速度,根据我的经验,这里没有“一般”或“一般”意义,即使有,dom操纵命令的执行速度取决于dom中当前内容的上下文,当您操纵它时,上下文会发生变化

  • 你能做的最好是

  • 让你的用户决定他们想要什么,如果他们后悔的话,让他们很容易改变决定

    或者更好

  • 选择给他们一些你可以合理确定的东西,让你的大部分目标受众都能享受


  • 有点离题,但遵循以下思路:如果你的用户不是他们社交圈的技术领袖(就像这里的大多数用户一样,但世界上的大多数人不是),不要给他们太多选择,也就是说,任何并非绝对必要的选择——他们不想要它,而且在为时已晚之前,他们也不了解自己决定的技术后果。

    看看谷歌的一些(受版权保护的!)基准:

    我选择了几个比较简单的方法,让您了解可以自己创建用于测试功能集的类似基准。只要您在最慢的系统上(这些Google测试远远大于)将测试从开始记录到完成记录的时间间隔保持在100ms以下,您就应该获得所需的信息,而不会损害用户体验。虽然谷歌基准测试关注的是速度更快的系统之间的粒度,但你不关心。您只需要知道哪些系统需要超过XXms才能完成


    您可以测试正则表达式操作(与上面类似)、字符串连接、页面滚动、任何导致浏览器重新绘制或回流的操作等。

    另一种不需要显式基准测试的方法是逐步启用功能

    您可以按优先级顺序应用功能,在每一个功能之后,如果经过一定的时间,就放弃其余的功能


    确保最昂贵的功能排在最后,您将根据浏览器的速度为用户提供一些适当的功能选择。

    一些想法:

    • 对考试设置时间限制似乎是一个显而易见的选择
    • 将测试结果存储在cookie中似乎也是显而易见的
    • 测试的测试性能不佳可能会暂停更多脚本
      • 并触发非阻塞提示UI的显示(类似于现代web浏览器中常见的保存密码提示)
      • 这会询问用户是否希望选择进一步的脚本效果,并将答案存储在cookie中
      • 当用户未响应提示时,定期重复测试,如果连续测试完成速度快于第一个测试,则自动接受脚本提示。
    • 另一方面,也可能测试网络速度较慢
      • 通过定时下载外部资源(如页面拥有CSS或JavaScript文件)
      • 并将该结果与JavaScript基准测试结果进行比较
      • 这在依赖XHR效果负载和/或大量使用
        s的站点上可能很有用。
    • 似乎DOM渲染/操纵
      let now, finishTime, i = 0;
      now = Date.now();//Returns the number of miliseconds after Jan 01 1970
      finishTime = now + 200; //We add 200ms (1/5 of a second)
      while(now < finishTime){
          i++;
          now = Date.now();
      }
      console.log("I looped " + i + " times!!!");