门户网站备案,电子商城网站制作数据库,阜阳网站是,我的个人博客网站作为一名前端开发者#xff0c;打交道最多的可能是和浏览器。市面上各种浏览器多不胜数#xff0c;主流的有Chrome#xff0c;Firefox#xff0c;Safari#xff0c;IE#xff0c;Opera#xff0c;非主流的如360#xff0c;遨游#xff0c;QQ浏览器#xff0c;搜狗浏览…作为一名前端开发者打交道最多的可能是和浏览器。市面上各种浏览器多不胜数主流的有ChromeFirefoxSafariIEOpera非主流的如360遨游QQ浏览器搜狗浏览器据说淘宝最近也要出浏览器了。不过个人最喜欢的还是Chrome因为它的简洁和快速还有功能的强大。FF什么的我觉得它已经慢得跟不上时代了:-D这是个人意见喜欢FF的朋友尽管吐槽。虽然IE和Firebug的开发工具都用过但始终觉得不如Chrome顺手。下面就详细介绍一下Chrome的开发人员工具。 Chrome一共有8个功能子集。如下图    1、Elements   这个部分主要是显示实时的DOM树。在页面中右键单击“ 审查元素 ”就会出现Elements的面板。  左边就展示的是DOM树在一个DOM节点上点击右键就会出现一个菜单一共分为4部分第一部分是添加和编辑节点的属性例如class等。第二部分是编辑节点点击Edit as HTML就可以像在编辑器中一样编写代码Copy as HTML就是复制代码了Delete node是整个删除节点。第三部分是添加DOM的断点。如果我们添勾选了任何一个就会在右边栏的第五部分DOM breakpoints出现这里对应的是JS的对DOM的操作如果出现对应的事件节点子树改变、节点属性改变、节点被移除那么JS就会在相应的事件监听函数那里挂起这个在后面JS设置断点再讲解关于断点的东西。最后一部分是文字换行貌似用处不大。 底部显示的是一个当前元素的所有祖先元素。例如上图中当前元素是body它的祖先元素是html也是父级元素如果html有父级元素仍然会显示html的父级元素这里例子有点特殊。 接下来看看右边栏。一共有6部分分别是Computed Style、Styles、Metrics、Properties、DOM Breakpoints、Event Listeners。Computed Style显示的是所选元素的最终样式对应JS中的getComputedStyle()方法如果勾选了Show inherited将会显示此元素的所有style属性Computed Style中的属性是只读的不能实时修改所以主要用来查看元素的最终属性值。 而第二部分Styles估计是用得最多的。这里会显示作用在所选元素的所有css规则包含css文件中的样式规则还有user stylesheet和user agent stylesheet的样式。样式按照权重的大小排列最上面的是权重最高的下面是权重低的。最上面的element.style是元素的内嵌样式。user stylesheet是用户样式不过一般不会有人自定义样式。user agent stylsheet是浏览器的默认样式通常的css reset就是将这个reset掉。背景不是灰色的部分是可以修改的样式我们对样式的修改会实时显示在页面中这就省去了我们为了修改几个像素去修改css文件然后保存刷新的过程同时也可以禁用和启用某些样式。在Styles的标题栏有一个鼠标箭头的图标点击之后就会出现伪类因为一般情况下不会出现伪类的css规则。  第三部分Metrics显示了元素作为盒模型的各个参数。第四部分Properties显示了元素作为DOM对象的各个属性。例如上图中所示这里从上到下是一个继承的关系。最上面是一个HTMLDivElement的实例第二个是HTMLDivElement的类。第三个是HTMLElement类HTMLDivElement类继承自HTMLDivElement类。接着分别是Element类Node类和Object类。如果选择不同的节点类型就会出现不同的继承关系。第四部分是DOM Breakpoints这个后面再细讲。最后一个是Event Listeners这个显示了绑定到当前元素的事件监听函数而且会显示事件冒泡或捕获即能够响应此事件的所有元素。   2、Resources    这个面板会显示所有加载的资源如上图所示。底部的中间有个铅笔图标的按钮点击之后就可以实时编辑css或者js文件。其他例如Local Storage、Session Storage、Cookies都可以查看。   3、Network   Network的功能是非常实用和强大的我们能够用它来查看很多信息。  上图分为8列从左到右分别是Name、Method、Status、Type、Initiator、Size、Time和Timeline。Name表示加载的文件名Method表示请求的方法Status表示状态码200为请求成功304表示从缓存读取Type表示文件的MIME Type的类型。Initiator表示发出这个文件请求的发出者Size表示文件大小。Time表示每个请求的总时长Timeline以图表的形式显示了整个网页的请求和加载情况。我们可以看到哪些请求是同时发出的哪些请求被阻塞了。Timeline中有一条蓝线和一条红线蓝线表示DOM Content Loaded事件触发的时间红线表示 Window onload事件触发的时间。底部的选项卡将请求的文件进行了分类便于查看如Document、Stylesheets、Images、Scripts、XHR、Fonts、Websockets和Other。 Timeline中鼠标移到每个时间条上的时候会显示整个请求的详细信息如下图所示DNS Lookup、Connecting、Sending、Waiting、Receiving。  如果某个请求被阻塞了还会显示Blocking。单击右键会出现一个菜单如下图在新的选项卡中打开连接、复制请求头和响应头、复制和保存HAR格式的文件清除缓存和cookie。  当点击一个具体的文件时会出现更为详细的请求信息  这里可以看到请求头信息和响应头信息这对于Ajax的开发很有帮助。右边栏顶部的选项卡还有Preview、Response、Cookies、Timing等信息。   4、Scripts   接下来重点讲一下JS的调试。如果没有编程基础并且将JS作为第一门编程语言进行学习的同学可能对JS的调试不是特别清楚。一般来说调试需要设置断点当程序运行到这里的时候就会被挂起我们就能够查看挂起状时的各种状态例如变量值函数的调用栈或者自定义的表达式。我们可以看到右边栏有8个部分分别是Watch s、Call Stack、Scope Variables、Breakpoints、DOM Breakpoints、XHR Breakpoints、Event Breakpoints和Workers前面三个部分表示的是运行时的状态后面5部分表示所设置的断点。 Watch s中点击右边的加号可以添加表达式因为JS中只要是表达式就会有值所以这里可以是变量也可以是函数表达式也可以是其他表达式。如果函数运行到某一行代码想要查看这行代码中的某个变量值为多少可以将这个变量添加到Watch s里面点击刷新按钮就会出现这个变量的值例如下图中就有变量i的值。  下面一个是函数的调用栈。如果在a函数中调用了b函数那么a函数的栈顶被推入函数b执行流进入函数b如果在函数b中又调用了函数c那么函数b的栈顶又被推入c执行流进入cc执行完毕之后函数c就出栈执行流再次进行函数b函数b执行完毕之后b出栈最后a出栈。这样调用的顺序关系就体现在了调用栈上。在某个函数中设置了断点程序执行到这个断点的时候检查Call Stack就可以知道这个函数是被哪个函数调用了而它的调用者又是被哪个函数所调用。点击每个函数栈执行流还会退回到相应的函数。 第三部分是作用域中的变量包括局部作用域和全局作用域而且还有当前作用域中的闭包。通过Scope Variables可以查看各个作用域内的变量的值。有时需要跟踪某个变量的变化情况可以通过这个来观察。还有一个方便的功能就是将鼠标移到左边栏代码的变量上会弹出这个变量的值而不用到Scope Variables中去找了。IE9和IE10都增加了这样功能不过Firebug没有此功能并且Firebug也没有代码高亮这给调试带来了一定的麻烦所以很少使用Firebug来调试js。三个浏览器列出的信息侧重点不同算是各有所长吧。 后面的几部分都是断点的设置只是方式不太一样。前面说过断点的作用就是将函数挂起DOM Breakpoints的作用就是在DOM被修改时在修改的代码前挂起。XHR Breakpoints就是在出现了XHR请求的时候挂起具体就是在xhr.send()这个方法处挂起。Event Breakpoints就是在触发了相应的事件时在事件函数处挂起。我们可以选择不同的需要设置断点的事件如Keyboard、Mouse等事件。例如我们设置了一个方法a.onclick  function(){…}在点击a的时候程序就会在这个function处挂起。最后是Workers可以设置的只有Pause on start就是在和Workers通信开始的时候挂起。 设置好了断点下图的这几个按钮就非常有用了他们出现在右边栏的顶部。第一个按钮像播放一样的按钮是暂停和开始。当设置了断点之后js的执行就暂停了如果我们想要跳过当前的断点继续执行js就可以点击这个按钮点击之后js的执行会继续如果在接下来的执行过程中再次遇到断点那么就会在那个断点处暂停。第二个按钮弧形的按钮是跳过按钮。如果在执行的过程中遇到了一个函数点击这个按钮调试程序就会跳过这个函数的具体执行过程直接到达函数执行完毕的状态不过如果没有遇到函数调试也会一步一步地执行。向下的箭头是进入按钮 如果遇到了一个函数那么就会进入这个函数如果没有遇到函数调试就一步一步执行。向上的箭头是返回按钮点击之后会退出当前正在执行的函数到达函数执行完毕的在状态如果是在全局作用域中那么句退出调试。最后一个按钮是激活和反激活所有的断点如果当前的断点是激活的点击之后所有的断点将不起作用再次点击之后恢复作用。  最后在左下部有三个按钮如下图  第一个按钮有三种状态Don’t pause on exceptionsPause on all exceptionsPause on uncaught exceptions。第一种状态是出现异常时不暂停第二种是在出现异常的地方暂停第三种是在出现了没有被捕捉的异常处暂停这里的暂停也就是设置一个断点。 第二个按钮表示代码的格式是否格式化代码不格式化将以原本的方式显示。最后一个铅笔图标的按钮点击之后就可以修改代码了。某些邪恶的同学可能已经想到可以用这个来干一些坏事了。   5、Timeline   Timeline在分析网页性能的时候非常有用。这个跟Network有类似的地方他们都是按照页面的加载时间来统计数据的不过Timeline统计的数据侧重点不一样。Timeline主要统计了三个数据LoadingScriptingRendering。另外一个是内存随时间的变化。  蓝色的是加载的时间黄色的是代码执行的时间紫色的是渲染的时间。当我们点击底部的那个黑色的圆形时圆形变成红色然后就开始记录页面中出现的这三种情况所消耗的时间。当点击记录按钮之后刷新页面我们就能得到整个页面加载代码执行还有页面渲染的时间细节。鼠标移到右边栏的时间条上还会出现相应的具体信息也可以点击三角按钮查看折叠的信息。顶部的时间栏可以拉动进行缩放这样就能关注具体某段时间内的信息了。   6、Profiles   Profile记录的主要是CPU和内存占用的信息。  点击start profiling开始记录CPU的使用信息这时刷新页面等页面加载完毕之后仍点击上一次的按钮停止记录。CPU记录的信息以两种视图呈现Bottom Up和Top View。    Bottom Up和Top Down显示的是一个全局的调用栈结构图只是显示的方式略有不同。当我们展开一列函数的时候可能看到如下的情形。如果是Bottom Up视图从字面的意思来理解是从下往上在下面的函数调用的是上面的函数跟函数的调用栈类似。    同样的Profile如果是Top Down视图就会是下面的情况函数的调用自上而下的而且只会显示在全局作用域中调用的函数不是全局作用域的函数都是被其他函数所调用。这里可以查看各个函数的调用栈还有它们的执行时间例如图中出现了多个p那么函数p就是递归调用。  另外几个按钮Switch between absolute and percentage times、Focus selected function、Exclude selected function从字面意思也可以了解它的用途了。 上图的左边两列是时间第一列是self第二列是totalself表示函数自己的运行时间不包含调用其他函数的时间而total表示这个函数运行的总时间。因为这个性能分析会系统造成一定的影响所以得到的结果并不是特别的精确通常情况我们只比较一个相对的结果来得到性能差的函数就行了。所以可以将时间转换为百分比的关系。 剩下还有一个是Heap Snapshots字面意思是堆快照。通过点击右下方的眼睛图标按钮就可以给当前的Heap截取一个快照旁边禁止图标的按钮是清除profiles因为即使退出了开发人员工具profiles还会继续存在直到关闭页面或手动清除。下图就是一个快照。  总体分为左右两栏右边栏又分为上下两部分上面部分分为4列Constructor、#、Shallow Size、Retained Size。Constructor显示的是构造函数也可以说是类#表示的是相应类有多少实例。Shallow Size表示对象自身所占用的内存。而Retained Size表示对象以及它所引用的对象所占用的内存也可以理解为对象被回收能够释放的内存的总大小。对于GCgarbage collector来说如果一个对象没有任何引用那么这个对象就是可以回收的。如果a对象包含了b对象的引用如果a对象没有被回收那么b对象也不会被回收如果a被回收那么b也被回收。这时a自身的大小称为Shallow Sizeab的大小称为a的Retained Size。注意a被回收b也被回收那么a就是b的Dominator。 下部分显示的是Paths from the selected object to GC roots/to window objects也叫Retaining path。如果选择了一个对象如果它没有被回收当然出现在Snapshots中的都是没有被回收的对象那么它对于GC来说是可读的GC可以通过某一条路径来达到这个对象而下面一部分就是显示的这个路径。选择对象之后GC roots就开始寻找roots到这个对象的短路径。这个有点复杂需要对图数据结构有一定了解。 Heap Snapshots可以用四种方式来查看Summary、Comparison、Containment、Dominators。Summary是默认的显示方式会显示Constructor和实例。Comparison是对比的方式来显示可以看到每个实例后面都有一个xxx的东西以开始的一串数字就是每个实例特定的id这个id是独一无二的。如果我们截取了两个快照以Comparison的方式显示就会出现两个快照不同的地方例如这样的场景用户点击一个按钮之后利用XHR对象加载了一条信息。加载之前截取一个快照加载之后再截取一个快照。对比两个快照如果出现了XHR对象那么说明此对象没有被回收如果每次加载都创建一个XHR对象而且此对象不会被回收那么理论上就可以能引起内存泄露。 Containment视图显示了页面中对象结构的概览。一共会有四种对象:DOMWindow、GC roots、Native Objects。如果页面中有框架(frame)那么可能会出现过个DOMWindow对象。Native Object原生对象是指那些被嵌入Javascript的对象,例如DOM和CSS Rules。Dominators视图显示的是Dominators tree这个在前面有提过就不说了。   7、Audits   这个是对页面的一个优化建议跟YSlow比价相似就不细说了。   8、Console   Chrome的Console也是比较强大的。它同时实现了Firebug的Command Line API这个可以去看看Command Line API的文档我就不赘述了。而且会出现智能提示这个是非常强大的IE和Firebug的Console都弱爆了。我们在Console中可以直接写JS运行不用为了几句简单的js就动用html文件。 另外Console还支持一些方法如下: console.log(object[, object, ...])使用频率最高的一条语句向控制台输出一条消息。支持 C 语言 printf 式的格式化输出。console.info(object[, object, ...]) 向控制台输出一条信息该信息包含一个表示“信息”的图标和指向该行代码位置的超链接。console.error(object[, object, ...])在控制台中输出一条错误信息。console.warn(object[, object, ...])在控制台中输出一条警告信息。console.assert([, object, ...]) 断言测试一条表达式是否为真不为真时将抛出异常断言失败。console.dir(object) 输出一个对象的全部属性输出结果类似于 DOM 面板中的样式。console.dirxml(node) 输出一个 HTML 或者 XML 元素的结构树点击结构树上面的节点进入到 HTML 面板。console.trace() 输出 Javascript 执行时的堆栈追踪。console.group(object[, object, ...]) 输出消息的同时打开一个嵌套块用以缩进输出的内容。调用 console.groupEnd() 用以结束这个块的输出。console.time(name) 计时器当调用 console.timeEnd(name);并传递相同的 name 为参数时计时停止并输出执行两条语句之间代码所消耗的时间毫秒。console.profile([title]) 与 profileEnd() 结合使用用来做性能测试与 console 面板上 profile 按钮的功能完全相同。console.count([title]) 输出该行代码被执行的次数参数 title 将在输出时作为输出结果的前缀使用。console.clear() 清空控制台。 关于Chrome的调试基本就这些了如果使用了Chrome我相信你会喜欢上它的。