Ruby庫Scientist的一個JavaScript解釋:scientist.js
scientist.js
Ruby 庫 Scientist的一個JavaScript解釋, a library for carefully refactoring critical paths.
How do I science?
Let's pretend you're changing the way you handle permissions in a large web app. Tests can help guide your refactoring, but you really want to capture the current and refactored behaviours under load.
ES6 Sample
import {Experiment, Result} from 'scientist.js';
import Permission from './permission';
import Model from './model';
class MyWidget {
constructor() {
this.model = new Model();
}
allows(user) {
var experiment = new Experiment("widget-permissions");
experiment.use(() => this.model.checkUser(user).valid); // old way
experiment.try(() => user.can(Permission.Read, this.model)); // new way
return experiment.run();
}
}
Use use(..)
to wrap the existing original behaviour, and use try(..)
to wrap the new behaviour. experiment.run();
will always return the result of the use
block, but it does a bunch of stuff behind the scenes:
- It decides whether or not to run the
try
block - Randomises order to execute
try
anduse
blocks - Measures the duration of both behaviours
- Swallows (but records) any exceptions raised in the
try
block and - Set a condition to filter calls to
try
Upcoming features (these already exist in the Ruby
library):
- Compares the result of
try
to the result ofuse
, - Publishes all this information.
The use
block is called the control. The try
block is called the candidate.
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!