虽然我总是缓存数据库调用并将常用数据放入内存以便更快地访问,但我发现最近简单的处理和输出数据会增加大量的页面加载时间因此,我一直致力于模板缓存组件,该组件将已解析的HTML保存到文件或内存中,以便更快地包含在页面上。
这一切都运行良好,将一些页面加载减少到未缓存的等效项的10% - 但是我发现自己想知道输出内容的最有效方法是什么。
目前我正在使用fileRead
拉入已解析的HTML并保存到一个变量,该变量在页面上输出。
这看起来非常快,但我注意到Tomcat服务使用的内存逐渐增加 - 可能是因为fileRead
操作正在将内容读入内存,很可能Tomcat并没有删除它数据完成后。
(附带问题:任何人都知道我可以查询JVM内存并查找CF创建的对象的详细信息/堆栈跟踪的方法吗?)
或者,我可以使用cfinclude
来简单地包含已解析的HTML文件。从我可以发现的所有信息来看,似乎速度大致相同 - 那么这种方法会更有效吗?
在内存使用崩溃Tomcat之前,我在服务器上遇到了问题,所以保持它是非常重要的。
是否有人做过类似的事情可以给我带来经验的好处?
答案 0 :(得分:1)
cfinclude只是将模板包含在正在编译的模板中,而fileread必须首先将其读入内存然后输出,因此技术上会占用更多内存。我不希望速度差异很大,但只需打开调试并检查执行时间就可以看出差异。
答案 1 :(得分:0)
最有效的方法是使用cachePut()
对其进行缓存,并从cacheGet()
提供。什么比从RAM获取更快?如果它是整个页面,请不要使用正确的Expire标头来获取它,或者对于Not Modified巧妙地返回304。
答案 2 :(得分:0)
事实证明,CFInclude实际上将(已经在这种情况下呈现的)内容编译成一个类,它本身就有开销。这些类没有卸载(根据CFTracker),因此,太多这些都可能导致permgen错误。 FileRead()似乎更高效,因为我们所做的只是将内容插入输出缓冲区。