Как автоматизировать Javascript и минимизацию CSS в Google App Engine? - PullRequest
14 голосов
/ 30 августа 2011

Я не смог найти подходящего решения для автоматизации минимизации CSS и Javascript в Google App Engine.

Ответы [ 6 ]

4 голосов
/ 22 октября 2013

Если ваши файлы JS / CSS должны использоваться внутри HTML-страницы, то очень хороший вариант - App Engine автоматически оптимизировать ваш сайт (минимизация, связывание, встраивание и т. Д.) С помощью экспериментальной функции «Скорость страницы». Вы можете включить это, выполнив это:

  1. Перейдите на панель инструментов вашего проекта: https://appengine.google.com/settings?&app_id=s~your_project_id

  2. Нажмите «Настройки приложения» (внизу слева в разделе «Администрирование»).

  3. Прокрутите вниз до раздела «Производительность» и найдите «Служба PageSpeed:». Установите флажок «Включить службу PageSpeed» и нажмите «Сохранить».

Это добавит фильтры ответов, которые автоматически будут выполнять такие вещи, как объединение и минимизацию JS, превращение минимизированного пакета из ссылки на скрипт в встроенный скрипт (для уменьшения количества запросов к серверу) и более крутые и легкие улучшения производительности. Подробнее об этой функции читайте здесь: https://developers.google.com/speed/pagespeed/service/faq

4 голосов
/ 30 августа 2011

Напишите сценарий развертывания, который создает копию вашего приложения с минимальными JS и CSS, а затем вызывает для него appcfg. Вы не должны минимизировать его динамически, если вы не генерируете его динамически.

2 голосов
/ 12 октября 2013

Вы можете довольно эффективно автоматизировать процесс, загрузив содержимое вашего скрипта в строку, обработав его с помощью 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),...
2 голосов
/ 02 сентября 2011

В итоге я создал этот скрипт appengine (использует memcache и slimit). Я обнаружил, что Slimit - лучший сценарий минификации, но я подумываю использовать его вместо Google.

http://ronreiterdotcom.wordpress.com/2011/08/30/automatic-javascript-minification-using-slimit-on-google-app-engine/

1 голос
/ 30 августа 2011

Вы можете попробовать решение во время сборки или во время выполнения (используя плагин maven), предоставляемое инструментом под названием wro4j

Отказ от ответственности: это проект, над которым я работаю.

1 голос
/ 30 августа 2011

Ответ Ника - правильный способ сделать это, но вы можете сделать это на лету, когда запрашивается JS / CSS - затем установите для параметра cache-control значение public для кэширования результатов в восходящем направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...