Вы могли бы хотеть дать , обслуживают FiveRuns TuneUp попытку, поскольку это является действительно довольно впечатляющим. Правовая оговорка: я не связан с FiveRuns всегда, я только что испытал этот сервис.
TuneUp является бесплатным сервисом, посредством чего Вы загружаете плагин и когда Вы запускаете свое приложение, это вводит панель в верхней части экрана, который может быть расширен для отображения подробных метрик производительности.
Это дает Вам некоторые хорошие графики, включая тот, который показывает то, на какая пропорция времени потрачена в Модели, Представлении и Контроллере. Можно даже выполнить развертку права видеть отдельные SQL-запросы, которые выполняет ActiveRecord, если Вы должны, и это может показать Вам базовую схему базы данных другим щелчком.
Наконец, можно дополнительно загрузить профильные данные на сайт FiveRuns для анализа работы сообщества и совета.
Я думаю, что следующее должно делать то, что вы хотите:
function nrKeys(a) {
var i = 0;
for (key in a) {
i++;
}
return i;
}
function compareAssociativeArrays(a, b) {
if (a == b) {
return true;
}
if (nrKeys(a) != nrKeys(b)) {
return false;
}
for (key in a) {
if (a[key] != b[key]) {
return false;
}
}
return true;
}
Я действительно не знаю, есть ли лучший способ сделать это, чем метод грубой силы:
function differences(a, b){
var dif = {};
for(key in a){ //In a and not in b
if(!b[key]){
dif[key] = a[key];
}
}
for(key in a){ //in a and b but different values
if(a[key] && b[key] && a[key]!=b[key]){
//I don't know what you want in this case...
}
}
for(key in b){ //in b and not in a
if(!a[key]){
dif[key] = b[key];
}
}
return dif;
}
Кроме того, они являются объектами, а не массивами, и некоторые свойства не будут перечисляться через for..in (например, Array.length), поэтому примите это во внимание для вашего приложения.