V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
solomaster
V2EX  ›  问与答

对 FreeMarker 的几个疑问(静态化,缓存等),求理我~

  •  
  •   solomaster · 2016-02-03 02:12:20 +08:00 · 2449 次点击
    这是一个创建于 3019 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一直理解的页面静态化是首次访问动态生成 html ,再次访问就直接读静态的 html 文件了。
    但是我看到 FreeMarker 的官方文档写的 freemarker 缓存的是模板文件 ftl ( http://freemarker.incubator.apache.org/docs/pgui_config_templateloading.html

    那么也就是说 freemarker 并没有缓存 合并数据后的 html 文件吗? 不知道我理解对不对。
    如果是这样的话,那每次访问 即便后端传来的数据是相同的,那么 freemarker 也要在内存里面再把数据和模板文件解析合并一次了?那这样岂不是增加 cpu 开销,还不如直接生成 HTML 文件到本地,直接读取文件的地址了。

    另外就是上次我问了个类似的问题,新闻网站那么多新闻是如何处理静态化的呢?全部生成 html 在硬盘上,还是部分在内存里?还是用上面我提到的模板缓存?

    求各位好汉指教……
    7 条回复    2016-02-03 17:23:27 +08:00
    kfll
        1
    kfll  
       2016-02-03 09:28:14 +08:00 via iPhone
    然后你会发现每次模板解析的结果都是一样的,于是你把模板解析结果缓存起来了。

    这样就可以了
    lxjsmdc
        2
    lxjsmdc  
       2016-02-03 09:33:21 +08:00 via iPhone
    看你的业务需求来选择
    或者按照 sql 语录句弄成 md5 的文件名缓存查询结果起来备用
    也有一种文件后缀是 shtml 可以了解一下
    icegreen
        3
    icegreen  
       2016-02-03 11:29:17 +08:00
    如果你的 html 页面不会经常变动, 可以在 nginx 层对 html 做缓存啊;
    solomaster
        4
    solomaster  
    OP
       2016-02-03 16:47:22 +08:00
    @kfll 是指的把生成的最终 HTML 代码都缓存在内存中了?不知道为什么模板引擎没有这个功能,应该是信手拈来的……
    solomaster
        5
    solomaster  
    OP
       2016-02-03 16:48:15 +08:00
    @lxjsmdc 谢谢,原来可以这样弄,学到了。 shtml 貌似现在用的很少了。
    solomaster
        6
    solomaster  
    OP
       2016-02-03 16:49:39 +08:00
    @icegreen 谢谢。前端缓存倒是了解。
    kfll
        7
    kfll  
       2016-02-03 17:23:27 +08:00
    @solomaster 不是,虽然不了解 freemarker 但是我猜测大概是这么工作的:

    编译模板字符串得到 A (可以是个 lambda ),然后 A 处理模板数据再吐出 html

    这个 A 是可以缓存的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   982 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:52 · PVG 04:52 · LAX 13:52 · JFK 16:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.