我们有一个Javascript,每天为数百万个浏览器提供服务。 为了处理负载,我们决定使用Google App Engine。
这个Javascript的一个特别之处在于每个公司使用我们的服务(非常)略有不同。
到目前为止,我们通过main.py提供服务来处理这个问题,这基本上是: - 阅读JS静态文件并打印出来 - 打印自定义代码
我们在每次加载时都这样做,而且成本开始真正增加。
除了每个客户拥有一个静态版本的文件外,还有其他方法可以考虑减少我们的账单吗?使用memcache而不是读取文件会以任何方式降低价格吗?
非常感谢。
答案 0 :(得分:3)
我假设你在实例时间付了很多钱。从GAE文件系统读取相当慢。因此,最简单的优化方法只能在实例启动时从静态文件中读取一次,将js文件保存在内存中(即全局变量),然后打印出来。
其次,确保客户缓存您的js,这样当他们重新加载您的页面时,您不必再次向他们提供js。
下一步是将js文件作为静态文件提供,如果可能的话。如果js文件很大并且你正在消耗CPU周期只是打印它,这将节省一些钱。在这种情况下,让生成HTML的处理程序将适当的URL插入到相应的js文件中,而不是每次都重新生成整个js。您可以节省资金,因为您不会为作为静态文件的文件收取实例时间,而且它们可以缓存在边缘缓存(GAE的CDN)中,并且您不会为它们收取任何费用。
答案 1 :(得分:2)
以下是一些在不使用cdn的情况下进行更优化的方法。
是的,添加内存缓存层以缓存所有整个输出,并添加一个使用实例内存的额外实例缓存。这可以通过添加模块全局字典并在其中添加键/值缓存来完成。但您也可以使用LRUCaching库,这样就不会使实例过载。
最后最便宜的是使用cdn并将原点指向您的应用引擎应用,如果您的输出不需要太频繁修改,您可以短时间或长时间缓存这些结果。
这是一篇关于Ben Kamens实例缓存的完整博客文章: http://bjk5.com/post/2320616424/layer-caching-in-app-engine-with-memcache-and-cachepy
答案 2 :(得分:0)
如果你通过提供静态文件来使用Javascript(我假设你现在所做的那样)。