• 怎样应对高并发 —— 动态站点静态化


    零. 前言
    为了应对高并发, 大多数站点在更新不频繁的页面都做了动态网页静态化处理。 典型的如: 淘宝的首页、 网易新闻的首页等。

    当然这些站点载入速度这么快。 不不过静态化。 还有 CDN、 缓存等各个方面的优化。 从阿里在 InfoQ

     双十一架构的分享中提到使用 CDN + nginx + JBoss + 缓存作为 Detail 页面的架构, 将页面信息进行静态化缓存。 以上。 能够看出静态化技术的重要性及普遍性。 本文将结合详细实例介绍动态站点静态化。

     

    一. 类及其依赖库 



    二. 代码实例
    測试核心类 MergeTemplate.java: 
    package com.wenniuwuren.velocity;
    
    import org.apache.velocity.Template;
    import org.apache.velocity.VelocityContext;
    import org.apache.velocity.app.VelocityEngine;
    import org.apache.velocity.runtime.RuntimeConstants;
    import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
    
    import java.io.StringWriter;
    import java.util.Date;
    
    /**
     * Created by zhuyb on 16/1/12.
     */
    public class MergeTemplate {
    
        public static void main(String[] args) {
            VelocityEngine ve = new VelocityEngine();
            ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
            ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
    
            ve.init();
    
            // 所使用的模板名称
            Template template = ve.getTemplate("template.vm");
            VelocityContext vc = new VelocityContext();
    
            // 数据
            vc.put("someone", "teacher Cang");
            vc.put("time", new Date().toString());
    
            StringWriter sw = new StringWriter();
    
            // 数据、 模板合并静态化
            template.merge(vc, sw);
    
            // IO 获取已经静态化的内容。 可进行缓存等操作
            String htmlResult = sw.toString();
    
            System.out.println(htmlResult);
        }
    }


    模板文件 template.vm :

    <html>
    <body>
    
    I meet $someone on $time.
    
    </body>
    </html>


    输出结果:

    <html>
    <body>
    
    I meet teacher Cang on Tue Jan 12 23:39:35 CST 2016.
    
    </body>
    </html>


    三. 总结
    借助 velocity 作为模板, 能够方便地使数据和前端代码分离。 应用场景除了上述的动态站点静态化, 常见的应用还有生成邮件模板(发 EDM 营销邮件)。 数据和页面渲染的分离, 使得代码复用性大大提升, 同一时候在应对高并发的场景下也提供了有力支持。 突破了 Web server和 Java 处理信息的 CPU 瓶颈。

     


  • 相关阅读:
    UVa 107 The Cat in the Hat
    UVa 591 Box of Bricks
    UVa 253 Cube painting
    UVa 10161 Ant on a Chessboard
    UVa 401 Palindromes
    UVa 465 Overflow
    我不知道
    消防局的设立
    某CF的D
    保安站岗
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7306681.html
Copyright © 2020-2023  润新知