小编smg*_*smg的帖子

Javascript中的内存布局 - 面向数据与面向对象的设计

来自C/C++的背景,关于减少缓存未命中的对象的内存布局是特别在处理控制台时尤其重要的.面向数据的设计通常比面向对象的设计更受青睐,以帮助保持相关对象在内存中彼此靠近(特别是在性能关键区域).

最近,我一直在做一些Javascript开发,我想知道Javascript社区中普遍的共识是什么.

由于我在Javascript方面的经验有限,我经常惊讶于在分析时看到完全出乎意料的结果.从浏览器到浏览器,Javascript对象/结构的内部存储器布局和实现变化很大,我想知道是否值得尝试优化.

我在jsPerf上创建了一个简单的测试用例(http://jsperf.com/object-vs-data)来比较这两种方法的性能,虽然它显示了Chrome的性能提升,但是Safari没有明显的加速.

在Javascript中,我是否应该关注对象的内存布局?或者它更像是"以一种方式实施,然后根据需要进行优化"类型的东西?

第二种选择似乎是浪费(就开发时间而言),特别是如果有一些好的指导方针可以遵循.

谢谢〜

补充信息:这基本上是我如何在Javascript中实现这两种方法.上面的jsPerf测试用例就是这样实现的.

var objectOriented = [
    { foo: 1, bar: 2 },
    { foo: 3, bar: 4 }
];

var dataOriented = {
    foos: [1, 3],
    bars: [2, 4]
};

// Object-oriented access:
var a = objectOriented[0].bar;

// Data-oriented access:
var b = dataOriented.bars[0];
Run Code Online (Sandbox Code Playgroud)

javascript oop memory-layout data-oriented-design

15
推荐指数
2
解决办法
2373
查看次数

如何使用node.js和Request包禁用HTTP头中的"withcredentials"?

使用node.js和浏览器中的Request包(通过browserify),我使用CORS在单独的域上执行HTTP GET请求.

在服务器上,当我设置'Access-Control-Allow-Origin'为通配符时'*',我在客户端上收到以下错误:

的XMLHttpRequest无法加载....通配符"*"不能在使用"访问控制允许来源"标题时,凭证标记为真.因此不允许原点'...'访问.

HTTP请求标头如下所示:

Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,ja;q=0.6
Access-Control-Request-Headers:withcredentials
Access-Control-Request-Method:GET
Cache-Control:no-cache
Connection:keep-alive
Host:localhost:3000
Origin:http://localhost:9966
Pragma:no-cache
Referer:http://localhost:9966/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
Run Code Online (Sandbox Code Playgroud)

很明显问题出Access-Control-Request-Headers:withcredentials在标题中,对吗?

为了能够删除它,我需要将'XMLHttpRequest'对象的'withcredentials'属性设置为'false'.但是,我无法弄清楚node.js或Request包在哪里创建'XMLHttpRequest'对象,以及我如何访问它.

谢谢.

javascript http xmlhttprequest request node.js

12
推荐指数
1
解决办法
9478
查看次数

这是什么算法?分发有限资源的最佳方式

我最近在编程挑战中看到了这个问题,我想知道哪个着名的CS算法很像.我实施了原油解决方案.我知道必须有更好的方法来做到这一点,但我不确定要搜索的术语.这似乎是背包问题的一个变种......但是有足够的差异,我有点难过.

问题:

有3个城市(A,B,C)有人口(100,100,200).你可以建4所医院.建立医院,以便最大限度地减少访问每个医院的人数.

在这个例子中,答案是:A中的1,B中的1和C中的2.这意味着每个医院服务100人(最佳解决方案).

例如,如果您将医院分配为A中的1,B中的2和C中的1,则您将平均(100,50,200),这给您最差200(不是最佳解决方案).

谢谢.

附录:

  • 为了简化问题,医院的#将永远是>=城市的#.每个城市至少应该有一家医院.

algorithm computer-science

7
推荐指数
1
解决办法
682
查看次数

当目标分支被删除时,现有的拉取请求会发生什么?

想象一下您有 3 个分支的情况:master, my_feature, my_feature_fix

然后执行以下操作:

  • 打开一个 Pull-Request 以合并my_feature_fixmy_feature.
  • 同时,my_feature被合并到master分支被删除。

my_feature_fix因为my_feature不再存在的公开 PR 会发生什么?

git github

5
推荐指数
1
解决办法
4347
查看次数

将 jlong​​ 转换为 long 是否安全?

我正在使用 C++ 中的 JNI 为 Android 开发本机插件。我想打印一个jlong值,该值定义为 64 位值。将其直接转换为 long 是否安全,或者是否有任何我应该注意的特定于平台的问题?

jlong foo = 2;

// This results in the following warning:
// Format specifier '%ld' requires 'long' argument instead of 'jlong'.
printf("%ld", foo);

// This works without a warning.
printf("%ld", (long)foo);
Run Code Online (Sandbox Code Playgroud)

c++ java-native-interface android android-ndk

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