Как делают меня memoize дорогие вычисления на объектах модели Django?

Используйте тип suckEffect на анимации. Также: spewEffect, genieEffect, unGenieEffect, скручивание, tubey, скручивание, cameraIris, cameraIrisHollowClose, cameraIrisHollowOpen, rippleEffect, charminUltra, zoomyIn, и zoomyOut. Не работает в средстве моделирования.

CATransition *animation = [CATransition animation];
animation.type = @"suckEffect";
animation.duration = 2.0f;
animation.timingFunction = UIViewAnimationCurveEaseInOut;
view.opacity = 1.0f;
[view.layer addAnimation:animation forKey:@"transitionViewAnimation"];

Примечание: Фрагмент кода вытянули от большей кодовой базы. Я надеюсь, что это работает:)

14
задан David Eyk 6 October 2009 в 15:11
поделиться

2 ответа

Возможно, вас заинтересует встроенный декоратор django django.utils.functional.memoize .

Django использует это для кэширования дорогостоящих операций, таких как разрешение URL.

24
ответ дан 1 December 2019 в 06:43
поделиться

Обычно я использую такой шаблон:

def get_expensive_operation(self):
    if not hasattr(self, '_expensive_operation'):
        self._expensive_operation = self.expensive_operation()
    return self._expensive_operation

Затем вы используете метод get_exurities_operation для доступа данные.

Однако в вашем конкретном случае Я думаю, что вы подходите к этому немного неправильно. Вам нужно выполнить десериализацию при первой загрузке модели из базы данных и сериализовать только при сохранении. Затем вы можете каждый раз просто обращаться к атрибутам как к стандартному словарю Python. Вы можете сделать это, определив собственный тип JSONField, создав подкласс models.TextField, который переопределяет to_python и get_db_prep_save .

Фактически кто-то уже сделал это: см. здесь .

18
ответ дан 1 December 2019 в 06:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: