2

いくつかの基本的なベンチマーク テストを機能させようとしていますが、適切な構成を見つけるのに苦労しています。コードをes5にトランスパイルするために、WebpackとbabelでBenchmarkjsを使用しようとしています。次のようなエントリ ポイントとして、benchmarks.webpack.jsを作成しました。

var context = require.context('./src/js', true, /-benchmark\.js$/);
context.keys().forEach(context);
module.exports = context;

次に、実行したいベンチマーク ファイル ( test-benchmark.js )を用意します。

import benchmark from 'benchmark';
import benchmarks from 'beautify-benchmark';

let suite = new benchmark.Suite;

suite.add('RegExp#test', function() {
  /o/.test('Hello World!');
})
.add('String#indexOf', function() {
  'Hello World!'.indexOf('o') > -1;
})
.on('cycle', function(event) {
  benchmarks.add(event.target);
})
.on('complete', function() {
  benchmarks.log();
})
.run();

ベンチマークを試してトランスパイルするために、webpack ビルドを更新しました。

_.assign(config, {
  devtool: 'eval-cheap-module-source-map',
  output: {
    path: path.join(__dirname, 'build/benchmark'),
    filename: 'benchmark.js',
    publicPath: '/'
  },
  entry: [
    './benchmarks.webpack.js'
  ],
  plugins: [

  ],
  module: {
    loaders: [
      {
        test: /\.js$/,
        loaders: ['babel?stage=0'],
        include: path.join(__dirname, 'src/js')
      },
    ]
  },
});

最後に、npm スクリプトからこれを実行できるようにしたいと考えています。

  "scripts": {
    "bench": "webpack --config webpack.bench.config.js && node build/benchmark/benchmark.js"
  },

ただし、ベンチマークの依存関係の結果が式であり、.json、.txt などのファイルに適したローダーがないという警告が表示されます。Benchmarkjs をハックして正しくエクスポートしようとしましたが、成功しませんでした。

WARNING in ./~/benchmark/benchmark.js
Critical dependencies:
1122:34-49 the request of a dependency is an expression
 @ ./~/benchmark/benchmark.js 1122:34-49

WARNING in ./~/benchmark/package.json
Module parse failed: /home/bill/dev/levelstory/react-client-redux/node_modules/benchmark/package.json Line 2: Unexpected token :
You may need an appropriate loader to handle this file type.
| {
|   "name": "benchmark",
|   "version": "1.0.0",
|   "description": "A benchmarking library that works on nearly all JavaScript platforms, supports high-resolution timers, and returns statistically significant results.",
 @ ./~/benchmark ^\.\/.*$

WARNING in ./~/benchmark/LICENSE.txt
Module parse failed: /home/bill/dev/levelstory/react-client-redux/node_modules/benchmark/LICENSE.txt Line 1: Unexpected number
You may need an appropriate loader to handle this file type.
| Copyright 2010-2012 Mathias Bynens <http://mathiasbynens.be/>
| Based on JSLitmus.js, copyright Robert Kieffer <http://broofa.com/>
| Modified by John-David Dalton <http://allyoucanleet.com/>
 @ ./~/benchmark ^\.\/.*$
4

1 に答える 1

1

ベンチマークは で何か特別なことをしているようrequireです。それはWebpackにとってそれを台無しにします。次の行があります。

var freeRequire = typeof require == 'function' && require;

...

function req(id) {
    try {
        var result = freeExports && freeRequire(id);
    } catch(e) { }
    return result || null;
}

関数の内容をコメントアウトすると、エラーはなくなります。このようにパッチを適用するのは理想的ではないので、代わりにベンチマーク担当者に直接このことについて突っ込みます。おそらく、私たちが見逃しているものがあります。

于 2015-08-28T04:58:58.140 に答える