Skip to content

VM: VM is much slower when timeout was specified #10453

Description

@mooyoul
  • Version:
    Node.js v6.7.0 / Node.js 4.4.2
  • Platform:
    Ubuntu 14.04 LTS x64 (v6.7.0) / macOS Sierra (v4.4.2)
  • Subsystem:
    VM

2016-12-26 4 23 20

I just found there's unexpected behavior on timeout option of vm.runInContext.

When timeout option was specified, Script execution on VM is much slower then timeout options wasn't specified.

This is two of example snippets to reproduce that problem:

vm-normal.js
'use strict';

const
  vm = require('vm'),
  sandbox = {
    current: -1
  };

console.time('vm-normal');

vm.createContext(sandbox);

for (let i = 0 ; i < 100000 ; i++) {
  vm.runInContext(`current = ${i};`, sandbox, {
    displayErrors: false
  });
}

console.timeEnd('vm-normal');
vm-with-timeout.js
'use strict';

const
  vm = require('vm'),
  sandbox = {
    current: -1
  };

console.time('vm-with-timeout');

vm.createContext(sandbox);

for (let i = 0 ; i < 100000 ; i++) {
  vm.runInContext(`current = ${i};`, sandbox, {
    displayErrors: false,
    timeout: 1000
  });
}

console.timeEnd('vm-with-timeout');

I think maybe that's not a bug (timer for timeout is expansive?), but that's unexpected behavior. It would be nice if that limitation should be documented on VM API documentation.

Activity

  1. added
    performanceIssues and PRs related to the performance of Node.js.
    vmIssues and PRs related to the vm subsystem.
    on Dec 25, 2016
  2. addaleax commented on Dec 25, 2016

    @addaleax
    Member

    When timeout option was specified, Script execution on VM is much slower then timeout options wasn't specified.

    The script execution isn’t slower, but of course there’s overhead associated with setting up the timer and stopping it again (especially because Node can’t use its usual facilities for that), which happens once for each runInContext call.

    You can move the for loop into the script itself and the difference should vanish. You can feel free to open a PR against the documentation, of course.

  3. added
    docIssues and PRs related to Node.js documentation.
    on Dec 25, 2016
  4. mscdex commented on Dec 25, 2016

    @mscdex
    Contributor

    Also on an unrelated note, using the let in the for like that is slower (not sure about node v7).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    docIssues and PRs related to Node.js documentation.performanceIssues and PRs related to the performance of Node.js.questionIssues asking questions about Node.js.vmIssues and PRs related to the vm subsystem.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions