isomorfeus-speednode 0.5.3 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 11a836ac72dbce40b8926276342a91f3c7d3999b562f5be8670102e9b2196751
4
- data.tar.gz: 1110a497795537221829ea361959a1b9c00e1570447744141b047efedecf2685
3
+ metadata.gz: 59fdae16925c182e3d86602153873a69f6a507d27d702a8405b70b191854a821
4
+ data.tar.gz: faa6999fcdc0ffe5a294e975261b3a029227cd291554cd283d7e057a98b655dc
5
5
  SHA512:
6
- metadata.gz: 0c4f86cf44a01774584782e12c94cb8bd4677c348f914aca3740c697297be2f843da12642683932bb5bd7470c7c1e87009373429644cfe871c11b50082d594df
7
- data.tar.gz: 3ef559f6eecf237c5fb4a46ef3eadd243d8f482fef64170391fcaeeaed373a900401dfe4259d6d7bebf62200529ad54e8efc69f4c6cd887c022b02f701d91092
6
+ metadata.gz: '004933d5d91f7cb58bcdabe3a31ba3cf7b740dd8ebce97fe437d10c16e9e5874938db56f64520119ace1015b830b682bd552e5e9fd69dfa58f6766de14925c90'
7
+ data.tar.gz: aaa36c20a56c37c462844b8b8e4e2df57224105939ae46a1159e91d59fe5c6bc9eafeb9a9cdccbcb0735623115b2f3e0440047b3ef55807b02fd9150e75786f6
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  Isomorfeus Speednode<br/>
4
4
  </h1>
5
5
 
6
- A fast runtime for execjs using node js. Works on Linux, BSDs, MacOS and Windows.
6
+ A fast runtime for ExecJS using node js. Works on Linux, BSDs, MacOS and Windows.
7
7
  Inspired by [execjs-fastnode](https://github.com/jhawthorn/execjs-fastnode).
8
8
 
9
9
  ### Community and Support
@@ -137,4 +137,4 @@ To run tests:
137
137
  - clone repo
138
138
  - `cd ruby`
139
139
  - `bundle install`
140
- - `bundle exec rake test`
140
+ - `bundle exec rake test`
@@ -1,5 +1,9 @@
1
1
  module ExecJS
2
2
  class << self
3
+ def permissive_bench(source, options = {})
4
+ runtime.permissive_bench(source, options)
5
+ end
6
+
3
7
  def permissive_exec(source, options = {})
4
8
  runtime.permissive_exec(source, options)
5
9
  end
@@ -1,6 +1,11 @@
1
1
  module ExecJS
2
2
  # Abstract base class for runtimes
3
3
  class Runtime
4
+ def permissive_bench(source, options = {})
5
+ context = permissive_compile("", options)
6
+ context.bench(source, options)
7
+ end
8
+
4
9
  def permissive_exec(source, options = {})
5
10
  context = permissive_compile("", options)
6
11
  context.exec(source, options)
@@ -201,6 +201,7 @@ function attachFunctionSource(responder_path, context, func) {
201
201
  function createCompatibleContext(uuid, options) {
202
202
  let c = vm.createContext();
203
203
  vm.runInContext('delete this.console', c, "(execjs)");
204
+ vm.runInContext('delete this.gc', c, "(execjs)");
204
205
  contexts[uuid] = { context: c, options: options };
205
206
  return c;
206
207
  }
@@ -265,6 +266,19 @@ let commands = {
265
266
  let result = vm.runInContext(attachFunctionSource(responder_path, input.context, input.func), context, { filename: "(execjs)", displayErrors: true });
266
267
  return formatResult(result);
267
268
  },
269
+ bench: function (input) {
270
+ if (typeof global.gc === "function") { global.gc(); }
271
+ let context = getContext(input.context);
272
+ let options = getContextOptions(input.context);
273
+ performance.mark('start_bench');
274
+ let result = vm.runInContext(input.source, context, options);
275
+ performance.mark('stop_bench');
276
+ let duration = performance.measure('bench_time', 'start_bench', 'stop_bench').duration;
277
+ performance.clearMarks();
278
+ performance.clearMeasures();
279
+ if (typeof global.gc === "function") { global.gc(); }
280
+ return formatResult({ result: result, duration: duration });
281
+ },
268
282
  create: function (input) {
269
283
  let context = createCompatibleContext(input.context, input.options);
270
284
  let result = vm.runInContext(input.source, context, getContextOptions(input.context));
@@ -66,6 +66,10 @@ module Isomorfeus
66
66
  await_result
67
67
  end
68
68
 
69
+ def bench(source, _options = nil)
70
+ raw_bench(source) if /\S/ =~ source
71
+ end
72
+
69
73
  def call(identifier, *args)
70
74
  raw_eval("#{identifier}.apply(this, #{::Oj.dump(args, mode: :strict)})")
71
75
  end
@@ -102,6 +106,10 @@ module Isomorfeus
102
106
 
103
107
  protected
104
108
 
109
+ def raw_bench(source)
110
+ extract_result(@vm.bench(@uuid, encode(source)))
111
+ end
112
+
105
113
  def raw_eval(source)
106
114
  extract_result(@vm.eval(@uuid, encode(source)))
107
115
  end
@@ -95,6 +95,10 @@ module Isomorfeus
95
95
  command('exec', {'context' => context, 'source' => source})
96
96
  end
97
97
 
98
+ def bench(context, source)
99
+ command('bench', {'context' => context, 'source' => source})
100
+ end
101
+
98
102
  def create(context, source, options)
99
103
  command('create', {'context' => context, 'source' => source, 'options' => options})
100
104
  end
@@ -141,7 +145,7 @@ module Isomorfeus
141
145
  @socket_dir = Dir.mktmpdir("iso-speednode-")
142
146
  @socket_path = File.join(@socket_dir, "socket")
143
147
  end
144
- @pid = Process.spawn({"SOCKET_PATH" => @socket_path}, @options[:binary], @options[:source_maps], @options[:runner_path])
148
+ @pid = Process.spawn({"SOCKET_PATH" => @socket_path}, @options[:binary], '--expose-gc', @options[:source_maps], @options[:runner_path])
145
149
 
146
150
  retries = 500
147
151
 
@@ -27,12 +27,12 @@ module Isomorfeus
27
27
  sent_bytes += @socket.sendmsg(message.byteslice((sent_bytes)..-1))
28
28
  end
29
29
  end
30
-
30
+
31
31
  begin
32
32
  result << @socket.recvmsg()[0]
33
33
  end until result.end_with?("\x04")
34
34
  end
35
- ::Oj.load(result.chop!, create_additions: false)
35
+ ::Oj.load(result.chop!, mode: :strict)
36
36
  end
37
37
  end
38
38
  end
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  module Speednode
3
- VERSION = '0.5.3'
3
+ VERSION = '0.6.1'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-speednode
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-05 00:00:00.000000000 Z
11
+ date: 2023-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: execjs
@@ -28,16 +28,22 @@ dependencies:
28
28
  name: oj
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 3.13.23
34
+ - - "<"
32
35
  - !ruby/object:Gem::Version
33
- version: 3.13.11
36
+ version: 3.15.0
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 3.13.23
44
+ - - "<"
39
45
  - !ruby/object:Gem::Version
40
- version: 3.13.11
46
+ version: 3.15.0
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: win32-pipe
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +78,14 @@ dependencies:
72
78
  requirements:
73
79
  - - "~>"
74
80
  - !ruby/object:Gem::Version
75
- version: 5.15.0
81
+ version: 5.18.0
76
82
  type: :development
77
83
  prerelease: false
78
84
  version_requirements: !ruby/object:Gem::Requirement
79
85
  requirements:
80
86
  - - "~>"
81
87
  - !ruby/object:Gem::Version
82
- version: 5.15.0
88
+ version: 5.18.0
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: rake
85
91
  requirement: !ruby/object:Gem::Requirement
@@ -151,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
157
  - !ruby/object:Gem::Version
152
158
  version: '0'
153
159
  requirements: []
154
- rubygems_version: 3.3.7
160
+ rubygems_version: 3.4.6
155
161
  signing_key:
156
162
  specification_version: 4
157
163
  summary: A fast ExecJS runtime based on nodejs, tuned for Isomorfeus.