又要开始罗里吧嗦的 第四章  Summary 了. 这一次我尽量精简语言. 如果你认为 重复调用一个方法数次有点辣眼睛的话 比如: function test(i){ process(i++); process(i++); process(i++); process(i++); } 那么你可能选择更优解 比如: function test(i){ for(j=0,j<4,j++){ process(i++); } } 但其实第一种性能优于第二种. 有人可能已经想到  Duff's Device…
if else 和 switch    &&    递归 if else 和 switch 一般来说,if-else 适用于判断两个离散的值或者判断几个不同的值域.如果判断多于两个离散值,switch表达式将是更理想的选择. 如同 我们在写sql 总习惯把可以过滤掉更多的where 放在前面一样,当 if else 判断的离散值较多时也因该这么干. 二分搜索法: if (value == 0){ //要优化的代码 return result0; } else if (value == 1)…
第三章  DOM Scripting  最小化 DOM 访问,在 JavaScript 端做尽可能多的事情. 在反复访问的地方使用局部变量存放 DOM 引用. 小心地处理 HTML 集合,因为他们表现出“存在性”,总是对底层文档重新查询.将集合的 length 属性缓 存到一个变量中,在迭代中使用这个变量.如果经常操作这个集合,可以将集合拷贝到数组中. 如果可能的话,使用速度更快的 API,诸如 querySelectorAll()和 firstElementChild. 注意重绘和重排版:批量…
When the browser encounters a <script> tag, as in this HTML page, there is no way of knowing whether the JavaScript will insert content into the <p>, introduce additional elements, or perhaps even close the tag. Therefore, the browser stops pr…
代码为什么要这样写? function initUI(){ var doc = document, bd = doc.body, links = doc.getElementsByTagName_r("a"), i = 0, len = links.length; while(i < len){ update(links[i++]); } doc.getElementById("go-btn").onclick = function(){ start(); }…
草草的看完第一章,虽然看的是译文也是感觉涨姿势了, 我来总结一下: 由于 大多数浏览器都是 single process 处理 ui updatas and js execute 于是产生问题: js (script tag) will blocking page processing 上图说话: 于是大家动脑筋想办法 想到了三个办法 1. Parallel downloads, then execute  并行下载,然后执行. 2.Download times less,Less downlo…
第四章 变量 函数和运算符 4.1 ① 变量声明 变量声明是通过var语句来完成的,并且所有的var语句都提前到包含这段逻辑的函数的顶部执行. function doSomething() { + value; ; return result; } // 编译器理解为 function doSomething() { var result; // 这里为undefined var value; // 这里为undefined result = +value; value = ; return r…
第四章 文件的本质 以前,所有文件和目录都有一个确定的属性集:时间,日期,尺寸,以及表示‘只读的’,‘隐藏的,‘存档的’,或‘系统的’状态标志.然而,Windos95(及后来的WindowsNT4.0)出现使这些概念产生了改变,其中最重要的‘文件’变得更加广泛.现在,文件可以是任何Shell部件对象—不一定必须是文件系统的部件. 文件的精确定义是,任何作为Shell命名空间部件的对象称之为文件对象.注意,在定义中所说的‘命名空间’,它不是C++的关键字.‘Shell 命名空间’所指的是实际组成S…
前言 最近在翻<高性能JavaScript>这本书(2010年版 丁琛译),感觉可能是因为浏览器引擎的改进或是其他原因,书中有些原本能提高性能的代码在最新的浏览器中已经失效.但是有些章节的有些内容还是相当不错的,譬如第八章编程实践,为了方便以后的查阅,对此做个总结.失效的代码也会在以后做更进一步的探索. 避免双重求值 这个优化策略很好理解,我们可能都已经不知不觉地运用在了实际的编程中: // not use this setTimeout('alert("hello world&qu…
4.3 终止进程的运行 若要终止进程的运行,可以使用下面四种方法: • 主线程的进入点函数返回(最好使用这个方法) . • 进程中的一个线程调用E x i t P r o c e s s函数(应该避免使用这种方法) . • 另一个进程中的线程调用Te r m i n a t e P r o c e s s函数(应该避免使用这种方法) . • 进程中的所有线程自行终止运行(这种情况几乎从未发生) . 这一节将介绍所有这四种方法,并且说明进程结束时将会发生什么情况. 4.3.1 主线程的进入点函数返…
4.2 CreateProcess函数 可以用C r e a t e P r o c e s s函数创建一个进程: BOOL CreateProcessW( _In_opt_ LPCWSTR lpApplicationName, _Inout_opt_ LPWSTR lpCommandLine, _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes…
第4章 进 程     本章介绍系统如何管理所有正在运行的应用程序.首先讲述什么是进程,以及系统如何创建进程内核对象,以便管理每个进程.然后将说明如何使用相关的内核对象来对进程进行操作.接着,要介绍进程的各种不同的属性,以及查询和修改这些属性所用的若干个函数.还要讲述创建或生成系统中的辅助进程所用的函数.当然,如果不深入说明如何来结束进程的运行,那么这样的介绍肯定是不完整的.现在就来介绍进程的有关内容.进程通常被定义为一个正在运行的程序的实例,它由两个部分组成: • 一个是操作系统用来管理进程的…
(一)继承的类型 1.实现继承和接口继承 在面向对象的编程中,有两种截然不同的继承类型:实现继承和接口继承. 实现继承:表示一个类型派生于一个基类型,它拥有该基类型的所有成员字段和函数.在实现继承中,派生类型采用基类型的每个函数代码,除非在派生类型的定义中指定重写某个函数的实现代码.在需要给现有的类型添加功能,或许多相关的类型共享一组重要的公共功能时,这种类型的继承非常有用. 接口继承:表示一个类型只继承了函数的签名,没有继承任何实现代码.在需要制定该类型具有某些可用的特性时,最好使用这种类型的…
上一章介绍了内核对象,这一节开始就要不断接触各种内核对象了.首先要给大家介绍的是进程内核对象.进程大家都不陌生,它是资源和分配的基本单位,而进程内核对象就是与进程相关联的一个数据结构.操作系统内核通过它管理进程,也就是操作系统原理上介绍的进程控制块(PCB).举个例子,它就相当于每个学生都有的学籍,学校管理我们都是通过学籍,什么记过了,处分了,开除学籍了,都是在学籍上做文章.       进程一般被定义为一个正在运行的程序的一个实例,它由两部分组成:       1:内核对象,操作系统用它来管理…
OO:面向对象 OOP:面向对象编程 OOA:面向对象分析 OOD:面向对象设计 结构化编程:从顶向下,将一个大问题分解成更小的任务,然后为每一个更小的任务编写一个过程.最后程序员会编写一个主过程来启动程序流程,随后根据程序流程走向,调用想要的其它过程. 对象是存在的具体实体,具有明确定义的特征和行为. 万物皆为对象,对象因我关注而产生. 面向对象:一种认识事物的方式,注重对事物整体的认知,最符合人类自然的思维习惯. 对象是数据封装的结果. 类是具有相同属性和行为的一组对象的集合. 在软件系统中…
1.理解:prototype.getPrototypeOf和_proto_之间的不同 ①C.prototype用于建立new C()创建的对象的原型. ②Object.getPrototypeOf(obj)是ES5中用来获取obj对象的原型对象的标准方法. ③obj._proto_是获取obj对象的原型对象的非标准方法. 类的本质上是一个构造函数与一个用于在该类实例间共享方法的原型对象的结合.   2.使用闭包存储私有数据 JavaScript的对象所有的属性名都是一个字符串,任意一段程序都可以…
值得多读几遍的书.…
文件系统: 以UNIX系统V文件系统为例: 磁盘分为区,每个分区都有自己的文件系统: ​ i节点是固定长度的记录项,包含了文件的相关信息.目录项包含文件名和i节点号.stat结构中除文件名和i节点编号之外的数据都包含在i节点中 在进行文件索引的时候会首先找到目录项,根据目录项的i节点号找到i节点,i节点中包含了若干数据块的引用,这些数据块就是文件内容.目录项只是对i节点的引用 多个目录项可以引用相同的i节点,i节点将记录引用它的目录项的个数,只有在没有目录项引用它的时候才可以删除其中的数据.所以…
文件和目录 start fstart lstart函数 一旦给出pathname, start函数就返回了与此命名文件有关的信息结构 #include <sys/start> int stat(const char *pathname, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *pathname, struct stat *buf);/*能观察到符号链接*/ 参数: pathnam…
1.python对象 所有的Python 对像都拥有三个特性:身份,类型和值. 身份: 每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到. 这个值可以被认为是该对象的内存地址.您极少会用到这个值,也不用太关心它究竟是什么. 类型 对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则.您可以用内建函数type()查看Python 对象的类型.因为在Python 中类型也是对象(还记得我们提到Python 是面向对象的这句话吗?),…
1.身份.类型.值.其中,身份是每个对象的标识,与内存地址密切相关,可用id()返回:类型决定了对象可以保存什么类型的值,用type()函数.isinstance()函数可以得到对象的类型:值就是对象表示的数据 2.不可更改指对象创建以后值不可以更新.python中,列表.字典是可更改的,数字.字符串.元组是不可更改的 3.类型 字符串.列表.元组是按照顺序访问的,也就是具有切片的特性. 映射类型(字典)类似序列的索引,但它的索引不是按顺序的数字来切片,而是通过一个唯一的键或者说关键字来访问,容…
1.所有的python对象都拥有三个特性: ①身份:每个对象都有唯一的身份标识自己,可用内建函数id()来得到.基本不会用到,不用太关心 >>> a = 2 >>> id(2) 39411616L >>> id(a) 39411616L 这个例子也同时说明python中赋值其实是"引用" ②类型:对象的类型决定可以保存什么类型的值.用内建函数type()可以得到对象的类型. >>> type(2) <type…
栈 :last-in-first-out 栈有自己特殊的规则,只能 后进入的元素 ,最先被推出来,我们只需要模拟这个规则,实现这个规则就好. peek是返回栈顶元素(最后一个进入的). /** * 栈 后入先出 * @constructor */ function Stack(){ this.pop = pop; this.push = push //栈顶位置 this.top= 0; this.length = 0; this.dataStore = []; this.peek = peek;…
请求和响应 Request结构 URL字段 Header字段 Body字段 Form, PostForm, MultipartForm字段 在处理器函数中,我们可以通过Request获取各个字段的详细信息 func get_request_value(w *http.ResponseWriter, r *http.Request) { h := r.Header brower := r.Header.Get("User-Agent") fme.Fprintln(w, h) body :…
1.        EXISTS和NOT EXISTS子查询:EXISTS关键字用来检测数数据库对象是否存在.                  ★EXISTS和NOT EXISTS的结果只取决于是否有返回记录,不取决于这些记录的内容,                      所以EXISTS或NOT EXISTS子查询后SELECT语句中的字段列表通常是无关紧要的.      ●EXISTS子查询: 在执行CREATE或DROP语句前,可以使用EXISTS语句判断该数据库对象是否存在,返回值…
为了执行网络I/O操作.进程必须做的第一件事情就是调用Socket函数.指定期待的通信协议 #include<sys/socket.h> int socket(int family,int type,int protocol); family表示协议族,比如AF_INET,type表示套接字类型, protocol一般设置为0 family: AF_INET ipv4协议 type: SOCK_STREAM 字节流套接字 SOCK_DGRAM 数据报套接字 SOCK_RAW 原始套接字 pro…
我们知道,对DOM的操作都是非常的耗性能的,那么为什么会耗性能呢?      文档对象模型(DOM)是一个独立于语言的,使用 XML和 HTML 文档操作的应用程序接口(API).在浏览器中,主要与 HTML 文档打交道,在网页应用中检索 XML 文档也很常见.DOM APIs 主要用于访问这些文档中的数据.尽管 DOM 是与语言无关的 API,在浏览器中的接口却是以 JavaScript 实现的.客户端大多数脚本程序与文档打交道,DOM 就成为 JavaScript 代码日常行为中重要的组成部…
加载和执行 JavaScript是单线程,所以JavaScript的加载和执行是从上下文加载执行完一个继续加载执行下一个文件会阻塞页面资源的加载,所以一般情况下JavaScript文件放在body标签内底部,很多后端开发人员放在body标签外下面,这样做不好的地方有两点:1.不规范 2.可能会造成js获取不到页面元素而导致报错.而放在body标签内底部可以去保js执行前有页面渲染完成. js... //正确 js... 合并脚本每个<script>标签初始化下载都会阻塞页面渲染,所以减少页面的…
高性能JavaScript整理总结 关于前端性能优化:首先想到的是雅虎军规34条然后最近看了<高性能JavaScript>大概的把书中提到大部分知识梳理了下并加上部分个人理解这本书有参考雅虎特别性能小组的研究成果,所以跟34 军规有很多相似之处有不当之处请在评论区指正,感谢~ 约定:很多单词语法都是简写比如doc指document,点点点代表不重要代码省略,码字不易(/双手合十) 1. 加载和执行 JavaScript是单线程,所以JavaScript的加载和执行是从上至下加载执行完一个再继续…
在 JavaScript 中,数据存储位置可以对代码整体性能产生重要影响.有四种数据访问类型:直接量,变量,数组项,对象成员.         直接量仅仅代表自己,而不存储于特定位置. JavaScript 的直接量包括:字符串,数字,布尔值,对象,数组,函数,正则表达式,具有特殊意义的空值,以及未定义.          变量是指开发人员使用 var关键字创建用于存储数据值.          数组现是指具有数字索引,存储一个 JavaScript数组对象.          对象成员具有字符…