避免双重求值 有四个标准函数可以允许你传入代码的字符串,然后它才你动态执行.它们分别是:eval.Function.setTimeout.setInterval 事实上当你在javascript代码中执行另外一段javascript代码时,都会导致双重求值的性能消耗,所以在大多数情况下,没必要使得eval和Function函数,因此最好避免使用它们.至于setTimeout和setInterval,建议传入函数而不是字符串来作为第一个参数 现在Safari4和chrome的javaScript引…
----------------------------------------------------------- 第一章 加载和执行 -------------------------------------1.脚本位置    浏览器在遇到<script>标签时会等待脚本下载完并执行完才会继续渲染页面        因为js代码有可能会改变dom结构,所以需要等待js的执行完成        遇到<script>标签 -> 下载脚本 -> 执行脚本 -> 继…
最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却五脏俱全,主要涵盖:编程风格(基本格式化.注释.语句和表达式.变量),编程实践(UI层松耦合.避免使用全局变量等).自动化,3个部分的内容. 本文主要整理归纳了书中编程实践章节的核心内容,其他两章编码风格和自动化部分,还需结合当前的流行趋势重新整理,稍后再与大家分享. 第5章 UI层的松耦合 Web开发三大要…
我们知道.DOM是用于操作XML和HTML文档的应用程序接口,用脚本进行DOM操作的代价非常昂贵. 有个贴切的比喻.把DOM和JavaScript(这里指ECMScript)各自想象为一个岛屿,它们之间用收费桥梁连接,ECMAScript每次訪问DOM.都要途径这座桥,并交纳"过桥费",訪问DOM的次数越多,费用也就越高.因此.推荐的做法是尽量降低过桥的次数,努力待在ECMAScript岛上.我们不可能不用DOM的接口,那么.如何才干提高程序的效率? 1.DOM訪问与改动 訪问DOM元…
首先什么是DOM?为什么慢? DOM:文档对象模型,是一个独立于语言的,用于操作XML和HTML文档的程序接口(API) 用脚本进行DOM操作的代价很昂贵.那么,怎样才能提高程序的效率? 1.DOM访问与修改 访问DOM元素是有代价的,修改元素代价更是昂贵,因为它会导致浏览器重新计算页面的几何变化(重排和重绘). 尤其是在循环中访问或者修改元素,看下面两段代码: var times = 15000; console.time(1); for(var i = 0; i < times; i++)…
写在前面 好的书,可能你第一遍并不能领会里面的精魂,当再次细细品评的时候,发现领悟的又是一层新的含义 (这段时间,工作上也不会像从前一样做起来毫不费力,开始有了新的挑战,现在的老大让我既佩服又嫉妒,但真的是打心底里仰慕,希望自己有朝一日能过到他那个高度) 既然现在还达不到那个层次,就好好堆砖吧,当砖堆到一定高度也自然会上一个小台阶. 脚本位置 脚本会阻塞页面渲染,直到它们全部下载并执行完成,页面才会继续渲染.页面只有加载并执行完前面一个script外部文件才会去加载下面一个script标签. 在…
第三部分 DOM编程 文档对象模型(DOM)是一个独立于语言的,使用XML和HTML文档操作的应用程序接口(API).在浏览器中,主要与HTML文档打交道,在网页应用中检索XML文档也很常见.DOM APIs主要用于访问这些文档中的数据.尽管DOM是与语言无关的API,在浏览器中的接口却是以JavaScript实现的.客户端大多数脚本程序与文档打交道,DOM就成为JavaScript代码日常行为中重要的组成部分. 2.1 DOM Access and Modification  DOM访问和修改…
循环 在javaScript中的四种循环中(for.for-in.while.do-while),只有for-in循环比其它几种明显要慢,另外三种速度区别不大 有一点需要注意的是,javascript没有块级作用域,只有函数级作用域,也就是说在for循环初始化中的var语句会创建一个函数级变量而非循环级变量 优化循环的方法有如下 1.减少对象成员及数组项的查找次数(使用局部变量保存需要查找的对象成员) 2.颠倒数组的顺序来提高循环性能,也就是从最后一项开始向前处理 for (var i = ar…
JavaScript定义变量: var num;变量的类型不知道,当给num赋值后,根据值类型来确定类型. var num = 3; //数值类型 var str = "hello,world"; //字符串类型 var tf = "true"; //布尔类型 运算符(+,-,*,/,%),单目运算符(++,--),逻辑运算符(且&&,或||),分支(if),循环(for) 跟java一样 JavaScript函数:使用关键字 function  定…
最近买了本新书,准备自己吃 狗粮的同时也吃点精神食粮.笔记总结,从现在开始,看我啥时候能看完这本酥,就酱紫, begin:…
1.数据类型 - JS中一共分成六种数据类型 - String 字符串 - Number 数值 - Boolean 布尔值 - Null 空值 - Undefined 未定义 - Object 对象 - 其中基本数据类型有 - String 字符串 - JS中的字符串需要使用引号引起来双引号或单引号都行 - 在字符串中使用\作为转义字符 \' ==> ' \" ==> " \n ==> 换行 \t ==> 制表符 \\ ==> \ - 使用typeof运算…
JS基本概念 JS操作符 JS基本语句 JS数组用法 Date用法 JS字符串用法 JS编程风格 JS编程实践 不知不觉做前端已经五年多了,无论是从最初的jQuery还是现在火热的Angular,Vue,React等前端框架,甚至是nodejs等服务端的兴起,归根到底,我始终觉着一切的核心还是JavaScript.于是最近就有了一个想法,想要梳理一下这些年学习以及使用JS的心得. 本系列文章主要是针对JS的相关知识点做一个类似提纲似的提炼,一来可以作为今后温故知新的参照:二来也是希望能够帮助大家…
参考高性能javascript 理解浏览器UI线程  用于执行javascript和更新用户界面的进程通常被称为浏览器UI线程  UI线程的工作机制可以理解为一个简单的队列系统,队列中的任务按顺序执行 <button onclick="handleClick()">click</button> <script type="text/javascript"> function handleClick() { var div = do…
上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. 二.编程实践 1.UI松耦合 第一.将css从javascript中抽离(要改变dom样式数据,应该去操作dom的class名而非dom的style属性,后续要修改此样式只需到对应的css文件中修改而不用修改js文件): 第二.将javascript从HTML中抽离,比如下面的写法是不好的 <!-- 不…
本书的第二个部分总结了有关编程实践相关的内容,每一个章节都非常不错,捡取了其中5个章节的内容.对大家组织高维护性的代码具有辅导作用. 5个章节如下—— 一.UI层的松耦合 二.避免使用全局变量 三.事件处理 四.将配置数据从代码中分离出来 五.抛出自定义错误 一.UI层的松耦合 如果两个组件耦合太紧,则说明一个组件和另一个组件直接相关,这样的话,如果修改一个组件的逻辑,那么另外一个组件的逻辑也需要修改.比如,有一个名为error的CSS类名,它是贯穿整个站点的,它被嵌入到HTML之中.如果有一天…
前言 最近在翻<高性能JavaScript>这本书(2010年版 丁琛译),感觉可能是因为浏览器引擎的改进或是其他原因,书中有些原本能提高性能的代码在最新的浏览器中已经失效.但是有些章节的有些内容还是相当不错的,譬如第八章编程实践,为了方便以后的查阅,对此做个总结.失效的代码也会在以后做更进一步的探索. 避免双重求值 这个优化策略很好理解,我们可能都已经不知不觉地运用在了实际的编程中: // not use this setTimeout('alert("hello world&qu…
JavaScript语言精髓与编程实践读书笔记 function v1(v1){ v1 = 100; alert('v1:'+v1); } function v2(name){ v1.apply(this, arguments); alert(name); } //显示传入的参数未被修改, 值 v2('myName');…
参考 高性能javascript 文档对象模型(DOM)是独立于语言的,用于操作XML和HTML文档的程序接口API,在浏览器中主要通过DOM提供的API与HTML进行交互,浏览器通常会把DOM和javascript独立实现,这意味着当我们通过javascript操作DOM的时候势必的产生性能上的开销,因此提升页面性能的的思路是尽可能的减少DOM操作或者优化DOM操作 DOM的访问与修改 (1)减少频繁的读取DOM元素 (1)for(var i = 0;i < 10;i++) { documen…
之前有篇博客曾提到过一点js的面向对象编程:js面向对象编程. 这里就结合js高程详细剖析一下javascript的面向对象编程. 前序: 1⃣️Object.defineProperty() var obj = { _name:'jack' }; Object.defineProperty(obj,'name',{ configurable:false,//表示能否通过delete删除属性从而重新定义属性,默认值true value:'orange',//属性的数据值,默认值undefined…
这本<高性能JavaScript>讲述了有关JavaScript性能优化的方方面面,主要围绕以下几个方面: 1> 加载顺序 2> 数据访问(如怎样的数据类型访问最快,怎样的作用域链最优) 3> DOM编程(如怎样的方式访问DOM元素性能是最优的) 4> 字符串和正则 5> Ajax 6> 编程实践(性能测试工具的使用.创建与部署JavaScript应用程序.如何提升程序响应) var script = document.createElement (&quo…
第一章 加载和运行 延迟脚本 defer 该属性表明脚本在执行期间不会影响到页面的构造,脚本会先下载但被延迟到整个页面都解析完毕后再运行.只适用于外部脚本 <script src="js/test.js" defer></script> <div>123</div> <script> alert('script'); window.onload = function(){ alert('loaded'); } </scr…
<高性能javascript> 领悟随笔之-------DOM编程篇二 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整个页面文档.DOM编程性能一直以来都是非常受开发者关注的话题,如何编写高性能的DOM是前端开发必不可少的技能. 1.重绘与重排 当浏览器加载完页面所有的元素.js.css.图片之后会自动生成两个数据结构: 1.dom树 (图片为转载) 如图所示,dom树表示了整个页面文档的结构,通过访问dom树我们可以得到某…
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX <CMake实践>笔记三:构建静态库与动态库 及 如何使用外部共享库和头文件 五.静态库与动态库构建 读者云,太能罗唆了,一个Hello World就折腾了两个大节.OK,从本节开始,我们不再折腾Hello World了,我们来折腾Hello World的共享库. 本节的任务: 1.建立一个静态库和动…
有幸看到iteye的活动,有幸读到<JavaScript语言精髓与编程实践_第2版>的试读版本,希望更有幸能完整的读到此书. 说来读这本书的冲动,来得很诡异,写一篇读后感,赢一本书,其实奖励并不大,依靠纯粹的物质奖励,很显然,不会强烈的促使我去读这本书.而原因在于,一方面对javascript的极大兴趣,另一方面之前已经拜读过如<javascript高级程序设计><高性能javascript><javascript设计模式>等书,那我就有了要看看这本书都写了…
我们知道,对DOM的操作都是非常的耗性能的,那么为什么会耗性能呢?      文档对象模型(DOM)是一个独立于语言的,使用 XML和 HTML 文档操作的应用程序接口(API).在浏览器中,主要与 HTML 文档打交道,在网页应用中检索 XML 文档也很常见.DOM APIs 主要用于访问这些文档中的数据.尽管 DOM 是与语言无关的 API,在浏览器中的接口却是以 JavaScript 实现的.客户端大多数脚本程序与文档打交道,DOM 就成为 JavaScript 代码日常行为中重要的组成部…
第八章.编程实践 Programming Practices 经验: 避免使用 eval_r()和Function构造器避免二次评估.此外,给setTimeout()和setInterval()函数传递参数而不是字符串参数. 创建新对象和数组使用对象直接量和数组直接量.它们比非直接量形式创建和初始化更快. 避免重复进行相同工作.当需要检测浏览器时,使用延迟加载或条件预加载. 当执行数学运算时,考虑使用位操作,它直接在数字底层操作. 原生方法总是比其他方法写的东西更快,尽量使用原生方法. 第九章.…
笔记内容多摘录自<JavaScript设计模式与开发实践>(曾探著),侵删. 面向对象的JavaScript 1. 动态需要类型和鸭子类型 鸭子类型 如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子 只关注对象的行为,而不关注对象本身,也就是关注has-a,而不是is-a 面向接口编程而不是面向实现编程 2. 多态 同一操作作用于不同的对象上,可以产生不同的解释和不同的执行结果. 多态背后的思想是将"做什么"和"谁去做"以及"怎么做&quo…
第2章 this call apply bind()方法创建一个新的函数,在bind()被调用时,这个新函数的this被bind的第一个参数指定,其余的参数将作为新函数的参数供调用时使用. bind()方法底层实现 Function.prototype.bind = Function.prototype.bind || function () { var self = this var rest1 = Array.prototype.slice.call(arguments) var conte…
<高性能javascript> 领悟随笔之-------DOM编程篇一 序:在javaSctipt中,ECMASCRIPT规定了它的语法,BOM实现了页面与浏览器的交互,而DOM则承载着整个页面文档.DOM编程性能一直以来都是非常受开发者关注的话题,如何编写高性能的DOM是前端开发必不可少的技能. 1.DOM访问与修改 访问DOM元素是有一定的性能代价的,有时候这种代价会整体拖慢网页的运行速度,例如循环访问或修改一些元素内容,操作不当会导致页面卡帧,甚至是假死,例如下面的代码. functio…
参考 高性能javascript javascript高级程序设计 ajax基础  ajax技术的核心是XMLHttpRequest对象(XHR),通过XHR我们就可以实现无需刷新页面就能从服务器端读取数据 var xhr = new XMLHttpRequest(); //只支持IE7以及更高的版本 xhr.onreadystatechange = function() { if(xhr.readyState == 4) { if( (xhr.status >= 200 && xh…