性能优化

第一章:加载和执行

总结:

  1. 将所有<script>标签放到页面底部。这能确保在脚本执行前页面已经渲染了。
  2. 合并脚本。<script>标签越少,加载越快,响应速度也更迅速。
  3. 有多种无阻塞下载js方法:

    1)使用<script>标签的defer属性;  defer属性只有ie4+和Firefox3.5+游览器支持

    2)动态创建<script>元素来下载执行代码;

    3)使用XHR对象下载js代码并注入页面中;

第二章:数据存储

总结:

  1. 访问字面量和局部变量的速度最快,相反,访问数组元素和对象成员相对较慢。
  2. 变量,属性或方法在作用域链中的位置越深,访问所需要时间就越长。全局变量处在作用域链的最末端,因此访问速度也是最慢的。
  3. 避免使用with语句,因为它会改变执行环境作用域链,同样,try-catch也会,因此要小心使用
  4. 嵌套的对象成员尽量少用
  5. 通常来说,你可以通过把常用的对象成员、数组元素、跨域变量保存在局部变量中来改善js性能,因为局部变量访问速度更快。

第三章:获取dom元素优化

总结:

  1. 减少dom访问次数,如果需要多次访问dom节点请定义一个局部变量存储它的引用。
  2. 推荐使用速度更快的API,比如querySelectorAll()。
  3. 留言重绘重排,批量修改样式,动画中使用绝对定位。

innerHTML和createElement():

innerHTML相对createElement在创建节点速度更快,大约是3.6倍。且大多数游览器均innerHTML使用更快,除webkit游览器,createElement相对会快些。

对DOM中特定元素操作时,开发者通常需要得到比getElementById()和getElementsByTagName()更好的控制。有时候为了得到需要的元素列表,你需要组合它们并遍历返回的节点,但这种繁密的过程效率低下。这时候,使用css选择器也是一种定位节点的便利途径,这时候javascript库提供了大量API,最新的游览器提供了一个名为quertSekectorAll()的原生DOM方法。这种方法自然比使用js和DOM来遍历查找元素快,同时对目前游览器的兼容性更高。

querySelector() 方法仅仅返回匹配指定选择器的第一个元素。如果你需要返回所有的元素,请使用 querySelectorAll() 方法替代。

<div id="menu">
<a>123</a>
<a>456</a>
</div>
<script>
//获取id,遍历该id下的所有a元素 ,打印出个数
var elements=document.getElementById('menu').getElementsByTagName('a');
console.log(elements.length) //2
//使用querySelectorAll(),兼容ie6及以上
var elements2=document.querySelectorAll('#menu > a');
console.log(elements2.length) //2
</script>
同样能查找获取,如果需要大量组合查询,使用下面的效率会更好,速度很提高很多。 重绘与重排
例如:
var bodyColor=document.body.style;   //背景色被修改了2次,游览器需要刷新渲染队列   var bodyColor=document.body.style;
var bgcolor=bodyColor.background;      =========================>    v
bgcolor='red';                        优化            bgcolor='red';
console.log(bgcolor);                                  bgcolor='blue'
bgcolor="blue";                                    console.log(bgcolor);
console.log(bgcolor);                                //这里只需要读取一次 改变样式:
var eldocument.getElementById("mydiv");          var el=document.getElementById("mydiv");
el.style.borderLeft='1px';      =================>  el.style.cssText='border-left:1px; border-right:2px; padding:5px;'
el.style.borderRight='2px';        优化        //合并所有改变,然后一次处理。这样只会修改一次DOM,可以优化
el.style.padding='5px';                   //方法2: 使用className ,调用的是一个写好的css样式
//这段代码执行下来,会触发3次重排!!!              el.className='active'
												

高性能javascript-总结(一)的更多相关文章

  1. 《高性能javascript》一书要点和延伸(上)

    前些天收到了HTML5中国送来的<高性能javascript>一书,便打算将其做为假期消遣,顺便也写篇文章记录下书中一些要点. 个人觉得本书很值得中低级别的前端朋友阅读,会有很多意想不到的 ...

  2. 《高性能javascript》 领悟随笔之-------DOM编程篇(二)

    <高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...

  3. 《高性能javascript》 领悟随笔之-------DOM编程篇

    <高性能javascript> 领悟随笔之-------DOM编程篇一 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整 ...

  4. 各种JS模板引擎对比数据(高性能JavaScript模板引擎)

    最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 Ja ...

  5. 高性能javascript学习笔记系列(6) -ajax

    参考 高性能javascript javascript高级程序设计 ajax基础  ajax技术的核心是XMLHttpRequest对象(XHR),通过XHR我们就可以实现无需刷新页面就能从服务器端读 ...

  6. 高性能javascript学习笔记系列(5) -快速响应的用户界面和编程实践

    参考高性能javascript 理解浏览器UI线程  用于执行javascript和更新用户界面的进程通常被称为浏览器UI线程  UI线程的工作机制可以理解为一个简单的队列系统,队列中的任务按顺序执行 ...

  7. 高性能JavaScript 编程实践

    前言 最近在翻<高性能JavaScript>这本书(2010年版 丁琛译),感觉可能是因为浏览器引擎的改进或是其他原因,书中有些原本能提高性能的代码在最新的浏览器中已经失效.但是有些章节的 ...

  8. 高性能javascript学习笔记系列(4) -算法和流程控制

    参考高性能javascript for in 循环  使用它可以遍历对象的属性名,但是每次的操作都会搜索实例或者原型的属性 导致使用for in 进行遍历会产生更多的开销 书中提到不要使用for in ...

  9. 高性能javascript学习笔记系列(3) -DOM编程

    参考 高性能javascript 文档对象模型(DOM)是独立于语言的,用于操作XML和HTML文档的程序接口API,在浏览器中主要通过DOM提供的API与HTML进行交互,浏览器通常会把DOM和ja ...

  10. 高性能javascript学习笔记系列(2)-数据存取

    参考 高性能javascript Tom大叔深入理解javascript系列 相关概念 1.执行上下文   当控制器转到ecmascript可执行代码的时候,就会进入一个执行上下文,执行上下文是以堆栈 ...

随机推荐

  1. 了解Activity

    Android中的activity全都归属于task管理 .task 是多个 activity 的集合,这些 activity 按照启动顺序排队存入一个栈(即“back stack”).android ...

  2. Solr Principal - 工作原理/机制

    From http://lucene.apache.org/solr/guide/7_1/overview-of-documents-fields-and-schema-design.html The ...

  3. 不仅仅是百万级TCP长连接框架 t-io

    t-io: 不仅仅是百万级TCP长连接框架 t-io是基于jdk aio实现的易学易用.稳定.性能强悍.将多线程运用到极致.内置功能丰富的即时通讯框架(广义上的即时通讯,并非指im),字母 t 寓意t ...

  4. mybatis链接数据库

    DBTools类 public class DBTools { // 加载mybatis文件 public static SqlSession getSession() { //加载配置文件 Inpu ...

  5. 30443数据查询语言DQL

    5.4 SQL的数据查询功能 数据查询是数据库最常用的功能.在关系数据库中,查询操作是由SELECT语句来完成.其语法格式如下: SELECT column_expression FROM table ...

  6. kubernetes实战篇之nexus oss服务器部署及基于nexus的docker镜像仓库搭建

    系列目录 Nexus oss仓库管理平台搭建 Nexus是一款仓库管理工具,支持Npm,bower,maven,nuget,apt,yum甚至docker,helm等各种仓库,说的通俗以下,就是私服镜 ...

  7. 向HashMap中添加1000个元素,设置new HashMap()值为多少合适?

    在已知元素容量的情况下,为了尽量减少碰撞增加查询效率,应该尽量选择较大数的同时避免资源浪费. HashMap底层通过hash值来计算索引位置的源码: 1.重新计算hash值 static final ...

  8. asp.net core系列 66 Dapper介绍--Micro-ORM

    一.概述 目前对于.net的数据访问ORM工具很多,EF和EF Core是一个重量级的框架.最近在搭建新的项目架构,来学习一下轻量级的数据访问ORM工具Dapper.Dapper支持SQL Serve ...

  9. SQL Server 2012链接服务器

    第一步,在服务器对象,链接服务器那里新建链接服务器:输入要链接服务器的IP地址. 第二步,安全性输入连接数据的用户名和密码. 第三步,验证是不可以打开链接服务器库的表名,视图等数据. 第四步,如果要查 ...

  10. Django中信号signals简单使用

    在平时的开发过程中,我们会遇到一些特殊的应用场景,如果你想要在执行某种操作之前或者之后你能够得到通知,并对其进行一些你想要的操作时,你就可以用Django中的信号(signals).Django 提供 ...