关于console:INFINI-Labs-产品更新-Gateway-支持基于-Kafka-的复制能力发布-Helm-Charts-部署方式

INFINI Labs 产品又更新啦~。本次更新概要如下:Easysearch 新增了索引字段相干统计 API,优化了 source_reuse 晋升压缩效率;Gateway 新增诸多新个性,如:反对基于 Kafka 的复制能力,增加可插拔的分布式锁实现,新增 CPU 资源限度等性能;Console 本次次要优化了数据迁徙性能,迁徙工作详情页新增了若干指标图和日志查看等性能。 欢送大家下载应用和反馈。 INFINI Helm Charts v0.1.0INFINI Helm Charts 是一组 Kubernetes 部署包管理工具。基于 Helm Charts,咱们将 INFINI Labs 旗下相干产品事后配置好程序资源包,大大简化了部署流程。Github 仓库地址:https://github.com/infinilabs/helm-charts。 Helm Charts 本次更新如下: Features增加 Console Chart增加 Easysearch Chart,反对单节点以及多节点(节点角色可配置)部署部署视频演示: 如何通过 Helm Chart 部署 Easysearch如何通过 Helm Chart 部署 Console博客文章: 如何通过 Helm Chart 部署 EasysearchINFINI Easysearch v1.6.0INFINI Easysearch 是一个分布式的近实时搜寻与剖析引擎,外围引擎基于开源的 Apache Lucene。Easysearch 的指标是提供一个轻量级的 Elasticsearch 可代替版本,并持续欠缺和反对更多的企业级性能。 Easysearch 本次更新如下: Features新增 \_field_usage_stats API,统计索引每个字段的拜访次数新增 \_disk_usage API,能够剖析指定索引每个字段的磁盘占用大小减少 flattened 类型,将 JSON 对象作为字符串解决,能够缩小嵌套 JSON 型的文档的大小Improvementssource_reuse 减少对 \_source 中数字类型的值进行复用压缩,可进一步升高 \_source 磁盘占用改良 source_reuse 筛选字段的逻辑INFINI Gateway v1.18.0INFINI Gateway 是一个面向搜寻场景的高性能数据网关,所有申请都通过网关解决后再转发到后端的搜寻业务集群。基于 INFINI Gateway 能够实现索引级别的限速限流、常见查问的缓存减速、查问申请的审计、查问后果的动静批改等等。 ...

September 22, 2023 · 1 min · jiezi

关于console:Console对象的常用api学习记录

Console对象js中也有万物皆对象的定义,所以咱们罕用的console也是一个对象,天然是对象,那么其身上就会自带一些办法和属性。大家F12关上控制台当前,间接输出console回车,就可以看明细啦,如下图: 本文记录一下罕用的console的api,细节来自于官网文档:Chrome DevTools中文手册:https://leeon.gitbooks.io/dev... 外面还有其余很多谷歌开发工具的应用细节,大家没事的时候,能够多逛逛,必当大有裨益^_^Console控制台api1. console.assert()办法,个别应用的不多,相当于一个条件判断。比方有如下代码: let isLogin = trueconsole.assert(isLogin, 'isLogin为false,以后处于未登录状态')// 此时isLogin为true不会执行打印,如果为false的时候,就会打印提醒:isLogin为false,以后处于未登录状态// 相当于:if(!isLogin){console.log('isLogin为false,以后处于未登录状态')} //图示如下:2. console.clear()办法,也能够清空控制台,清空控制台,并输入 Console was cleared,图示如下: 3. console.count()办法,这个办法有点鸡肋,就是用来计数的,计数的话,咱们应用console.log也是能够计数的。看代码就晓得了 let arr = ['甲', '乙', '丙', '丁']for (let i = 0; i < arr.length; i++) { console.count('console.count计数') console.log('console.log计数', i + 1)} // 后果如下图: 4. console.debug()办法,和console.log()基本上一样,用的也少,不赘述 5. console.dir()办法,个别用于打印dom对象,查找其身上的属性,挺罕用的。图示如下: 6. console.dirxml()办法,用于打印XML/HTML文档构造的办法,挺好。示例如下: <body> <h1> <span> <h2>你好console.dirxml()</h2> </span> </h1> <script> let span = document.querySelector('h1') console.dirxml(span) </script></body>// 打印图如下: 7. console.error()和console.exception()办法,用于抛出谬误到控制台,咱们在编码过程中遇到的框架(vue/react)报错信息,都是被这个办法抛出来的。或者咱们本人封装的函数办法,如果使用者没有依照正确的形式去应用,咱们也能够应用这个办法,做一个抛错提醒在管制台上,有助于更好的开发 8. console.warn()办法,同上,只不过这个是抛出正告,没有下面的抛出谬误那么重大。毕竟对于程序员而言,正告不必管,报错才去看,哈哈 ...

May 31, 2022 · 1 min · jiezi

关于console:如何在浏览器-console-控制台中播放视频

如何在浏览器 console 控制台中播放视频?要实现这个指标,次要波及到这几个点: 如何获取和解析视频流?如何在 console 里播放动静内容?如何在 console 里播放黑白内容?如何连贯视频流和 console?事实上最初的代码极其简略,咱们就一步一步简略讲一下 成果 测试地址:yu-tou.github.io/colors-web/… 如何获取和解析视频流?这里咱们用电脑摄像头捕捉视频流,而后获取视频流每一帧的图像数据,作为下一步的输出。 // 捕获电脑摄像头的视频流const mediaStream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true,});// 创立一个 video 标签const video = document.createElement("video");document.body.appendChild(video); video.onloadedmetadata = function (e) { video.play(); // 等摄像头数据加载实现后,开始播放};// video 标签播放视频流video.srcObject = mediaStream;复制代码如何获取每一帧图像的数据?创立一个 canvas 画布,能够将 video 以后的内容绘制到画布上,而后通过 canvas 的办法即可拿到图像的像素数据。 const ctx = canvas.getContext("2d");canvas.width = width;canvas.height = height; ctx.drawImage(video, 0, 0, width, height);const imageData = ctx.getImageData(0, 0, width, height);const data = imageData.data;// imageData 的构造是平铺的,须要本人去学习下复制代码如何在 console 里播放动静内容?视频每帧的图像内容咱们曾经能够拿到了,持续下一步,如果须要在 console 中实现播放视频,首先须要可能一帧一帧绘制内容,然而这个如同是不太事实的,console.log 只能输入文本。 ...

November 17, 2021 · 2 min · jiezi

关于console:console的隐藏知识点你get到了嘛

常见用法console.log( ) | info( ) | debug( ) | warn( ) | error( ) console.log("console log")console.info("console info")console.debug("console debug")console.warn("console warn")console.error("console error")这些控制台将依据提供给它们的事件类型,间接以适当的色彩打印原始字符串 测试Demo<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <script> console.log("console log") console.info("console info") console.debug("console debug") console.warn("console warn") console.error("console error") </script> <script> console.log("%cText color is green and increased font size", "color: green; font-size: 2rem;") </script> <script> console.log("Multiple styles: %cred %corange", "color: red", "color: orange", "Additional unformatted message"); </script> <script> let info1 = [["Suprabha"], ["Frontend Dev"], ["Javascript"]] console.table(info1) </script> <script> console.group() console.log("Test 1st message") console.group("info") console.log("Suprabha") console.log("Frontend Engineer") console.groupEnd() console.groupEnd() </script> <script> let info2 = { "name": "Suprabha", "designation": "Frontend Engineer", "social": "@suprabhasupi" } console.dir(info2) </script> <!-- console.dir --> <button>console.log打印触发对象</button> <button>console.dir打印触发对象</button> <script> console.log(document.body, 'bodyHtml'); console.dir(document.body); let oButton = document.getElementsByTagName('button'); oButton[0].onclick = function(event){ console.log(event.target, 'button1'); } oButton[1].onclick = function(event){ console.dir(event.target, 'button2'); } </script> <script> console.assert(false, "Log me!") </script> <script> let name = "supi" let msg = "Its not a number" console.assert(typeof msg === "number", {name: name, msg: msg}) </script> <script> console.count("Hey") console.count("Hey") console.count("Hey") console.count("Hey") </script> <script> for (let i = 0; i < 5; i++) { console.count() } </script> <script> console.time("Time") let l = 0; for (let i = 0; i < 5; i++) { l += i } console.log("total", l) console.timeEnd("Time") </script></body></html> ...

May 17, 2021 · 2 min · jiezi

console中的d-s等占位符

前端开发中经常用到浏览器的console控制台,而在console.log和console.debug中有时候可以看见%d %s这样的符号,其意义和用法如下 占位符含义%s for a String value 代表字符串%d 或 %i for a Integer value 代表整数%f for a Floating point number 代表浮点数%o for an Object hyperlink 代表对象的超链接例子var name = "David";var num = 24;var height = 180.5;var obj = { job: 'web developer',};console.log('%s is %d years old, and he is %fcm tall.\nMore details in: %o', name, num, height, obj); 参考https://stackoverflow.com/que...https://blog.csdn.net/linusc/...

July 4, 2019 · 1 min · jiezi

推荐一个好用的以多tab标签方式打开windows CMD的工具

最近我在做基于nodejs的微服务开发,需要在windows命令行里启动很多微服务。我的windows 10任务栏是这样子的:我想找一款能像下图Chrome标签页这样打开windows 10 CMD窗口的工具,在网上找了一圈后,发现了这个名叫console2的工具:网址:https://sourceforge.net/proje…下载下来压缩包只有1点几兆,解压即用。可以像Chrome那样任意新建tab:可以在多个tab间方便切换:

March 10, 2019 · 1 min · jiezi

JavaScript-console的使用_016

JavaScript-console的使用onsole 对象提供对浏览器控制台的接入(如:Firefox 的 Web Console)。不同浏览器上它的工作方式是不一样的,但这里会介绍一些大都会提供的接口特性。Console对象可以在任何全局对象中访问,如 Window,WorkerGlobalScope 以及通过属性工作台提供的特殊定义。它被浏览器定义为 Window.console,也可被简单的 console 调用。方法console.log()console.log(obj1 [, obj2, …, objN);console.log(msg [, subst1, …, substN);console.log(‘String: %s, Int: %d,Float: %f, Object: %o’, str, ints, floats, obj)console.log(temp的值为: ${temp})对于打印对象数据的时候要注意:原来浏览器在打印对象的时候只是打印的一个对象快照信息,当你在控制台点击展开对象的时候,浏览器才会去读这个对象具体属性,但是那个时候,这段代码早就已经运行完了类似出现这种,都为null的情况:SyntheticClipboardEvent {dispatchConfig: {…}, targetInst: ReactDOMComponent, nativeEvent: ClipboardEvent, type: “paste”, target: input, …}bubbles: nullcancelable: nullclipboardData: nullcurrentTarget: nulldefaultPrevented: nulldispatchConfig: nulleventPhase: nullisDefaultPrevented: nullisPropagationStopped: nullisTrusted: nullnativeEvent: nulltarget: nulltimeStamp: nulltype: null_dispatchInstances: null_dispatchListeners: null_targetInst: null__proto_: SyntheticEvent console.table()这个方法需要一个必须参数 data,data 必须是一个数组或者是一个对象;还可以使用一个可选参数 columns。表格的第一列是 index。如果数据 data 是一个数组,那么这一列的单元格的值就是数组的索引。 如果数据是一个对象,那么它们的值就是各对象的属性名称。 注意(在 FireFox 中)console.table 被限制为只显示1000行(第一行是被标记的索引(原文:labeled index))。console.assert()console.assert为断言输出。第一个参数的表达式值为false时,则打印输出后面参数的值,否则为 true,则无输出并继续执行程序。例如:function notEqual(a, b) { console.assert(a === b, { msg: ‘a is not equal b’, a: a, b: b });}// console.assertnotEqual({a: 1}, {a: 2});console.time你可以启动一个计时器(timer)来跟踪某一个操作的占用时长。每一个计时器必须拥有唯一的名字,页面中最多能同时运行10,000个计时器。当以此计时器名字为参数调用 console.timeEnd() 时,浏览器将以毫秒为单位,输出对应计时器所经过的时间.https://developer.mozilla.org…https://www.jianshu.com/p/cf2… ...

February 15, 2019 · 1 min · jiezi

Eruda 一个可能被人遗忘的调试神器

引言 日常工作中再牛逼的大佬都不敢说自己的代码是完全没有问题的,既然有问题,那就也就有调试,说到调试工具,大家可能对于fiddler、Charles、chrome devtools、Firebug、还有Safari远程调试等比较熟悉,甚至有些是我可能也没有用过的; 这里喷一句吧,谁都别给我提IE啊,IE那个不叫调试工具,那叫坑爹神器,话说最近不是又甩锅了,把自己的革命老根据地都甩了。 俗话说预先善其事必先利其器,今天想给大家分享的是一个可能被人们忽略的小工具,为什么说被人们忽略呢?因为发现github上它才4.6k Star、457 Fork、Watch 173次,也就是说千万开发者中知道它的人可能不超过5w,于是决定分享一波,此文重在引导,希望能帮大家开发中带来一点点便利、效率的提升:这里是IT平头哥联盟,我是首席填坑官—苏南,用心分享 做有温度的攻城狮。公众号:honeyBadger8,群:912594095。Eruda是什么? Eruda是什么?Eruda 是一个专为前端移动端、移动端设计的调试面板,类似Chrome DevTools 的迷你版(没有chrome强大 这个是可以肯定的),其主要功能包括:捕获 console 日志、检查元素状态、显示性能指标、捕获XHR请求、显示本地存储和 Cookie 信息、浏览器特性检测等等。 虽说日常的移动端开发时,一般都是在用Chrome DevTools浏览器的移动端模式模拟各种手机型号来进行开发和调试,确保功能/页面展示等都没有问题了,才会提交测试; 但是前面都讲了,只是模拟、模拟,当下手机品牌可算是千千万,手机中各种类浏览器,甚至APP都有自己不一样的特色 腰间盘突出,有的还特别突出,有病我们得给它治啊,不然测试、产品、需求、领导都不会放过我们,比如下图场景。如何使用?它支持npm方式的,这个是不是很开心??外链,没错,就是外链的形式引入,对于它,我觉得npm的方式没有什么太大意义,直接以外链的引入更方便,也能减少项目资源包的大小,更便于控制是否要加载这个资源。方式一,默认引入:<script src="//cdn.jsdelivr.net/npm/eruda"></script><script>eruda.init();</script>方式二,动态加载:DEBUG && loadJS(‘http://cdn.jsdelivr.net/eruda/1.0.5/eruda.min.js', ()=>{ eruda.init();});//苏南的专栏 交流:912594095、公众号:honeyBadger8方式三 ,指定场景加载://比如线上 给自己留一个后门,//我们一般的做法是喜欢给某个不起眼的元素,添加一个点击事件,要点它十次、八次以后才开启 debug 模式;;(function () { var src = ‘http://cdn.jsdelivr.net/eruda/1.0.5/eruda.min.js'; if (!/eruda=true/.test(window.location) && localStorage.getItem(‘active-eruda’) != ’true’) return; document.write(’<scr’ + ‘ipt src="’ + src + ‘"></scr’ + ‘ipt>’); document.write(’<scr’ + ‘ipt>eruda.init();</scr’ + ‘ipt>’);})();方式四 ,npm: npm install eruda –save…… 加载的方式很多小而美这里小,不是指它的包小啊,知道它的同学都知道,其实它的包并不小(约100kb gzip);100kb不小了,用形容妹子的话来说就是:丰满,直接说它胖,你就死定了;这里的小而美是指小巧功能也强大,界面也好看;说了这么多 来看看它到底长啥样吧:功能清单consoleconsole 的作用就不用废话了,大家都懂;早期在console诞生之前,我们的调试功能都是alert过多,包括现在的移动端,在手机上我们想看到参数值、数据、节点等都以alert打印为多数,但过于粗暴、而且一不小心有可能带到线上去了;eruda 能帮我们解决这个问题;所有的日志、错误都能帮我们捕获到甚至我们还能像chrome,直接在控制台执行js代码;Elementseruda 它没有在PC端这么直观,但也因为在移动端展示的方式局限性,它能把每一个父节点下的每一个子节点全部列出来;你点击某个子节点时,列出当前节点全部的属性、样式、盒子模型等;查看标签内容及属性;查看Dom上的样式;支持页面元素高亮;支持屏幕直接点击选取;查看Dom上绑定的各类事件。甚至也能使用Plugins 插件,做到跟PC端一样,形成 dom tree;Network现在的项目大多都是前后端分享的形式了,前端处理的业务越来越多、各种请求资源等;干的越多承担责任也越多、锅也越多,又大又平的那种哦~所以 Network 的必要性不言而喻,它能捕获请求,查看发送数据、返回头、返回内容等信息,它对于我们平时前后端联调出现的问题定位是有很大帮助的,比如:后端说你请求参数少了,前端你看了代码逻辑没有问题,但在手机上就是调不通,Network 能很直接明了的看到你请求带了什么。Resources它跟 Chrome Devtools 里的 Application + Source,两者的结合体;Resources 它能查看 Cookie、localStorage、sessionStorage等信息,并且还能执行清除操作(Application);它还查看当前页面加载脚本及样式文件;查看页面加载过的图片等资源(Source);好吧,感觉说的再多,也不如上图直接:Sources/InfoSources:查看页面源码;格式化html,css,js代码及json数据。Info:主要输出URL信息及User Agent;及其他的一些手机系统信息,同时也支持自定义输出内容哦。高阶用法以上刚才介绍的是它的一些基本的功能,也是我自己在工作中用的较多的;最近发现新版本功能要强大不少,之前一直用的1.0.5,好像是没有插件这一项的;大概看了一下,都蛮强大,包括上面的Dom tree,插件这部分并没有都实际应用过,所以也就不打肿脸充胖子了,有兴趣的同学可以自己看看。如果觉得已经的插件都满足不了你的需求,它还支持自定义插件自己编写。结尾: 以上就是今天给大家带来的分享,工作中用了蛮久,挺方便的,对于定位移动端的疑难杂症问题、甚至留下后门定位线上问题都有很大帮助,如文中有理解不到位之处,欢迎留言指出。 线上问题我们一般的做法是喜欢给某个不起眼的元素,添加一个点击事件,要点它十次、八次以后才开启 debug 模式; 上面二维码确实是真实的官方Demo,不用担心有套路,也有链接:https://eruda.liriliri.io/Github 地址:https://github.com/liriliri/eruda其他vue/react/java/大厂面试题等资源免费获取 大家好 这就是2018年的我~月入三万 还能少了你一个鸡蛋如何给localStorage设置一个有效期?作者:苏南 - 首席填坑官链接:http://susouth.com/交流:912594095、公众号:honeyBadger8本文原创,著作权归作者所有。商业转载请联系@IT·平头哥联盟获得授权,非商业转载请注明原链接及出处。 ...

December 24, 2018 · 1 min · jiezi

被忽略的console.log

除了console.log之外,还有更多方式调试JavaScript来输出值。 看起来很明显我们没有。人们告诉我,做JavaScript应该使用浏览器的调试器,但这肯定是要看运行环境的。 但是很多时候你只想知道代码的某一部分是执行还是变量是什么,而不会看着断点消失庞大的代码类库中。尽管如此,虽然我们使用console.log,但是很多人都没有意识到控制台本身除了基本日志之外还有很多其他选项。 适当使用这些功能可以使调试更容易,更快速,更直观。console.log()在旧的console.log中有超出人期望令人惊讶的功能。 虽然大多数人将它用作console.log(obj),但您也可以执行console.log(object,otherObject,string),它会将它们全部记录下来。 有时候方便。除此之外,还有另一种格式:console.log(msg,values)。 这很像像C或PHP中的sprintf。console.log(‘I like %s but I do not like %s.’, ‘Skittles’, ‘pus’);将完全按照您的预期输出。> I like Skittles but I do not like pus.常见的占位符是%o(这是一个字母o,而不是零),它接受一个对象,%s接受一个字符串,%d是一个十进制或整数。另一个有趣的是%c, 它实际上是CSS值的占位符。console.log(‘I am a %cbutton’, ‘color: white; background-color: orange; padding: 2px 5px; border-radius: 2px’);这些值会运行到后面的任何内容上,没有“结束标记”,这有点奇怪。 但你可以将它变得像这样。它不优雅,也不是特别有用。 当然,这不是一个真正的按钮。它有用吗?Ehhhhh。console.dir()在大多数情况下,console.dir()函数非常类似于log(),尽管它看起来有点不同。向下的小箭头将显示与上面相同的确切对象详细信息,这也可以从console.log版本中看到。 当你看到元素时,事物的分歧更加剧烈,更有趣。let element = document.getElementById(‘2x-container’);这是记录输入的输出:我打开了一些元素。 这清楚地显示了DOM,我们可以浏览它。 但是console.dir(element)为我们提供了惊人的不同输出。这是一种更加客观的方式来查看元素。 有时候这就是你真正想要的东西,更像是检查元素。console.warn()可能是最明显的直接替换log(),你可以用完全相同的方式使用console.warn()。 唯一真正的区别是输出有点黄。 具体来说,输出处于警告级别而不是信息级别,因此浏览器将稍微区别对待它。 这具有使其在杂乱输出中更明显的效果。但是,有一个更大的优势。 因为输出是警告而不是信息,所以您可以过滤掉所有console.log并仅保留console.warn。 这对于偶尔会在浏览器中输出大量无用废话的偶尔繁琐的应用程序尤其有用。 清除噪音可以让您更轻松地看到输出。console.table()令人惊讶的是,这并不是更为人所知,但是console.table()函数旨在以比抛出原始对象数组更简洁的方式显示表格数据。例如,这是一个数据列表。const transactions = [{ id: “7cb1-e041b126-f3b8”, seller: “WAL0412”, buyer: “WAL3023”, price: 203450, time: 1539688433},{ id: “1d4c-31f8f14b-1571”, seller: “WAL0452”, buyer: “WAL3023”, price: 348299, time: 1539688433},{ id: “b12c-b3adf58f-809f”, seller: “WAL0012”, buyer: “WAL2025”, price: 59240, time: 1539688433}];如果我们使用console.log来转储上面的内容,我们会得到一些非常无用的输出:▶ (3) [{…}, {…}, {…}]小箭头让你点击并打开阵列,当然,但这并不是我们想要的“一目了然”。虽然console.tabl(data)的输出更有帮助。可选的第二个参数是您想要的列的列表。 显然默认为所有列,但我们也可以这样做。> console.table(data, [“id”, “price”]);我们得到这个输出,只显示id和价格。 适用于过大的物体,细节基本无关。 索引列是自动创建的,并且据我所知不可以去掉。这里要注意的是这是乱序的 - 最右边的列标题上的箭头显示了原因。 我点击该列进行排序。 找到列的最大或最小,或者只是对数据进行不同的查看非常方便。 顺便说一句,该功能与显示部分列无关。 它始终可用。console.table()只能处理最多1000行,因此可能不适合所有数据集。console.assert()断言有用的函数assert() 与log() 相同,但仅在第一个参数为false的情况下。 如果第一个参数为真,它什么都不做。这对于有循环(或几个不同的函数调用)并且只有一个显示特定行为的情况特别有用。 基本上它和这样做是一样的。if (object.whatever === ‘value’) { console.log(object);}澄清的是,当我说“相同”时,做起来却是相反的。 所以你需要反转条件。因此,让我们假设上面的一个值是在时间戳中使用null或0,这会搞砸我们的代码格式化日期。console.assert(tx.timestamp, tx);当与任何有效的事务对象一起使用时,它只是跳过去。 但是false会触发我们的日志记录,因为时间戳是0或null。有时我们想要更复杂的条件。 例如,我们已经看到用户WAL0412的数据存在问题,并且只想显示来自它们的事务。 这是直观的解决方案。console.assert(tx.buyer === ‘WAL0412’, tx);这看起来正确,但不起作用。 请记住,条件必须是false…我们要断言,而不是过滤。console.assert(tx.buyer !== ‘WAL0412’, tx);这将做我们想要的。 买方不是WAL0412的任何交易在该条件下都是正确的,只留下那些。 或者……不是。像其中的一些,console.assert()并不总是特别有用。 但在特定情况下它可以是一个优雅的解决方案。console.count()另一个使用有用的功能,count只是作为一个计数器,可选择作为一个命名计数器。for(let i = 0; i < 10000; i++) { if(i % 2) { console.count(‘odds’); } if(!(i % 5)) { console.count(‘multiplesOfFive’); } if(isPrime(i)) { console.count(‘prime’); }}这不是有用的代码,有点抽象。 此外,我不打算演示isPrime函数,这是个伪代码。我们得到的应该基本上是一个列表odds: 1odds: 2prime: 1odds: 3multiplesOfFive: 1prime: 2odds: 4prime: 3odds: 5multiplesOfFive: 2…等等。 这对于您可能只是转储索引的情况很有用,或者您希望保留一个(或多个)运行计数。您也可以像这样使用console.count(),不带参数。 这样做会将其称为默认值。如果您愿意,还可以使用相关的console.countReset()来重置计数器。console.trace()这很难用简单的数据进行演示。 它擅长的地方在于你试图弄清楚实际调用者导致问题的类或库。例如,可能有12个不同的组件调用服务,但其中一个组件没有正确设置依赖关系。export default class CupcakeService { constructor(dataLib) { this.dataLib = dataLib; if(typeof dataLib !== ‘object’) { console.log(dataLib); console.trace(); } } …}在这里单独使用console.log()会告诉我们传入的dataLib是什么,而不是在哪里。 但是,堆栈跟踪将非常清楚地告诉我们问题是Dashboard.js,我们可以看到它是新的CupcakeService(false)并导致错误。console.time()用于跟踪操作所用时间的专用函数console.time()是跟踪JavaScript执行所用微时间的更好方法。function slowFunction(number) { var functionTimerStart = new Date().getTime(); // something slow or complex with the numbers. // Factorials, or whatever. var functionTime = new Date().getTime() - functionTimerStart; console.log(Function time: ${ functionTime });}var start = new Date().getTime();for (i = 0; i < 100000; ++i) { slowFunction(i);}var time = new Date().getTime() - start;console.log(Execution time: ${ time });这是一种老式的方法。 我还应该指向上面的console.log。 很多人都没有意识到你可以在那里使用模板字符串和插值,但你可以。 很有帮助。所以让我们使用新方法试试。const slowFunction = number => { console.time(‘slowFunction’); // something slow or complex with the numbers. // Factorials, or whatever. console.timeEnd(‘slowFunction’);}console.time();for (i = 0; i < 100000; ++i) { slowFunction(i);}console.timeEnd();我们现在不再需要做任何数学运算或设置临时变量。console.group()现在可能是控制台输出中最复杂和最先进的区域。 group让你……好吧,分组。 特别是它可以让你嵌套东西。 它擅长的地方在于显示代码中存在的结构。// this is the global scopelet number = 1;console.group(‘OutsideLoop’);console.log(number);console.group(‘Loop’);for (let i = 0; i < 5; i++) { number = i + number; console.log(number);}console.groupEnd();console.log(number);console.groupEnd();console.log(‘All done now’);这又是一种循环。 你可以在这里看到输出。虽然不是很有用,但你可能会看到其中一些是如何组合在一起的。class MyClass { constructor(dataAccess) { console.group(‘Constructor’); console.log(‘Constructor executed’); console.assert(typeof dataAccess === ‘object’, ‘Potentially incorrect dataAccess object’); this.initializeEvents(); console.groupEnd(); } initializeEvents() { console.group(’events’); console.log(‘Initialising events’); console.groupEnd(); }}let myClass = new MyClass(false);这是很多工作和很多用于调试信息的代码,可能不是那么有用。 但它仍然是一个有趣的想法,您可以看到它可以使您的日志记录更加清晰。最后要指出的是console.groupCollapsed。 在功能上,这与console.group相同,但块开始关闭。 它没有得到很好的支持,但如果你有一大堆废话,你可能想要默认隐藏它是一个选项。结论这里没有太多结论。 所有这些工具都可能有用,如果你可能只需要一点点console.log(pet),但实际上并不需要调试器。可能最有用的是console.table,但所有其他api也都有自己的作用。 我是console.assert的粉丝,因为我们想调试一些东西,但只能在特定情况下调试。 ...

December 11, 2018 · 2 min · jiezi