JavaScript port of Ruby library Scientist, carefully refactoring critical paths

來自: https://github.com/ziyasal/scientist.js

scientist.js

A JavaScript interpretation of the Ruby libraryScientist, 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 beahviours 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();
}

}</pre>

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 and use 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 of use ,
  • Publishes all this information.

The use block is called the control . The try block is called the candidate .

</article>

 本文由用戶 KattieHead 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!