Вы можете довольно эффективно автоматизировать процесс, загрузив содержимое вашего скрипта в строку, обработав его с помощью jsmin и, наконец, сохраните и обработайте результат. Не беспокойтесь о производительности, вы запускаете jsmin только при создании экземпляра приложения (наверняка не для каждого запроса).
Вы можете получить jsmin.py здесь .
Допустим, у меня есть эта функция, которая читает JS из файловой системы (несжатая, отладочная версия) и возвращает содержимое строки в модуле logger.py:
class ScriptManager():
def get_javascript(self):
path_to_js = os.path.join(os.path.dirname(__file__), 'js/script.js')
return file(path_to_js,'rb').read()
обработайте его с помощью jsmin. убедитесь, что вы используете правильные заголовки кэширования. взять этот jsrendered образец модуля в качестве примера
js_compressed =
jsmin.jsmin(scripts.logger.ScriptManager().get_javascript())
JS_CACHE_FOR_DAYS = 30
class scriptjs(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/javascript'
expires_date = datetime.datetime.utcnow() + datetime.timedelta(JS_CACHE_FOR_DAYS)
expires_str = expires_date.strftime('%d %b %Y %H:%M:%S GMT')
self.response.headers.add_header('Expires', expires_str)
self.response.headers['Cache-Control'] = 'public'
self.response.cache_control.no_cache = None
self.response.out.write(js_compressed)
теперь возвращаем это из динамического обработчика контнета в вашем main.py:
app = webapp2.WSGIApplication([
('/scripts/script.js', jsrender.scriptjs),...