我正在测试一个2d bin包装的算法,我选择PHP来模拟它,因为它现在是我的面包和黄油语言.
正如您在http://themworks.com/pack_v0.2/oopack.php?ol=1上看到的那样,它运行良好,但您需要等待大约10-20秒才能打包100个矩形.对于一些难以处理的集合,它将达到php的30s运行时限制.
我做了一些分析,它表明大部分时间我的脚本经过一个小的2d数组的不同部分,其中包含0和1.它要么检查某个单元格是否等于0/1,要么将其设置为0/1.它可以进行数百万次这样的操作,每次都需要几微秒.
我想我可以使用静态类型语言中的一系列布尔值,事情会更快.甚至可以创建一个1位值的数组.我正在考虑将整个事物转换为某种编译语言.PHP对它不好吗?
如果我确实需要将其转换为C++,那么自动转换器有多好?我的脚本只是用于基本数组和对象操作的循环.
编辑.这个函数被调用比任何其他函数更多.它读取一个非常简单的对象的一些属性,并通过一个小数组的一小部分来检查是否有任何元素不等于0.
function fits($bin, $w, $h, $x, $y) {
$w += $x;
$h += $y;
for ($i = $x; $i < $w; $i++) {
for ($j = $y; $j < $h; $j++) {
if ($bin[$i][$j] !== 0) {
return false;
}
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
更新:我尝试使用1d数组而不是2d作为建议的答案之一.由于我需要始终可以访问当前的bin宽度,因此我决定将所有内容包装在对象中.此外,现在在每个循环中都需要计算索引.现在脚本需要更多时间来运行.其他技术并没有带来太多的性能提升,而是使代码的可读性降低.我猜是时候嘻哈了.
更新:既然hiphop php只在linux上运行,而我没有,我决定用C++重写整个内容.刷新旧技能真好.另外,如果我找到了使用hiphop的方法,那么比较手写的C++代码和hiphop会产生的代码将会很有趣.
更新:我用c ++重写了这个东西,平均来说它的工作速度提高了20倍,并且使用的内存更少.让我看看我能否做得更快.
我是Django的新手,并且只在Django中使用sqlite3作为数据库引擎.现在我正在研究的一个应用程序变得非常大,无论是在模型的复杂性还是请求/秒.
Django支持的数据库引擎如何在性能方面进行比较?使用其中任何一个的任何陷阱?最后但并非最不重要的是,一旦你使用了一个引擎,转换到另一个引擎有多容易?谢谢!
根据John Resig的"学习高级JavaScript"(http://ejohn.org/apps/learn/#83),将对象的方法绑定到事件处理程序而不将原始对象作为上下文传递是不正确的,但我发现该示例存在缺陷.它声称被点击的属性被意外设置.这是一个反例.
var Button = {
click: function(){
this.clicked = true;
console.log( elem.clicked );
}
};
var elem = document.createElement("li");
elem.innerHTML = "Click me!";
elem.onclick = Button.click;
document.children[0].appendChild(elem);
console.log( !elem.clicked );
Run Code Online (Sandbox Code Playgroud)
必须有另一个不这样做的理由.它是什么?