| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
KattieHead
8年前发布

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();      }  }

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 .

 本文由用户 KattieHead 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1455809154573.html
代码重构 Ruby JavaScript开发 JavaScript