Google Chrome 作为程序员最常用的一款网页浏览器,凭借其强大的插件系统而广受赞赏,程序员作为上面一批最会折腾的用户,自然也不免俗的会在上面胡乱折腾出一些沙雕插件。...而这其中,有不少插件代码还开源并托管到 GitHub 上。 今天抽空跟大家分享下,我曾看过的那些比较沙雕的 Chrome 插件。...之后,在短短数月内,该游戏瞬间火爆各大社交网络,成为 2014 年最受欢迎的手游之一,当时我身边不少朋友的手机上都安装了这款游戏。 一款爆品的诞生,往往也伴随着一些赝品的争相模仿。...该游戏由电子科技大学的一名学生所研发,通过在 Chrome 上安装这款游戏,你便可以在 GitHub 上的 commit 强愉快的玩耍章鱼猫小游戏。 可以说是非常有创意了。...https://github.com/YGYOOO/WeChat-Shelter 一键将 Google 转为百度 如果你会用 Google 进行访问外国网站,而其他人不会,那相信这个声音应该时常会在你耳边响起
对于 MySQL 慢 SQL 的分析 在之前的文章,我提到过 SQL 调优一般通过下面三个工具: EXPLAIN:这个是比较浅显的分析,并不会真正执行 SQL,分析出来的可能不够准确详细。...但是不能直观的看出来为啥会走错索引,需要通过 OPTIMIZER TRACE 进行进一步定位。但是在进一步定位之前,我想先说一下 MySQL 的 InnoDB 查询优化器数据配置。...假设本次采集的结果就是图中所示,其他索引采集的比较均衡,通过其他索引判断用户都要扫描几万行的结果。但是主键采集的最后一页,正好末尾全是这个用户的记录。...这也引出了一个新的可能大家也会遇到的问题,我在原有索引的基础上,加了一个复合索引(举个例子就是原来只有 idx_user_id,后来加了 idx_user_status_pay),那么原来的只按照 user_id...所以最好一开始就能估计出大表的量级,但是这个很难。 结论和建议 综上所述,我建议线上对于数据量比较大的表,最好能提前通过分库分表控制每个表的数据量,但是业务增长与产品需求都是不断在迭代并且变复杂的。
这可以让Chrome与Web IDL标准以及其他浏览器(IE和Firfox)保持一致。注:旧的基于Webkit的浏览器与标准不兼容但是safari已经与标准兼容了。...这项更新有很多好处: 因为遵循了规范,所以跨浏览器的兼容性更好(IE和Firefox早就与规范保持一致了) 让开发者一致且高效地创建DOM对象上的getter/setter 提高DOM编程的灵活性。...因为DOM属性都移动到了原型链中,而hasOwnProperties方法不会检查原型链上是否有这个属性。 在Chrome 42及以前版本中,如下代码的执行结果为true。...(div, "isContentEditable"); undefined 这意味着如果你想要获取isContentEditable属性的描述对象,那就需要循着原型链溯流而上找: > Object.getOwnPropertyDescriptor..."subscriptionId": "SomeID" } Chrome 43及以后的版本中将不会序列化DOM属性,因为他们定义在prototype上。
Chrome任务管理器 当你打开一个 Tab 页面的时候,就创建了一个进程。如果从一个页面打开了另一个页面,打开的页面和当前的页面属于同一站点的话,那么这个页面会复用父页面的渲染进程。...同步任务:必须等到结果来了之后才能做其他的事情,举例来说就是你烧水的时候一直等在水壶旁边等水烧开,期间不做其他的任何事情。...不知道大家看了宏任务和微任务之后会不会有一个疑惑,宏任务和微任务都是异步任务,微任务之前说过了是为了及时解决一些必要事件而产生的。 为什么要有微任务?...不能只是默许接受这个概念,在这里,我根据我的个人理解进行一番说(hu)明(che) 宏任务和微任务的真面目 其实在 Chrome 的源码中并没有什么宏任务和微任务的代码或是说明,在 JS 大会[3]上提到过微任务这个名词...笔者大概了解了一下应该是用 PromiseResolve 对 await 进行了优化,减少了 Promise 的再次创建,有兴趣的小伙伴可以看看 Chrome 的源码。
Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。...selenium也是支持无界面浏览器操作的。 2.为什么使用selenium 模拟浏览器功能,自动执行网页中的js代码,实现动态加载。...import webdriver (2)创建谷歌浏览器操作对象: path = 谷歌浏览器驱动文件路径 browser = webdriver.Chrome(path) (3)访问网址...解压后文件的路径,放在项目里lib/目录下 path = 'lib/chromedriver.exe' # (2) 创建浏览器操作对象 browser = webdriver.Chrome(path)...import Service import time # 创建浏览器对象 s = Service(r'lib/chromedriver.exe') browser = webdriver.Chrome
如果不做这个校验,是不是我也可以正常在子线程更新UI 但是google为什么要这样去设计呢 ViewRootImp是在onActivityCreated方法后面创建的吗 为什么一定需要checkThread...为什么还需要开启消息循坏 使用子线程更新UI有实际应用场景吗 Android为什么不能在子线程更新UI? // Android中为什么子线程不能更新UI?...viewRootImpl对象是在Activity中的onResume方法执行完成之后,View变得可见时才创建的,之前的操作是没有进行线程检查的,所以没有报错。...所以干脆使用单线程模型处理UI操作,使用时用Handler切换即可 为什么一开始在Activity的onCreate方法中创建一个子线程访问UI,程序还是正常能跑起来呢 // 为什么一开始在Activity...为什么还需要开启消息循坏 // 保证上述条件1成立,不就可以避免checkThread时候抛出异常了吗?为什么还需要开启消息循坏?
收尾 其他元件 1逻辑控制器 1.1 简单控制器 简单逻辑控制器允许您组织采样器和其他逻辑控制器。与其他逻辑控制器不同,该控制器提供的功能仅限于存储设备。...图2 SimpleTestPlan.jmx 在图2中有两个简单逻辑控制器,旧版本和新版本。...图3 While控制器 Condition(function or variable):空白、LAST、或者变量/函数。 可能的条件值。 空白:循环中最后一个样本失败时退出循环。...LAST:当循环中的最后一个样本失败时退出循环。如果循环前的最后一个样本失败,不要进入循环。 否则:当条件等于字符串时退出循环。 例如: ${VAR}:其中,其他测试元素将VAR设置为false。...通过右键在弹出菜单中选择“添加->逻辑控制器->Switch控制器”,如图4所示。 图4 Switch控制器 Switch Value:要调用的从属元素的编号(或名称)。元素从0开始编号。
,都是我们开发能着手去做的点,大家都在讲性能优化,但对于项目经验不够丰富的朋友很难有一个概念,做优化的时候也会比较茫然,这里我就给大家指明方向。...数据存储 上一节讲的是数据解析,我们解析完后的数据,可能就需要将数据存储在某个地方,Android的五种存储方式: Content Provider(主要用来向其他应用程序共享数据) SQLite(存储数据到数据库中...()方法解析视图 注:这里引用了Android群英传的相关优化点 创建新的对象都需要额外的内存空间,要尽量减少创建新的对象。...如果程序会频繁创建线程,则可以考虑使用线程池。 以上都是些经验总结,大致都相差无几,朋友们在做代码优化的时候,可以根据这些优化点,有针对性去重构代码,其实最重要还是代码的可读性,结构清晰。...最后 写这篇文章的出发点也是对Android性能优化有个比较清楚的认识,任何事情都不可能一蹴而就,需要循循渐进,对一个初学者你谈优化很不现实,我们先把基本的做好,再去考虑相应的优化,笔者也在不断学习当中
原来,帝俊与羲和生了 10个孩子都是太阳,他们住在东方海外,海水中有棵大树叫扶桑。10个太阳睡在枝条的底下,轮流跑出来在天空执勤,照耀大地。但有时,他们一齐出来给人类带来了灾难。...1. for 循坏 for 循环用于迭代序列(即列表、元组、字典、集合或字符串等)。这与其他编程语言中的 for 关键字不太相似,而是更像其他面向对象编程语言中的迭代器方法。...在这里还是提醒大家,注意代码规范哟,注意各个语句的缩进,if 语句块是包含在 while 语句块中的,因此if 语句前面有 4 个空白字符,break 语句是在 if 语句下的,因此 break 语句相较于...if 语句前方又有四个空白字符,还有冒号及所有代码都是英文状态下的。...3.2 continue 3.2.1 将continue用于for循坏 我们先一起来看下continue 在 for 循环的应用,大家点击运行。
前言 Console在我们开发中应该使用很频繁并且都会用的一个工具,确实好用。但是你真的会用吗?...很多人可能都知道 Chrome 和 FireFox(FireBug)中都支持 Console。而其他浏览器都支 持不好。...比如 IE8 自带的开发工具虽然支持 Console,但功能比较单调,显示对象的时候都是显示 [Object,Object],而且不能点击查看对象里面的属性。...为什么不直接使用 alert 或自己写的 log? 使用 alert 不是一样可以显示信息,调试程序吗?alert 弹出窗口会中断程序, 如果要在循环中显示信息,手点击关闭窗口都累死。...这组函数其实就实现了这样的功能,time(name)根据 name 创建1个新 的计时器。timeEnd(name)停止给定name 的计时器,并显示时间。
首先,我们先来了解一下Linux中的密钥环(keyring)概念。 Linux中的密钥环是什么,为什么要使用它? ? 为什么在现实生活中使用钥匙环?...这就是为什么当你开始使用Chrome时,它将要求你反复解锁钥匙环的原因。这样可以确保只有知道密钥环密码(即帐户密码)的人才能使用浏览器中保存的密码登录各自的网站。...Ubuntu中的密码和密钥应用程序你可以使用此GUI应用程序查看使用密钥环管理/锁定密码的应用程序。 如你所见,我的系统具有自动创建的登录密钥环。还有一个用于存储GPG和SSH密钥的密钥环。...例如,我创建了一个新的受密码保护的钥匙环,称为“Test”,并将密码手动存储在该钥匙环中。 这比在文本文件中保留密码列表要好一些。至少只有当你用密码解锁密钥环时才能查看密码。 ?...还可以完全复制此未锁定的密钥环文件,并将其导入到其他Linux计算机(运行此应用程序)上的“密码和密钥”应用程序中。
举个栗子,也是最常见的例子, 标签,我们创建在页面上创建一个空白的 video 标签: 查看 DOM 结构如下: ?...在 中,例如暂停,播放,音量控制,全屏按钮,进度条等都是 shadow-root 的后代。它们工作时会显示在屏幕上,但他们的 DOM 结构对用户是不可见的。...contents 就是上述所说的 中各子组件的 DOM 的具体实现。 为什么需要 shadow-dom 为什么需要有这种结构呢?...以 w3c 上的一个 例子为例,我们仅仅是填写了一个空白的标签,再加上 src 属性里填上视频地址,就可以播放视频了: ?...不幸的是,上面的控制方式只适用于 chrome 浏览器,虽然大部分现代浏览器已经支持 shadow-dom ,但是能够审查 shadow-dom 内部 DOM 元素的只有 chrome 浏览器,其他浏览器仍会把这些细节隐藏
这些兼容性问题,都是必然的,因为技术在不断进步,不断革新,所谓,“后浪推前浪,前浪拍死在沙滩上”,当然我们的技术不能是被拍死在沙滩上,我们还要支持,不支持的话,只能是你这个页面,这个产品被淘汰。...我写页面的时候用到过很多的flex布局,觉得非常好用。下面附上一篇不错的flex布局介绍的文章。...Flex 布局教程想了解的可以自己去看看这篇博文,或者自己百度,这里先部多做介绍,我们主要来说一说flex布局的兼容性问题。 why? 大家可能想问了,flex布局为什么会存在兼容性问题啊?...之所以存在兼容性问题,是因为技术在不断的更新,有些旧的浏览器只支持旧语法的书写方式,所以就出现所谓的兼容性问题。 what? 那么新旧版本是什么?...尤其是在底版本安卓系统中。因为什么呢?因为所有都是向下兼容的,所以写法的顺序一定要写好了才起作用。就是把旧语法写在底下,个别不兼容的移动设置才会识别,哪些是旧的语法,你懂的。
阅读本文大约需要 4 分钟 前言 相信大部分前端同学都是用Chrome浏览器进行开发,这篇博客要分享的基本上是除了我们常用console.log之外的,Chrome开发者工具控制面板提供的调试方法~...首先在地址栏敲入:about:blank 创建一个空白页,再打开控制台~ 开始操作演示~(多图预警!...$0 - $4 $0、$1、$2、$3、$4 五个指令相当于在 Elements 面板最近选择过的五个引用。 比如我在掘金网站上随意点击了五个DOM节点。从时间线上,$4 是我第一个点击的。...而$0 是我第五个,也即是最后一个点击的。利用此方法可以快速在 Console 面板调试你选中的节点! ?...getEventListeners 获取注册到一个对象上的所有事件监听器~ ?
它运行在 chrome v8 引擎上,该引擎是用 c++ 编写的,并且具有不断改进的高性能。 此外,由于我们将在前端和后端都使用 Javascript,因此开发速度会快得多。...因此,即使我们有单线程 JS,I/O 操作也是以非阻塞方式处理的。 4、为什么Node.js是单线程的 ? Node.js 是作为异步处理的实验显式创建的。...有两种类型的 API 函数: 异步、非阻塞函数:主要是 I/O 操作,可以从主循环中分叉出来。 同步的、阻塞的函数 :主要是影响在主循环中运行的进程的操作。...setImmediate/clearImmediate 作为 setImmediate() 参数传递的任何函数都是 在事件循环的下一次迭代中执行的回调。...在 node 中,它用于创建一个新的 v8 引擎实例来运行多个 worker 来执行代码。 11、module.exports 的用途是什么 ? 这用于公开要在项目其他地方使用的特定模块或文件的功能。
我正在使用 Chrome ,所以 href 比其他版本更快。所以我会使用 href,并且我认为它读起来比 toSting() 更清晰。...空白页 当前页面 我只需要在定义中强调“当前页面”。它是在你调用 assign 或 replace 之前的页面。 1. 打开一个新的空白页 2....,并在我的 Chrome 版本中运行的更快更快。...我在谷歌搜索如何重定向到另一个页面,然后遇到了 window.location 对象。有时候我觉得开发人员就像一个记者或者是侦探——需要通过大量的挖掘和梳理多个来源来收集所有的可用信息。...译者注 在 twitter 上看到 javaScript 方向的大 V 推荐了这篇文章,看完英文版本后,觉得整理的非常详细,完全可以给初级工程师当做参考资料。
Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是 String 类的一个实例。...实际上这个过程中只是 gh 这个引用的指向在改变,"a"、"a0"、"a01" 并没有被改变。 注:这是我画的几个草图为了帮助大家理解,实际上字符串的内存分析要比这个复杂点。 ? ? ?...当 Java 编译器遇到字符串拼接的时候,会创建一个 StringBuilder 对象,后面的拼接,实际上是调用 StringBuilder 对象的 append 方法。...StringBuilder 对象的创建在循坏外面,这样就只创建了一个对象,比较好。 总结 我们在循环体中需要尽量避免隐式或者显式创建 StringBuilder。...其实对于循坏来说,尽量避免在循坏里创建对象,可以将创建对象这个操作放在循坏外面,这样我们就让这个对象达到复用了。
前言 最近有一些爬虫用户在使用 playwright 的时候,提到 playwright 默认是用无痕模式打开的浏览器,很多网站会有反爬机制,使用无痕模式打开的时候功能无法正常使用。...browser.close() 问题2:launch_persistent_context 创建的浏览器对象,无法使用browser.new_context() 创建上下文?...因为 launch_persistent_context 字面上意思就已经是一个context 上下文对象了,所以无法创建上下文,只能创建page对象。...问题5:为什么按你的教程,我这个网站就无法保持登录?...有些博客网站,你登录一次,cookies 几个月都有效,这种就可以利用缓存的cookies 保持登录。 问题6:为什么网上其他教程 user_data_dir 写chrome 的安装目录?
为什么呢?原因是事件环中JS Stack过于繁忙的原因,当排队轮到定时器的callback执行的时候,早已超时。...但是在异步的情况下,比如ajax轮循(websocket不在讨论范围内),我们只有一种选择就是setTimeout,原因只有一个——天晓得这次ajax要浪多久才肯回来,这种情况下只有setTimeout...JS是单线程的 在进入正题之前,我们先讨论下JS的特性。他和其他的编程语言区别在哪里?虽然笔者没有深入接触过其他语言,但是有一点可以肯定,JS是服务于浏览器的,浏览器可以直接读懂js。...听上去特别牛逼的概念,其实就是我们创建的变量或者定义的对象,没有用了之后没有被系统回收,导致系统没有新的内存分配给之后需要创建的变量。简单的说就是借了没还,债台高筑。...实践是唯一获取真理的方式。通过chrome的测试工具,我们可以发现清除分配给变量的内容,可以释放内存,这也是为什么有许多代码结束之后会xxx=null,也就是为了释放内存的原因。
前言 相信大部分前端同学都是用 Chrome 浏览器进行开发,这篇博客要分享的基本上是除了我们常用 console.log之外的,Chrome 开发者工具控制面板提供的调试方法~ 首先在地址栏敲入:about...:blank 创建一个空白页,再打开控制台~ 开始操作演示~(多图预警 !)...$0 - $4 $0、$1、$2、$3、$4 五个指令相当于在 Elements 面板最近选择过的五个引用。比如我在 Elements 面板上随意点击了掘金网站上的五个 DOM 节点。...从时间线上, $4 是我第一个点击的。而 $0 是我第五个,也即是最后一个点击的。利用此方法可以快速在 Console 面板调试你选中的节点! ?...getEventListeners 获取注册到一个对象上的所有事件监听器~ ? 其实还有内置的 inspect、debug/undebug 等方法,大家可以自行搜索,都很有用,这里就不一一介绍了。
领取专属 10元无门槛券
手把手带您无忧上云