在开发过程中使用javascript时,请说一个照片博客,您可以从文件夹中检索所有图像并以所有独特方式显示它,或者进行ajax调用以从服务器检索数据并加载它,并在所有样式和逻辑上应用飞(或任何涉及硬编码跨越数百行甚至数千的js代码的东西),JS开发人员专注于使代码更高效(在性能方面)的所有领域。
例如,我们遇到了很多在线画廊。如果他必须将50个图像从他的服务器加载到网站上,那么js开发人员首先关注的是第一件事。我提出这个问题只是为了让JS代码的实例不得不处理相当多的数据。
我正在寻找的是,我目前正在参与JS开发,当我编写中型(或大型)js应用程序时,我应该集中精力提高性能。
编写更高效的JS代码的任何建议都会有很大的帮助。
答案 0 :(得分:2)
我的一位教授说 - "好的算法,不需要微观优化"。
有类似的question。 JavaScript的问题在于它并不是单独存在于网页中。有HTML(DOM)和CSS。
关于使用的内存 - 这是一个基本问题。如果你想要更快的速度,你需要更多的内存,或者其他方式。这是一种权衡wikipedia。你必须定义某种平衡。在我个人看来(如here),您将获得更清晰的代码,更少的变量(对象)没有克隆,HTML将更清洁。限制持有DOM集合引用的变量。
关于循环 - 循环本身不是问题。问题出在循环内部:不要一遍又一遍地检查一下。使用memoization wikipedia。小心DOM集合的迭代,如果随着时间的推移有很多动态添加的元素,它们可能会变慢。使用变量来缓存当前状态或位置(哦!在此处进行权衡)。
像jQuery这样的第三方库非常有用,因为它们提供了在每个浏览器上执行相同操作的统一方法。但是就像jQueryUI寻找模块中的一些。很多时候我只需要在jQuery中包含的另一个名为sizzle的lib中的选择器,而不是整个。但尽管如此,我还是反对他们的统治地位。 HTML5正在传播并呈现本机功能,至少如果不是更好的话应该更快。
关于算法 - 使用设计模式。它们是多年来发展起来的技术,经过测试和验证。就像使用闭包,未命名的自执行函数一样,它可以阻止全局变量等......
当然还有其他有用的技巧:
var doc = document;
之类的内容,缩短了document
的调用次数; 作为您可能与否的工具,熟悉:
答案 1 :(得分:1)
使用profiler衡量您的效果瓶颈所在的位置,然后了解您可以对它们采取的措施。
即使是优秀的程序员也非常擅长构建性能 最终错误的论据,所以最好的程序员更喜欢 剖析器和测试用例进行推测。 - Martin Fowler
答案 2 :(得分:1)
性能调优非常非常特定于应用程序。正如Donald Knuth says,
我们应该忘记小的效率,比如大约97%的时间:过早的优化是所有邪恶的根源
通常,最好的想法是编写应用程序,然后根据需要确定需要优化的内容。应用程序加载时间太长?使用minifier并延迟加载重型资源(如图像)。 CPU使用率太高了?也许你过于频繁而不是批量更新DOM。在获得工作样本之前,您不会知道,然后对其进行分析。
第三方库是获取原型并快速工作的绝佳工具。缺点通常是1)它们的有效负载可能很大,增加了加载时间(虽然这可以通过使用CDN /缓存来减轻),2)它们使得处理CPU密集的事情变得容易得多,因为它隐藏了很多发生了什么事。虽然这只是一个问题,但如果你遇到CPU问题,情况并非总是如此(如果没有分析,很难提前知道)。
每当您修改DOM时,浏览器都必须重排并找出如何使用您的更改呈现页面。这就是为什么建议您使用CSS类来修改/更改样式,因为它们可以一次更改,其中堆叠样式更改意味着为您要更改的每个属性重排。
这些类型的JS性能提示大量涌现。这一切归结为您的实际工作示例基于探查器(例如Chrome开发工具中提供的)以及用户体验向您展示。