02 2022 档案
摘要:我们知道,在写爬虫的过程中,如果总是使用同一个 IP,很容易就会被网站识别并封禁,所以需要使用代理 IP 并经常更换。 但如果你在网上搜索 Puppeteer 如何更换代理 IP,你会发现,网上的解决方案一般是这样写的: const puppeteer = require('puppeteer');
阅读全文
摘要:前言 如果你关注软件开发最佳实践方面的话题,你肯定听说过测试驱动开发(TDD - Test Driven Development) 和行为驱动开发(BDD - Behavior Driven Development)。这篇文章会为你阐述这两种模式的含义并举例,同时对二者进行比较。 测试驱动开发 (T
阅读全文
摘要:诞生背景 HTTP/1:每次请求都建立一个TCP连接 HTTP/1.1:支持长连接,同一个IP对应一个TCP连接 HTTP/2:TCP多路复用,同一个TCP并发 多个HTTP请求 并发数量在浏览器实现上有限制,以Chrome为例为6,普遍为6~8(可能为滑动窗口大小限制,或者因为更多的并发数量若发生
阅读全文
摘要:网页开发中我们经常要处理用户交互,我们会用 addEventListener 添加事件监听器来监听各种用户操作,比如 click、mousedown、mousemove、input 等,这些都是由用户直接触发的事件。 那么对于一些不是由用户直接触发的事件呢?比如元素从不可见到可见、元素大小的改变、元
阅读全文
摘要:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境。早期的 Node.js 采用的是 CommonJS 模块规范,从 Node v13.2.0 版本开始正式支持 ES Modules 特性。直到 v15.3.0 版本 ES Modules 特性才稳定下来并与 N
阅读全文