编程实践

避免双重求值其实就是字符类型的js代码被运行时所产生的第二次运行求值我们都知道eval()方法是可以将字符类型的js代码运行的,但是除了它还有其他三种方法也支持。new Function()setTimeout()setInterval()这三个方法也都支持传入一个字符串类型的js代码,然后当这个函数运行后会识别这个字符并运行传入的js。这样就会产生两次求值,其中eval和Function这两种方法用的很少,甚至不使用了,而定时器确是比较常用的手段,所以为了规避这个问题,定时器里面第一个参数不要传字符,而是用函数封装。避免重复的工作在事件函数上,我们要做两个判断,要判断这个浏览器是支持d...

0
0

Ajax

异步监听readyState == 3当readyState的值等于3时,此时服务器正在与浏览器传输数据,这个时候其实是可以进行获取到responseText值得,但是这个值并不完整,只有当readyState == 4时,值才是完整的。但是如果我们需要获取的内容是极其长的字符,那么就可以通过监听这个状态,然后轮询的方式,可以在内容没有全部下载来之前就可以提前更新内容了,这样就可以避免在下载的过程中产生的等待时间。var req = new XMLHttpRequest(); var getLastInterval =null, lastLength = 0; req.open(...

0
1

字符和正则表达式

字符串连接标准的方式都是A+B通过+进行连接,如果是下面这种写法:str += 'one' + 'two';这段代码会经历四个步骤:先在内存中创建一个新的临时字符串(内容为空)one和two先进行连接并赋值给临时字符串临时字符串与str进行连接返回的值赋值给str如果我们这样写可以避免创建临时字符串str += 'one'; str += 'two';因为只有一个字符串需要添加,然后str本身就是字符串,所以只对str进行了操作,没有再去创建新的临时字符。但是这样写太过麻烦,于是可以这样写:str = str + 'one' + 'two';因为字符的操作是从=符号开始,从左到右操...

0
0

算法和流程控制

循环for循环是常见的编程模式之一,也是提升性能必须要关注的要点之一。js的循环有四种:for循环while循环do--while循环for--in循环其中在浏览器中,while的循环会快于for循环,而for--in循环是最慢的,因为他会先从对象实例属性开始到从原型链继承而来的属性一一枚举。如何提高循环的性能?首先我们要知道,除了for--in,其他的循环性能都差不多,深究那种循环最快其实没有什么意义,循环的方式要看你环境的需求,那么抛开最快来讲,我们怎么才能提高循环的性能?无非就两点:每次循环处理的事物循环的次数通过减少两者中的一个,或者全部的时间开销,就可以提升整体的性能。减少循环...

0
0
算法和流程控制

DOM编程

dom是浏览器中非常重要的一部分,他其实相对于js是一个独立的语言,我们通过js去操作其实只是利用api沟通,并不是直接操作的,也就是说dom和js是两个部分,他们之间通过api进行沟通,那么这个沟通的过程自然就会产生性能的损耗,那么你沟通的越多,网页的响应速度就越慢。dom的访问与修改function innerHtmlLoop() { for(var i =0;i<15000;i++) { document.getElementById('box').innerHtml += 'a'; } }这里我们对元素box添加内容,添加15000个a字符,这里就进行了15...

0
0

数据存取

JavaScript中,不同存储位置,他的读取速度是不一样的,就好像一个距离你只有一米的饮料和一个距离你十米的饮料,当然是一米的你拿起来喝的速度最快。js中有四种基本的数据存取位置:1.字面量字面量只代表自身,不存储在特定的位置,js的字面量有:字符串、数字、布尔值、对象、数组、函数、正则表达式、及特殊的null和undefined值。你可以这么理解,if(true)语句中的true布尔值就是字面量,他就是一个值,不需要命名什么的就可以用的那种。2.本地变量使用var定义的数据存储单元,被作用域影响读取快慢。3.数组元素存储在JavaScript数组中的,以数字作为索引。4.对象成员存储...

0
0

加载和执行

js的加载会阻塞页面的加载和渲染,那么常用的方式就是将script元素放置在body元素里面最底下的位置,但是这样还是会有阻塞,但是不会阻塞下载,阻塞的是渲染,也就是说,js运行长时间的话,页面也会长时间显示空白,哪怕所有的资源都已经下载完毕了。延迟脚本为此便有了无阻塞的模式,那么最简单的就是给script添加defer和async属性了,但是这两个属性当初也只有ie支持,其他的浏览器并不支持,但是目前为止,如果都是新版本的浏览器,这两个属性已经全面支持了。defer表示当前的js文件不需要修改dom,所以他会在dom加载完运行,async则是异步加载,谁先加载谁先运行,但是如果js文件...

0
0
加载中