
获得徽章 0
- 如果你想重命名一个项目中的某个变量,你会怎么做呢?
难道是 ctrl + f 搜索,然后 replace 么?这样不仅效率低,而且容易出错。
更聪明的做法是使用 rename symbol 功能,主流编辑器都有这个功能。比如 vscode 直接点击某个变量,选择 rename symbol,然后你就可以输出新的名字点确定,之后这个项目(可能有多个文件)都会被替换为新名字。由于其实基于 ast 去做的,因此准确率很高。使用这种方法几秒就可以替换完成这个项目。展开赞过评论1 - 在上一家公司工作的时候,我负责开发公司的 ab test 系统。说实话,我们的功能极其简单。尽管如此,这个功能也花费了我们大量的时间去设计,实现,调试,发布。
easy-abtest 正如它的名字一样,是一个使用极为简单的 abtest 框架。
有多简单呢?我们来看下。
首先是定义变量,以及权重等配置。
```js
const abtest = require("easy-abtest");
let options = {
enabled: true,
name: "experiment-ID-here",
buckets: [
{ variant: 0, weight: 0.4 },
{ variant: 1, weight: 0.6 },
],
};
app.use(abtest(options));
```
> 字段含义参考官方文档
接下来就是使用了。经过上面的配置,你就可以在业务代码拿到之前定义的变量。比如上面的配置,你就有 40% 的请求拿到 variant 为 1,60% 请求拿到 variant 为 2。
这个数据默认是挂在 req.session.test 上的。
```js
if (req.session.test.bucket == 0) {
return res.render("index"); // 40%
} else if (req.session.test.bucket == 1) {
return res.render("index-new"); // 60%
}
```
这是一个刚刚发布不到一个月的产品,代码只有 100 行左右(加上测试用例代码差不多 200 行),不太建议直接在生产环境使用。
地址:github.com
展开评论点赞 - 当你试图对一个 npm 库做修改,一个常见的方法是
新建一个不同的名字的库,在这个新的库里你复制原有的代码并做修改。
修改依赖,引用新的被修改的库的名字。
这很不方便,且不利于追踪(比如如何查看改了什么功能?)。
patch-package 就解决了这个问题。使用方式也非常简单。
如下图:展开赞过11 - 测试失败的信息一般的形式是“f(x) = y, want z”,其中f(x)解释了失败的操作和对应的输出,y是实际的运行结果,z是期望的正确的结果。就像前面检查回文字符串的例子,实际的函数用于f(x)部分。显示x是表格驱动型测试中比较重要的部分,因为同一个断言可能对应不同的表格项执行多次。要避免无用和冗余的信息。在测试类似IsPalindrome返回布尔类型的函数时,可以忽略并没有额外信息的z部分。如果x、y或z是y的长度,输出一个相关部分的简明总结即可。测试的作者应该要努力帮助程序员诊断测试失败的原因。展开评论点赞
- 最近我整理了一份《大前端面试宝典 - 图解前端》
这是一份自己总结的关于准备前端面试的一个复习汇总项目,项目不定时更新。
这不仅仅是一份用于求职面试的攻略,也是一份前端er用来检视自己,实现突破的宝典。
希望通过这个指南,大家可以打通自己的任督二脉,在前端的路上更进一步。
本仓库大量采用图的形式来传达知识,所谓一图胜千言,希望通过这种图文并茂的表达方式
让你更容易记住一些抽象,难以理解的概念,《图解前端》是我给它的副标题。
项目也是刚刚开始整理,希望大家可以多多参与进来。
仓库地址:github.com
在线阅读地址:lucifer.ren
展开等人赞过148 - 启发式算法(heuristic algorithm)是相对于最优化算法提出的, 在很多领域都有着很重要的应用。 比如浏览器对于资源加载的优先级判定就是基于启发式算法,另外V8的垃圾回收算法也是基于启发式算法,任何启发式算法都并非有效,因为它能够获取到的信息有限。如何告知算法接下来的内容,提供更多信息是提高启发式算法的有效途径赞过评论2