gzip - вопросы по производительности - PullRequest
9 голосов
/ 21 декабря 2010

Во-первых, я использую Django. Django предоставляет промежуточное ПО gzip, которое прекрасно работает. Nginx также предоставляет модуль gzip. Будет ли больше смысла просто использовать модуль gzip от Nginx, потому что он реализован исключительно на C, или есть другие соображения по производительности, которые я пропускаю.

Во-вторых, Django не выполняет сжатие данных размером менее 200 байт. Не потому ли, что сжатие слишком дорого, чтобы иметь какое-либо значение при сжатии на выходе меньше этого?

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

1 Ответ

8 голосов
/ 21 декабря 2010

1) Я полагаю, что одного сжатия gzip достаточно, а nginx быстрее, хотя я еще не тестировал его. GzipMiddleware использует несколько встроенных модулей, которые также могут быть оптимизированы.

# From http://www.xhaus.com/alan/python/httpcomp.html#gzip
# Used with permission.
def compress_string(s):
    import cStringIO, gzip
    zbuf = cStringIO.StringIO()
    zfile = gzip.GzipFile(mode='wb', compresslevel=6, fileobj=zbuf)
    zfile.write(s)
    zfile.close()
    return zbuf.getvalue()

2) Небольшие файлы gzip просто не могут воспользоваться преимуществами сжатия (фактически небольшие файлы могут быть больше при обработке), поэтому можно сэкономить время, пропустив этот шаг.

3) Вы можете разработать набор тестов, включающий образцы данных. Затем определите, какие данные лучше всего подходят для вашего приложения.

...