标签: v8

Javascript让对象相互依赖

这是一个丑陋的Javascript,很高兴找到一个解决方法.

Javascript没有类,这是一件好事.但它以一种相当丑陋的方式实现了对象之间的回退.基础构造应该有一个对象,当一个属性找不到时,它会回落到另一个对象.

因此,如果我们想要a回归,b我们会想做一些事情:

a = {sun:1};
b = {dock:2};
a.__fallback__ = b;
Run Code Online (Sandbox Code Playgroud)

然后

a.dock == 2;
Run Code Online (Sandbox Code Playgroud)

但是,Javascript代替了new运营商和prototypes.所以我们做得不那么优雅:

function A(sun) {
   this.sun = sun;
};
A.prototype.dock = 2;
a = new A(1);

a.dock == 2;
Run Code Online (Sandbox Code Playgroud)

但除了优雅之外,它的功能也严格不足,因为它意味着用A创建的任何内容都会获得相同的后备对象.

我想要做的是从这个人为限制中解放Javascript,并且能够将任何其他单个对象作为其后备对象提供给任何单个对象.这样我可以在有意义时保持当前行为,但在有意义时使用对象级继承.

我最初的方法是创建一个虚拟构造函数:

function setFallback(from_obj, to_obj) {
    from_obj.constructor = function () {};
    from_obj.constructor.prototype = to_obj;
}

a = {sun:1};
b = {dock:2};
setFallback(a, b);
Run Code Online (Sandbox Code Playgroud)

但不幸的是:

a.dock == undefined;
Run Code Online (Sandbox Code Playgroud)

任何想法为什么这不起作用,或任何解决方案的实施setFallback

(我在V8上运行,通过node.js,以防这是依赖于平台的) …

javascript inheritance v8

2
推荐指数
1
解决办法
494
查看次数

V8如何管理对象实例的内存?

http://code.google.com/apis/v8/design.html

上面的页面解释了v8团队用于实现快速属性访问的优化技术.

但它的对象实例怎么样?可以随时向对象添加新属性,因此应允许其大小增加.它是否只是使用默认大小分配内存,当它达到大小限制时创建一个新缓冲区并将旧实例复制到新缓冲区?或者还有另一个很酷的伎俩?

v8

2
推荐指数
1
解决办法
1313
查看次数

JavaScript/Google v8的持久性框架

是否有任何类型的JavaScript和/或Google v8引擎的持久性框架?

我想存储(序列化)整个对象图(包括例如函数)并稍后重新加载它.JSON是不够的,因为它不允许存储函数并且只允许树状结构(即没有两个对象引用同一个对象).

我需要能够做到这一点(即在我编写程序嵌入v8的时候不知道JavaScript代码),因为我希望程序的用户能够使用JavaScript自定义它,但我需要存储我的程序状态(包括自定义状态)并稍后重新加载.因此,我需要存储JavaScript引擎的状态.

编辑:

例:

假设我们有以下代码:

var obj = { a: 4, b: function (x) { return x + this.a; } }
// ...
if ( ... ) { obj.a = 5; }
// ...
if ( ... ) { var c = 1; obj.b = function (x) { return x + this.a + c; } }
// ...
// now I want to serialize obj
Run Code Online (Sandbox Code Playgroud)

那么它(没有关于程序逻辑的任何元信息)是否可以序列化obj并随后反序列化,以便obj.b (2)在反序列化之后提供与序列化之前相同的结果?

第二次编辑:注意关闭.

javascript persistence v8 object-persistence

2
推荐指数
1
解决办法
871
查看次数

使用therubyracer在Windows机器上安装ruby gem less-rails

我有一段时间试图在我的windows7机器上安装less-rails gem.

我已经设法使用这个二进制文件安装所需的therubyracer.gem:https: //github.com/stereobooster/therubyracer/downloads

我还下载了v8.dll并放入我的ruby/bin目录.到目前为止一切运行良好,捆绑安装正在运行,服务器启动没有任何问题.

但是,只要我使用较少的文件请求页面,我就会收到以下错误消息

未定义的方法`in_javascript?' for#"<"V8 :: Error:[object Object]>

我的css.file是空的

/*
*= require 'custom_less/custom'
*= require 'jquery-ui-1.8.24.custom'
*/
Run Code Online (Sandbox Code Playgroud)

custom.css.less看起来像这样

@import "twitter/bootstrap/reset";
@import "twitter/bootstrap/variables";
@import "custom_less/variables";                 // Your own variable overrides.
@import "twitter/bootstrap/mixins";
@import "custom_less/mixins";                    // Your own mixin.
@import "twitter/bootstrap/scaffolding";
@import "twitter/bootstrap/grid";
@import "twitter/bootstrap/layouts";
//import of further bootstrap components
//but nothing else
Run Code Online (Sandbox Code Playgroud)

我正在使用带有ruby 1.9.3的rails安装程序.

这样的问题描述不多.我发现的所有内容都通过更新至至少ruby 1.9.2来解决.但不幸的是,这对我来说不是解决方案.有人有想法吗?

谢谢

ruby v8 windows-7 less-rails therubyracer

2
推荐指数
1
解决办法
5269
查看次数

从v8 :: Script :: Compile()获取错误消息

我正在打电话Script::Compile(),结果返回一个空句柄。我已经找到了这种方法,最后发现

 i::Handle<i::SharedFunctionInfo> result = i::Compiler::Compile(str, ....
Run Code Online (Sandbox Code Playgroud)

返回空句柄。这意味着编译错误。

但是,有人知道在这种情况下是否有办法从编译器获取错误消息,以了解发生错误的位置?

c++ v8

2
推荐指数
1
解决办法
826
查看次数

如果某个函数没有优化,是否意味着声明它的所有函数都没有优化?

最近我遇到了这篇关于V8引擎优化JavaScript程序的优化杀手.但这篇文章对我来说并不完全清楚,所以我想问一下这个问题.

文章指出:

优化编译器编译的代码可以很容易地比通用编译器生成的代码快100倍......重要的是要注意导致优化救助的模式会影响整个包含函数.

这是否意味着,例如,如果一些大块代码,假设一个JavaScript库,它以IIFE(立即调用函数表达式)的形式包含一个包含try {} catch(e) {}在另一个函数声明中的语句,那么整个库未优化?

看起来是这样,因为我试图运行这个命令$ node --trace_opt --trace_deopt --allow-natives-syntax try_catch.js,try_catch.js如下:

//Function that contains the pattern to be inspected (using with statement)
function optimizeWhack() {
    foo();
    function foo() {
        try {} catch(e) {}
    }
    return 12
}

function printStatus(fn) {
    switch(%GetOptimizationStatus(fn)) {
        case 1: console.log("Function is optimized"); break;
        case 2: console.log("Function is not optimized"); break;
        case 3: console.log("Function is always optimized"); break;
        case 4: console.log("Function is never optimized"); break;
        case 6: console.log("Function …
Run Code Online (Sandbox Code Playgroud)

javascript optimization v8

2
推荐指数
1
解决办法
414
查看次数

将std :: string转换为v8 :: string

当我尝试以下列方式将std :: string传递给脚本时,如何将std :: string转换为v8 :: string

script1 = Script :: Compile(param1);

我收到转换错误.

v8

2
推荐指数
1
解决办法
2195
查看次数

Nodejs C/C++ 会使用多个核心吗?

我知道一个事实,即在的NodeJS单个内核上运行。但是,如果我构建一个实现了多线程的 NodeJS C/C++ 插件会发生什么?这个插件会消耗一个以上的核心(应该是什么时候)?

c++ multithreading v8 node.js node.js-addon

2
推荐指数
1
解决办法
189
查看次数

WebStorm V8性能分析:( Stacktrace cut)?

我试图在JetBrains WebStorm中分析一个Node.js应用程序,却发现有一个"Stacktrace cut"消息使得无法看到不同函数调用的有用权重.

谁能指出我解决这个问题的方法?

错误截图

profiling v8 node.js webstorm

2
推荐指数
1
解决办法
351
查看次数

为什么Array.sort行为在Chrome和Node.js中不同

问题

让我们创建一个基本列表并对其进行排序,以确保2该列表始​​终位于列表的第一位。很简单吧?

[1, 2, 3].sort((a, b) => {
  if (a === 2) return -1;
  return 0;    
});
Run Code Online (Sandbox Code Playgroud)

Chrome结果:

[2,1,3]

节点结果:X

[1,2,3]

为了在Node中获得此行为,您可以-奇怪的是-查看b参数,并使其返回1(如果是)2

[1, 2, 3].sort((a, b) => {
  if (b === 2) return 1;
  return 0;    
});
Run Code Online (Sandbox Code Playgroud)

通过这种实现,您将得到相反的结果。Chrome将为[1、2、3],Node为[2、1、3]。

问题

您对此行为是否有逻辑解释?我的排序功能在概念上有缺陷吗?如果是这样,您将如何编写这种排序行为?

javascript v8 node.js

2
推荐指数
1
解决办法
222
查看次数