高性能Javascript总结

更新日期: 2018-05-14阅读: 2.9k标签: 性能

一、加载和运行

Javascript代码执行会阻塞其他浏览器处理过程、充分利用webpack或gulp工具对文件打包压缩,减少js文件的数量,从而减少http请求的次数,以提高网页应用的实际性能。


二、数据访问

       经典计算机科学的一个问题是确定数据应当存放在什么地方、以实现最佳的读写效率。数据存储在哪里会关系到代码运行期间数据被检索到的速度。

JS中的四种基本的数据存储位置:直接量(字符串、数字、布尔值、对象、数组、函数、正则、null、undefind)、变量、数组项、对象成员。

每一种数据存储位置都具有特定的读写操作负担。直接量和局部变量的访问速度要快于数组项和对象成员的访问速度。因此尽量使用直接量和局部变量,限制数组项和对象成员的使用。

对所有的浏览器来说,一个标识符所处的位置越深,读写它的速度就越慢。在函数体内中,如果对于使用多于一次的变量值,就尽量用局部变量存储本地范围之外的变量值。

局部变量比域外变量快,是因为他位于作用域链的第一个对象中。变量在作用域链的位置越深,访问的实际就越长。全局变量总是最慢的,因为它们总是位于作用域链的最后一环。

嵌套对象成员会造成重大性能影响,应尽量少用。


三、dom编程

文档对象模型(DOM)是一个独立于语言的,使用XML和html文档操作的应用程序接口。DOM和JS(ECMAScript)相互独立并以功能接口连接,因此每次通过js访问或修改DOM就会带来性能损耗。

一般而言,对于任何类型的DOM访问,假如同一个DOM属性或方法被访问一次以上,最好使用一个局部变量缓存此DOM成员。

        重绘和重排:当DOM改变影响到元素的几何属性(宽高)或其内部内容时,浏览器需要重新计算元素的几何属性,而且其他元素的几何属性和位置也会因此改变受到影响。浏览器使渲染树上受到的部分失效,然后重构渲染树。这个过程被称作重排。重排版完成时,浏览器会在一个重绘进程中重新绘制屏幕上受影响的部分。

引发重排的几个原因:

         1、添加或删除可见的DOM元素

         2、元素位置改变

         3、元素尺寸改变(盒子模型)

         4、内容改变

         5、最初的页面渲染

         6、浏览器窗口尺寸的改变

 针对重排和重绘引发的性能问题可以通过批量修改、离线操作DOM树、缓存并减少对布局信息的访问来降低其带来的影响。

 事件托管技术可以最小化事件句柄数量。


四、算法和流程控制

JS中的for-in循环可枚举任何对象的命名属性(包括对象的实例属性和继承而来的属性),一般不推荐使用。

JavaScript引擎所支持的递归数量与JavaScript调用栈的大小直接相关。


五、响应接口

大多数浏览器有一个单独的处理进程,它由两个任务所共享:JavaScript任何和用户界面更新任务(UI线程)。

一个单一的JavaScript操作应当使用的总时间(最大)是100毫秒。

当多个重复的定时器被同事创建会产生性能问题。因为只有一个UI线程,所有定时器竞争运行时间。


六、Ajax  异步JavaScript和XML

ajax是一种与服务器通讯而不重载当前页面的方法。

Beacons(灯标):JS用于创建一个新的Image对象,将src设置为服务器上一个脚本文件的url,该url包含希望通过get格式传回的键值对数据。

作为数据格式,纯文本和HTML是高度限制的,但其可以节省客户端的CPU周期。XML应用广泛但非常冗长且解析缓慢。json是轻量级、解析迅速,交互性和XML相当。自定义格式非常轻量。总而言之,越轻量级的格式越好,最好是json和字符分割的自定义格式。


七、编程实践

 eval()、Function()构造器、定时器(setTimeout()和setInterval())四种函数可以允许在程序中获取一个包含代码的字符串然后运行它。但此时会付出二次评估的代价,与直接包含相应代码相比将占用更长的时间。

定时器建议第一个参数传入一个函数而不是一个字符串,否则会造成内存泄漏。

JS的原生部分一般是用低级语言写的,如C++,所以无论怎样优化JS代码,永远不会比JS引擎提供的原生方法更快,比如内置的Math对象提供的诸多方法。

 

转载请注明出处 http://www.cnblogs.com/jiangcheng-langzi/



链接: https://fly63.com/article/detial/763

提高js加载速度,实现js无阻塞加载方式,高性能的加载执行JavaScript

为解决JS加载速度慢,采用js的延时加载,和动态加载。由于js的堵塞特性,当浏览器在加载javascript代码时,不能同时做其他任何事情,如果javascript执行时间越久,浏览器等待响应的时间就越久。

如何提高CSS性能?CSS优化、提高性能提升总汇

如何提高CSS性能,根据页面的加载性能和CSS代码性能,主要表现为: 加载性能 (主要是从减少文件体积,减少阻塞加载,提高并发方面入手),选择器性能,渲染性能,可维护性。

前端性能优化_css加载会造成哪些阻塞现象?

css的加载是不会阻塞DOM的解析,但是会阻塞DOM的渲染,会阻塞link后面js语句的执行。这是由于浏览器为了防止html页面的重复渲染而降低性能,所以浏览器只会在加载的时候去解析dom树,然后等在css加载完成之后才进行dom的渲染以及执行后面的js语句。

2018 前端性能检查表

性能十分重要。然而,我们真的知道性能瓶颈具体在哪儿吗?是执行复杂的 JavaScript,下载缓慢的 Web 字体,巨大的图片,还是卡顿的渲染?研究摇树(Tree Shaking),作用域提升(Scope Hoisting)

优化网站性能规则_前端性能优化策略【网络加载、页面渲染】

前端网站性能优化规则:网络加载类、页面渲染类。包括:减少 HTTP 资源请求次数、减小 HTTP 请求大小、避免页面中空的 href 和 src、合理设置 Etag 和 Last-Modified、使用可缓存的 AJAX、减少 DOM 元素数量和深度等

前端性能的本质是什么?

性能一直以来是前端开发中非常重要的话题。随着前端能做的事情越来越多,浏览器能力被无限放大和利用:从 web 游戏到复杂单页面应用,从 NodeJS 服务到 web VR/AR 和数据可视化,前端工程师总是在突破极限

BigPipe_高性能流水线页面技术

BigPipe是一个重新设计的基础动态网页服务体系。大体思路是,分解网页成叫做Pagelets的小块,然后通过Web服务器和浏览器建立管道并管理他们在不同阶段的运行。这是类似于大多数现代微处理器的流水线执行过程:多重指令管线通过不同的处理器执行单元,以达到性能的最佳。

用CSS开启硬件加速来提高网站性能

你知道我们可以在浏览器中用css开启硬件加速,使GPU (Graphics Processing Unit) 发挥功能,从而提升性能吗?现在大多数电脑的显卡都支持硬件加速。鉴于此,我们可以发挥GPU的力量,从而使我们的网站或应用表现的更为流畅。

原生js实现懒加载并节流

像淘宝网站等,页面中有着大量图片,一次性全部加载这些图片会使浏览器发送大量请求和造成浪费。采用懒加载技术,即用户浏览到哪儿,就加载该处的图片。这样节省网络资源、提升用户体验、减少服务器压力。

php中一些提高性能的技巧

【概述】* 把类定义成static* echo比print快* 用全等号代替双等,减少类型转换* echo用逗号连接字符串效率高* require比require_once()快,并且尽量不要使用相对路径

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!