从官方文档(来源):
process.memoryUsage()
返回一个对象,描述以字节为单位测量的Node进程的内存使用情况.
Run Code Online (Sandbox Code Playgroud)var util = require('util'); console.log(util.inspect(process.memoryUsage()));
这将产生:
Run Code Online (Sandbox Code Playgroud){ rss: 4935680, heapTotal: 1826816, heapUsed: 650472 }
heapTotal和heapUsed是指V8的内存使用情况.
究竟rss,heapTotal和heapUsed代表什么?
这似乎是一个微不足道的问题,但我一直在寻找,到目前为止我找不到一个明确的答案.
所以我已经阅读了HTML5 sandbox
属性,我明白如果我想阻止iframe重定向其父窗口,我可以使用该sandbox
属性遗漏allow-top-navigation
.但是,当这样做时,如果iframe最初依赖于顶级重定向,那么它所发生的是它重定向到空白页面,有效地破坏了导航.
我是否可以阻止iframe修改其父窗口,同时仍然允许"顶级"重定向,只允许这些在iframe的上下文中工作而不是顶级?
编辑:对于上下文,我正在与第三方合作,其页面包含一个带有目标的表单_top
.如果iframe是沙箱,则在提交表单时,用户会获得一个空白页面,如果没有沙箱,则会重定向整个页面.我正在寻找能够提交表单并在iframe中显示结果的内容.
我是单元测试和PHPUnit的新手,但我最近读了很多关于设计模式和隔离测试的内容,我决定重构一个我正在努力摆脱静态类,单例,硬编码依赖项的应用程序.在全球范围内定义的任何其他内容,希望使其"可测试",而不是在未来保持屁股的痛苦,因为它本来是一个长期项目.
到目前为止,我相信我理解单元测试背后的理论,但我想知道,在一个委托处理对象的嵌套依赖关系到一个工厂的场景中,应该如何进行单元测试所述工厂,或者它是多余的来测试它?什么是测试依赖关系"链"同步工作的最佳方法?
让我来说明问题.假设您有以下"遗留"代码:
class House {
protected $material;
protected $door;
protected $knob;
public function __construct() {
$this->door = new Door();
$this->knob = $this->door->getKnob();
$this->material = "stone";
echo "House material: ".$this->material . PHP_EOL . "<br/>";
echo "Door material: ".$this->door->getMaterial() . PHP_EOL . "<br/>";
echo "Knob material: ".$this->knob->getMaterial() . PHP_EOL . "<br/>";
}
}
class Door {
protected $material;
protected $knob;
public function __construct() {
$this->knob = new Knob();
$this->material = "wood";
}
public function getKnob() {
return $this->knob;
}
public function …
Run Code Online (Sandbox Code Playgroud) 我有一个RESTful API的自定义实现,用于返回json数据的PHP应用程序,为了传达操作的状态,即请求中是否有失败,我正在设置一个自定义的HTTP标头(非常tiny)json对象作为字符串.这很有效,因为我可以发送响应并轻松检索客户端,而不会弄乱发送的实际数据.
问题是,使用这种方法可能没有任何弊端吗?应用程序设置自定义http标头似乎并不常见,所以我想知道这是一种不好的做法还是不好的"品味".
特别谈论(服务器端)V8,并假设我不关心准确性,因为我可以检测并补偿它,我可以使用setTimeout在几秒钟内相互简单地设置数千个相对简单的超时而不会面临任何其他限制RAM除外?如果我使用的系统在任何给定时间可能有数千个预定超时,我是否应该注意到任何问题?
为了记录,我已经阅读了John's Resig关于Javascript Timers如何工作的优秀文章,所以不需要指出已经覆盖的任何内容:)我知道node.js是单线程的,如果定时器花费太长时间,它们可以阻止其他定时器等
PS:我正在严格理解我所描述的可行性,不需要指出"确实有更好的方法来做你想做的事!".
如果订阅的客户端和发布消息的服务器都保留了连接,那么即使在客户端和/或服务器受到巨大压力的情况下,Redis仍保证始终将发布的消息最终传递给订阅的客户端吗?或者我应该计划Redis可能会在事情变得"热"的时候偶尔丢弃消息?
想象一下,你有以下整数数组:
array(1, 2, 1, 0, 0, 1, 2, 4, 3, 2, [...] );
Run Code Online (Sandbox Code Playgroud)
整数最多可达一百万条; 它们不是硬编码而是预先生成并存储在JSON格式的文件中(大小约为2MB).这些整数的顺序很重要,我不能每次都随机生成它,因为它应该是一致的,并且在相同的索引处始终具有相同的值.
如果这个文件之后在PHP中被回读(例如使用file_get_contents
+ json_decode
),则需要700到900毫秒来恢复数组 - "好的"我想,"它可能是合理的,因为json_decode
必须解析大约200万个字符,让我们缓存它" .APC将其缓存在大约68MB的条目中,可能正常,zval很大.然而从APC取回这个阵列也需要一些好的600毫秒,这在我眼中仍然太多了.
编辑:APC确实序列化/反序列化以存储和检索具有一百万个项目数组的内容是一个漫长而繁重的过程.
所以问题:
如果我打算在PHP中加载一百万条数组,无论是数据存储还是方法,我都应该期待这种延迟吗?据我所知,APC存储zval本身,所以理论上从APC中检索它应该尽可能快(没有解析,没有转换,没有磁盘访问)
为什么APC对于看似简单的事情这么慢?
有没有有效的方法使用PHP在内存中完全加载一百万个条目数组?假设RAM使用不是问题.
如果我只根据索引访问这个数组的片段(例如将块从索引15加载到索引76)并且实际上从未将整个数组放在内存中(是的,我知道这是理智的做法,但是我想知道所有方面),整个阵列最有效的数据存储系统是什么?显然不是RDBM; 我在想redis,但我很乐意听到其他想法.
如果我从mysql数据库表中得到以下结果集:
+----+------+-------+
| ID | type | value |
+----+------+-------+
| 8 | A | 1435 |
| 9 | B | 7348 |
| 10 | A | 1347 |
| 11 | A | 3478 |
| 12 | A | 4589 |
| 13 | B | 6789 |
+----+------+-------+
Run Code Online (Sandbox Code Playgroud)
我想删除行ID 8并将字段'value'中的值向下推,这样每行都有前一个条目的值,但只影响字段'type'与行相同的那些行被删除(在这种情况下为'A').
也就是说,删除行id 8最终应该产生以下结果:
+----+------+-------+
| ID | type | value |
+----+------+-------+
| - | - | - | *
| 9 | B | 7348 …
Run Code Online (Sandbox Code Playgroud) 我有以下css规则:
-webkit-transform: scale(0.5); /* Saf3.1+, Chrome */
-moz-transform: scale(0.5); /* FF3.5+ */
-ms-transform: scale(0.5); /* IE9 */
-o-transform: scale(0.5); /* Opera 10.5+ */
transform: scale(0.5);
Run Code Online (Sandbox Code Playgroud)
我打算将其应用于div,以便将其缩放,包括其所有内容,图像等,其大小保持50%,同时保持相同的中心.你可能知道我列出的规则正是如此,除了IE7-8.
根据该网站,等效的MS专有规则将是:
/* IE8+ - must be on one line, unfortunately */
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.5, M12=0, M21=0, M22=0.5, SizingMethod='auto expand')";
/* IE6 and 7 */
filter: progid:DXImageTransform.Microsoft.Matrix(
M11=0.5,
M12=0,
M21=0,
M22=0.5,
SizingMethod='auto expand');
Run Code Online (Sandbox Code Playgroud)
然而,这些似乎并没有实际调整div的内容,它似乎改变了它的位置,但这就是全部.
CSS3Please.com报告不同的矩阵值是等效的(0.5):
filter: progid:DXImageTransform.Microsoft.Matrix(/* IE6–IE9 */
M11=0.9999619230641713, M12=-0.008726535498373935, M21=0.008726535498373935, M22=0.9999619230641713,SizingMethod='auto expand');
Run Code Online (Sandbox Code Playgroud)
我已经测试了这些,但效果是一样的; div似乎改变了它的位置,但其内容的实际大小保持不变.
最后我尝试了transformie.js,它在你指定transform属性时自动通过sylvester.js计算矩阵,但最终结果仍然是:
M11=0.5, M12=0, …
Run Code Online (Sandbox Code Playgroud) 在设计 html 界面元素时,DOM 根据某些事件显示/隐藏是一个非常常见的场景。我的问题很简单,但每次遇到这个问题时,我总是想知道:将元素硬编码在 html 中并简单地切换显示属性(例如使用 .show/.hide)或动态添加/删除它们是否“更好”根据需要通过JS?两者的实现都很简单,但我忍不住想知道它们如何比较,以及使用其中一种相对于另一种是否有任何优点/缺点。
在某些情况下,例如在多个地方逐字使用同一个元素时,动态创建 DOM 似乎是有意义的,但另一方面,理论上对它们进行硬编码更易于维护,因为您可以四处移动 DOM并根据需要更改它们,只要 jQuery 的选择器仍然相同,它们就会按预期工作。一般来说,从设计师的角度来看,硬编码似乎是可行的方法,但我期待着一些想法,也许我在这里可能会忽略的事情。
编辑:“硬编码”是指根本不通过 JS 插入的元素;也就是说,元素的位置已经在原始 html 标记的父文档中指定,而不是由 JS 指定。
php ×4
css ×2
html ×2
javascript ×2
node.js ×2
v8 ×2
apc ×1
http ×1
http-headers ×1
iframe ×1
jquery ×1
large-data ×1
mysql ×1
phpunit ×1
redis ×1
unit-testing ×1