-
-
Save bluetech/cdd3b3d6d9d8cfc7b1dfee3c6482679d to your computer and use it in GitHub Desktop.
DRF lazy() benchmark
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import cProfile | |
import django | |
from django.db import models | |
from django.conf import settings | |
from rest_framework import serializers | |
settings.configure(INSTALLED_APPS=['rest_framework']) | |
django.setup() | |
class SomeModel(models.Model): | |
class Meta: | |
app_label = 'some_app' | |
field1 = models.CharField(max_length=2) | |
field2 = models.CharField(max_length=2) | |
field3 = models.CharField(max_length=2) | |
field4 = models.CharField(max_length=2) | |
field5 = models.CharField(max_length=2) | |
class ModelSerializer(serializers.ModelSerializer): | |
class Meta: | |
model = SomeModel | |
fields = [ | |
'field1', | |
'field2', | |
'field3', | |
'field4', | |
'field5', | |
] | |
class RegularSerializer(serializers.Serializer): | |
field1 = serializers.CharField(max_length=2) | |
field2 = serializers.CharField(max_length=2) | |
field3 = serializers.CharField(max_length=2) | |
field4 = serializers.CharField(max_length=2) | |
field5 = serializers.CharField(max_length=2) | |
def custom_serializer(obj): | |
return { | |
'field1': obj.field1, | |
'field2': obj.field2, | |
'field3': obj.field3, | |
'field4': obj.field4, | |
'field5': obj.field5, | |
} | |
instance = SomeModel( | |
field1='1', | |
field2='2', | |
field3='3', | |
field4='4', | |
field5='5', | |
) | |
def run_model(): | |
ModelSerializer(instance).data | |
def run_regular(): | |
RegularSerializer(instance).data | |
def run_custom(): | |
custom_serializer(instance) | |
cProfile.run('''for i in range(5000): run_model()''', sort='tottime') | |
cProfile.run('''for i in range(5000): run_regular()''', sort='tottime') | |
cProfile.run('''for i in range(5000): run_custom()''', sort='tottime') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment