solomaster
V2EX  ›  问与答

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

  •  
  •   solomaster · Feb 3, 2016 · 2906 views
    This topic created in 3752 days ago, the information mentioned may be changed or developed.
    一直理解的页面静态化是首次访问动态生成 html ,再次访问就直接读静态的 html 文件了。
    但是我看到 FreeMarker 的官方文档写的 freemarker 缓存的是模板文件 ftl ( http://freemarker.incubator.apache.org/docs/pgui_config_templateloading.html

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

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

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

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

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

    这个 A 是可以缓存的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4509 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 10:07 · PVG 18:07 · LAX 03:07 · JFK 06:07
    ♥ Do have faith in what you're doing.