簡體   English   中英

如何在Google App Engine上自動化Javascript和CSS縮小?

[英]How do I automate Javascript and CSS minification on Google App Engine?

我找不到適合自動化Google App Engine CSS和Javascript縮小的解決方案。

如果要在HTML頁面中使用您的JS / CSS文件,那么一個非常好的選擇是讓App Engine通過實驗性的“頁面速度”功能自動優化您的站點(縮小,捆綁,內聯等)。 你可以這樣做:

  1. 轉到項目的App Engine儀表板: https//appengine.google.com/settings?&app_id = s〜your_project_id

  2. 單擊“應用程序設置”(“管理”部分下方的左下角)。

  3. 向下滾動到“性能”部分,找到“PageSpeed Service:”。 選中“啟用PageSpeed服務”復選框,然后點擊“保存”。

這將添加響應過濾器,它們將自動執行諸如組合和縮小JS之類的操作,將縮小的包從腳本引用轉換為內聯腳本(減少服務器請求的數量)以及更酷和輕松的性能提升。 有關此功能的詳情,請訪問: https//developers.google.com/speed/pagespeed/service/faq

編寫一個部署腳本,使用縮小的JS和CSS制作應用程序的副本,然后在其上調用appcfg。 除非您動態生成它,否則不應動態縮小它。

通過將腳本內容加載到字符串中,使用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中的動態contnet處理程序返回:

 app = webapp2.WSGIApplication([
     ('/scripts/script.js', jsrender.scriptjs),...

我最終創建了這個appengine腳本(使用memcache和slimit)。 我發現slimit是最好的縮小腳本,但我正在考慮使用谷歌的那個。

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

Nick的答案是正確的方法,但是你可以在請求JS / CSS時動態執行 - 然后將cache-control設置為public以將結果緩存到上游。

您可以嘗試使用名為wro4j的工具提供的構建時或運行時解決方案(使用maven插件)

免責聲明:這是我正在研究的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM