使用JS提高性能

时间:2012-05-08 21:29:48

标签: javascript performance

在开发过程中使用javascript时,请说一个照片博客,您可以从文件夹中检索所有图像并以所有独特方式显示它,或者进行ajax调用以从服务器检索数据并加载它,并在所有样式和逻辑上应用飞(或任何涉及硬编码跨越数百行甚至数千的js代码的东西),JS开发人员专注于使代码更高效(在性能方面)的所有领域。

例如,我们遇到了很多在线画廊。如果他必须将50个图像从他的服务器加载到网站上,那么js开发人员首先关注的是第一件事。我提出这个问题只是为了让JS代码的实例不得不处理相当多的数据。

我正在寻找的是,我目前正在参与JS开发,当我编写中型(或大型)js应用程序时,我应该集中精力提高性能。

  1. 在使用的内存方面?
  2. 在提高循环效率方面?
  3. 在使用Jquery或Dojo等第三方框架方面?
  4. 在设计和Algo使用方面(我猜这个选项总是打开的)
  5. 编写更高效的JS代码的任何建议都会有很大的帮助。

3 个答案:

答案 0 :(得分:2)

我的一位教授说 - "好的算法,不需要微观优化"。

有类似的question。 JavaScript的问题在于它并不是单独存在于网页中。有HTML(DOM)和CSS。

  1. 关于使用的内存 - 这是一个基本问题。如果你想要更快的速度,你需要更多的内存,或者其他方式。这是一种权衡wikipedia。你必须定义某种平衡。在我个人看来(如here),您将获得更清晰的代码,更少的变量(对象)没有克隆,HTML将更清洁。限制持有DOM集合引用的变量。

  2. 关于循环 - 循环本身不是问题。问题出在循环内部:不要一遍又一遍地检查一下。使用memoization wikipedia。小心DOM集合的迭代,如果随着时间的推移有很多动态添加的元素,它们可能会变慢。使用变量来缓存当前状态或位置(哦!在此处进行权衡)。

  3. 像jQuery这样的第三方库非常有用,因为它们提供了在每个浏览器上执行相同操作的统一方法。但是就像jQueryUI寻找模块中的一些。很多时候我只需要在jQuery中包含的另一个名为sizzle的lib中的选择器,而不是整个。但尽管如此,我还是反对他们的统治地位。 HTML5正在传播并呈现本机功能,至少如果不是更好的话应该更快。

  4. 关于算法 - 使用设计模式。它们是多年来发展起来的技术,经过测试和验证。就像使用闭包,未命名的自执行函数一样,它可以阻止全局变量等......

  5. 当然还有其他有用的技巧:

    • 缩小代码
      • YUI compressorGoogle Closure compiler,节省带宽;
      • 还有obfuscaters和packers - 具有良好的算法,他们 可能 有帮助,但有时他们可能会引入错误! ;
      • 在某些网页上,您可能看到var doc = document;之类的内容,缩短了document的调用次数;
    • 使用CDN - 来自GoogleASP主机;
    • 图片优化 - JPG can be optimized尺寸较小(关于图库);
    • 在另一台主机上导出JavaScript和CSS等静态内容,以防止反复发送cookie数据。 (这里的另一个副作用是您不需要安装服务器端语言,只需要http服务器)

    作为您可能与否的工具,熟悉:

    • JsLint - 检查JavaScript代码错误;
    • JsonLint - 检查json数据中的错误;
    • JsPerf - 用于测试和比较脚本的性能。还包含其他用户设计的测试列表;
    • regexpal - 正则表达式助手;
    • 有很多"粘贴&分享"网站jsfiddle,pastebin等;

答案 1 :(得分:1)

使用profiler衡量您的效果瓶颈所在的位置,然后了解您可以对它们采取的措施。

  

即使是优秀的程序员也非常擅长构建性能   最终错误的论据,所以最好的程序员更喜欢   剖析器和测试用例进行推测。    - Martin Fowler

答案 2 :(得分:1)

性能调优非常非常特定于应用程序。正如Donald Knuth says

  

我们应该忘记小的效率,比如大约97%的时间:过早的优化是所有邪恶的根源

通常,最好的想法是编写应用程序,然后根据需要确定需要优化的内容。应用程序加载时间太长?使用minifier并延迟加载重型资源(如图像)。 CPU使用率太高了?也许你过于频繁而不是批量更新DOM。在获得工作样本之前,您不会知道,然后对其进行分析。

第三方库是获取原型并快速工作的绝佳工具。缺点通常是1)它们的有效负载可能很大,增加了加载时间(虽然这可以通过使用CDN /缓存来减轻),2)它们使得处理CPU密集的事情变得容易得多,因为它隐藏了很多发生了什么事。虽然这只是一个问题,但如果你遇到CPU问题,情况并非总是如此(如果没有分析,很难提前知道)。

每当您修改DOM时,浏览器都必须重排并找出如何使用您的更改呈现页面。这就是为什么建议您使用CSS类来修改/更改样式,因为它们可以一次更改,其中堆叠样式更改意味着为您要更改的每个属性重排。

这些类型的JS性能提示大量涌现。这一切归结为您的实际工作示例基于探查器(例如Chrome开发工具中提供的)以及用户体验向您展示。