Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Google App Engine上自动实现Javascript和CSS的缩小?_Javascript_Css_Google App Engine_Minify - Fatal编程技术网

如何在Google App Engine上自动实现Javascript和CSS的缩小?

如何在Google App Engine上自动实现Javascript和CSS的缩小?,javascript,css,google-app-engine,minify,Javascript,Css,Google App Engine,Minify,我找不到任何合适的解决方案来自动化Google App Engine CSS和Javascript缩小。编写一个部署脚本,用缩小的JS和CSS复制你的应用,然后调用appcfg。除非是动态生成,否则不应该动态缩小它。尼克的答案是正确的方法,但当请求JS/CSS时,您可以动态缩小它-然后将cache control设置为public以缓存上游结果 苗条的 JSmin.py- 缓存控制头抖动- 及博文- 您可以尝试由名为 免责声明:这是我正在处理的项目。我最终创建了这个appengine脚本(使

我找不到任何合适的解决方案来自动化Google App Engine CSS和Javascript缩小。

编写一个部署脚本,用缩小的JS和CSS复制你的应用,然后调用appcfg。除非是动态生成,否则不应该动态缩小它。

尼克的答案是正确的方法,但当请求JS/CSS时,您可以动态缩小它-然后将cache control设置为public以缓存上游结果

  • 苗条的
  • JSmin.py-
  • 缓存控制头抖动- 及博文-

您可以尝试由名为


免责声明:这是我正在处理的项目。

我最终创建了这个appengine脚本(使用memcache和slimit)。 我发现slimit是最好的缩小脚本,但我正在考虑改用谷歌的


通过将脚本内容加载到字符串中,使用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处理它。确保使用正确的缓存头。以这个JSF呈现的示例模块为例

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),...

如果要在HTML页面中使用JS/CSS文件,那么一个非常好的选择是让App Engine通过实验性的“页面速度”功能自动优化站点(缩小、捆绑、内联等)。您可以通过执行以下操作来启用此功能:

  • 转到项目的应用程序引擎仪表板:

  • 单击“应用程序设置”(左下角的“管理”部分)

  • 向下滚动至“性能”部分并找到“PageSpeed服务:”。选中“启用页面速度服务”复选框并点击“保存”


  • 这将添加响应过滤器,自动执行诸如合并和缩小JS、将缩小的捆绑包从脚本引用变为内联脚本(以减少服务器请求数量)以及更酷、更轻松的性能改进等操作。在此处阅读有关此功能的更多信息:

    动态缩小有什么不对?如果您使用的是缓存副本,我看不出这个方法有什么问题。@Ron您的代码没有改变,所以没有理由反复缩小。那些缓存未命中的用户将看到显著的额外延迟,而您的终端不会获得任何实际收益。这也浪费了资源。不幸的是,这个解决方案在2015年12月1日之后将不再有效,因为谷歌应用程序引擎的PageSpeed服务正在关闭。如:[…]中所述,Google App Engine的PageSpeed服务已被弃用,将于2015年12月1日关闭。Google App Engine上的PageSpeed集成将持续运行到2015年12月1日,此后PageSpeed优化将不再应用于您的应用程序。