Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 08.12.2014, 01:09
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от krutoy
Любая функциональщина -- это дрочево под оптимизатор
похоже , что у нас тут типичное неприятие нового
Сообщение от bes
сколько у вас часов в сутках?
раньше было около тысячи , сейчас - такое чувство, что в сутках 6 часов, не больше

но раньше сутки были длиннее, да
Ответить с цитированием
  #42 (permalink)  
Старый 08.12.2014, 03:31
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от nerv_
мой полный ответ был здесь.
И заметь, что так называемый "твой ответ" появился уже после того, как я тебя ткнул лицом в это говно. А ты должен был не отвечать бесу, а в первом же посте указать на эти ограничения ТСу. Но ты этого не сделал по той причине, что пока я тебя не ткнул в твое говно, ты об этом и не думал и не знал. А вместо спасибо, ты начал борзеть, и именно по этой причине окончательно был слит в гавно.

Последний раз редактировалось krutoy, 08.12.2014 в 03:36.
Ответить с цитированием
  #43 (permalink)  
Старый 08.12.2014, 10:12
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

krutoy, припекло тебя

Сообщение от krutoy
А ты должен был
я никому ничего не должен

Я показал свою реализацию, которой мне хватает более чем. Да, у нее есть ограничения. Если тот, кто ее использует не способен их увидеть - это его проблемы)

Сообщение от krutoy
как я тебя ткнул лицом в это говно
Пожалуйста, не тяни меня в свое говно, в кот. ты плаваешь постоянно. Ты сделан из него, им пропитан, плохо воспитан и, вообще, говорить с тобой мне не о чем. Не сейчас, не в будущем.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #44 (permalink)  
Старый 08.12.2014, 10:26
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Не сейчас, не в будущем.
Ни.
Ответить с цитированием
  #45 (permalink)  
Старый 08.12.2014, 10:35
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

вот оно че, Михалыч
комментарии излишни)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #46 (permalink)  
Старый 08.12.2014, 19:51
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от krutoy
Слушай, честно, мне лень разбирать примеры "вечного двигателя". Понять бессмысленность данной затеи легко. Смотри. В JS объект получается по ссылке. Легко понять, что закэшировать его можно только одним способом -- сохранив ссылку на него в кэше. Естественно, если объект меняется, то из кэша ты получаешь неактуальные значения. Этого понимания достаточно, чтобы прекратить эти нелепые попытки
Но это не значит, что мы не можем кэшировать какие то частные случаи. Например, можно часть объектов сделать неизмняемыми. чтоб они работали как простые хэши, можно работать с примитивами, не вызывая их в объектном контексте, и т.п. Это сделать легко.
смотри: есть объект, есть его состояние, кешируем ссылку на объект и его состояние, если ни ссылка, ни состояние не изменилось, можно обращаться к кешу
в моём последнем примере как раз так и делается, с учётом того, что ссылку сохранить не проблема, а сохранение состояния можно реализовывать с различной степенью сложности
Ответить с цитированием
  #47 (permalink)  
Старый 08.12.2014, 20:33
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

bes,
Не взрывай мне мозг
function f(obj) {
    return obj.a + obj.b;
}
 
function isSame(args1, args2) {
    var len1 = args1.length;
    var len2 = args2.length;
    if ( len1 != len2 ) return false;
    for (var i = 0; i < len1; i++) {
        if ( args1[i] === args2[i] ) continue;
        return false;
    }
    return true;
}
 
function cacheFn(fn) {
    var cache = [];
    return function () {
        var len = cache.length;
        for (var i = 0; i < len; i++) {
            if ( isSame(cache[i].args, arguments) && JSON.stringify(arguments) == cache[i].strArg) {
                console.log("cache: " + cache[i].res + "\n\n");
                return cache[i].res;
            }
        }
        cache.push( {args: arguments, strArg: JSON.stringify(arguments), res: fn.apply(this, arguments)} );
        console.log("call: " + cache[len].res + "\n\n")
        return cache[len].res;
    }
}
 
var cacheF = cacheFn(f);
o={b: 2}
var o1 = Object.create(o)
o1.a = 1
cacheF(o1);
 
o.b=10
console.log("----");
cacheF(o1);
 
console.log("****");
 
cacheF(o1);
//  call: 3
//  
//  
//  ----
//  cache: 3
//  
//  
//  ****
//  cache: 3
Ответить с цитированием
  #48 (permalink)  
Старый 08.12.2014, 22:43
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от krutoy
bes,
Не взрывай мне мозг
лови fuel injection, possibly with slices of shit
ещё куча непокрытого, но твой случай покрывает
function type(el) {
	var type = typeof el;
	if ( type != "object" ) return type;
	if ( el == null ) return "null";
	if ( el.length || el.length >= 0 ) return "array";
	return "object";
}

function len(obj) {
	var n = 0;
	for (var key in obj) {
		n++;
	}
	return n;
}

function isEqual(obj1, obj2) {
	if ( type(obj1) != "object" && type(obj2) != "object" ) return obj1 == obj2;
	if ( len(obj1) != len(obj2) ) return false;
	for (var key in obj1) {
		if (obj1[key] === obj2[key]) {
			continue;
		}
		return false;
	}
	return true;
}

function cloneObject(obj) {
	var clone = {};
	for (var key in obj) {
		clone[key] = obj[key];
	}
	return clone;
}

function isSame(args1, args2) {
	var len1 = args1.length;
	var len2 = args2.length;
	if ( len1 != len2 ) return false;
	for (var i = 0; i < len1; i++) {
		if ( isEqual(args1[i], args2[i]) ) continue;
		return false;
	}
	return true;
}

function giblets(args) {
	var giblet = [];
	var length = args.length;
	for ( var i = 0; i < length; i++ ) {
		if ( type(args[i]) != "object" ) {
			giblet.push(args[i]);
		} else {
			giblet.push( cloneObject(args[i]) );
		}
	}
	return giblet;
}

function cacheFn(fn) {
	var cache = [];
	return function () {
		var len = cache.length;
		for (var i = 0; i < len; i++) {
			if ( isSame(cache[i].args, giblets(arguments)) ) {
				console.log("cache: " + cache[i].res + "\n\n");
				return cache[i].res;
			}
		}
		cache.push( {args: giblets(arguments), res: fn.apply(this, arguments)} );
		console.log("call: " + cache[len].res + "\n\n")
		return cache[len].res;
	}
}


function f(obj) {
	return obj.a + obj.b;
}

var cacheF = cacheFn(f);
o={b: 2}
var o1 = Object.create(o)
o1.a = 1
cacheF(o1);
cacheF(o1);
 
o.b=10
console.log("----");
cacheF(o1);
cacheF(o1);
Ответить с цитированием
  #49 (permalink)  
Старый 09.12.2014, 00:03
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

krutoy,
function isSame(args1, args2) {
    var len1 = args1.length;
    var len2 = args2.length;
    if ( len1 != len2 ) return false;
    for (var i = 0; i < len1; i++) {
        if ( args1[i] === args2[i] ) continue;
        return false;
    }
    return true;
}

и
function isSame(args1, args2) {
    return args1 === args2;
}

Это напомнило мне прошлую неделю. Задание было переписать самописный ACl в самописном движке.
Час я смотрел на этот код и не мог понять, что здесь было написано. Я хотел понять мысль того разработчика который это написал. Это был запрос на пол-страницы , пришлось и по гуглить так как некоторые операторы я встретил впервые, а также много рекурсивных функций. Копаться в этом дерьме не было особого интереса. Решение было интересное. Пару проведенных тестов подача одних параметров на вход привело к очевидности к замене 300 строк кода 3 строками. Тестировщик позже подтвердил правильность решения.

В общем к чему я. Приведенный в начале топика код напоминает напоминает шаблон Реестр (Registry)
Ответить с цитированием
  #50 (permalink)  
Старый 09.12.2014, 07:30
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Poznakomlus,
Да, но ваша ассоциация, кстати, не совсем к месту. Все таки "выяснить, указывают ли 2 ссылки на один и тот же объект(массив)" и "имеют ли 2 объекта (массива) идентичную структуру" это далеко не одно и то же.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сабытие Onchange serrrgggeee Javascript под браузер 1 25.09.2014 10:11
jQuery научите пользоваться. Станислав89 Общие вопросы Javascript 10 19.12.2013 23:01
вопрос про кнопку javascript Ruxx Общие вопросы Javascript 9 22.01.2013 21:01
Свойства посредством полиморфных функций tenshi Ваши сайты и скрипты 0 18.03.2010 17:12
Модуль для работы с геометрией окна JSprog Библиотеки/Тулкиты/Фреймворки 25 31.08.2009 12:54