zoukankan      html  css  js  c++  java
  • 高并发解决思路之一 页面静态化

    背景:在电商中,如果搞活动,会发信息通知用户,这样短时间内会有大量用户访问某个页面,导致服务器的压力剧增
    此时的逻辑是:
    1.前端访问后台某个url,后台返回信息,前端拿到后台的数据渲染
    如果后台的数据要查询很多个微服务才能得到,这样大批量用户同时访问的话,压力巨大
    
    使用静态页的思路如下:
    
    
    1.模仿浏览器去访问某个活动页a.html-->得到html信息
    2.上传到阿里云的oss服务器,如上传到web/act/static/目录上,前端访问时,访问的是
    web/act/static/这个目录下的静态文件,所以性能比较高
    
    3.当后台内容变更时,就重新去生成一份a.html上传到web/act/static/覆盖原来的文件
    
    这种方式需要跟前端配置联调,调节对应的css和js进行支持
    引入依赖:
           <dependency>
                <groupId>net.sourceforge.htmlunit</groupId>
                <artifactId>htmlunit</artifactId>
            </dependency>
    
            OutputStream outputStream=null;
            try {
                String url="https://www.taobao.com/";
                WebClient webClient = new WebClient(BrowserVersion.CHROME);
                webClient.getOptions().setJavaScriptEnabled(false);
                webClient.getOptions().setCssEnabled(false);
                webClient.setAjaxController(new NicelyResynchronizingAjaxController());
                webClient.getOptions().setTimeout(30000);
                webClient.getOptions().setThrowExceptionOnScriptError(false);
                webClient.addRequestHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3192.0 Safari/537.36");
                HtmlPage page = webClient.getPage(url);
                String htmlStr = page.asXml();
                //这里拿到了页面信息,上传到服务器指位置,例如可以上传到阿里云oss图片服务器,在上面创建一个文件夹web/static,前端直接访问该路径就行了
    
                //这里演示下载到我本地电脑
    
                outputStream = new FileOutputStream("F:\test.html");
                outputStream.write(htmlStr.getBytes());
    
    
            }catch (Exception ex){
    
            }finally {
                if(null!=outputStream){
                    try {
                        outputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
    
            }

    如期url得到html的方式有很多种,可以通过流直接读取,或者JSoup工具去读取

  • 相关阅读:
    shell编程
    redis不重启,切换RDB备份到AOF备份
    java中接口和抽象类的区别
    java中的泛型
    java中有关初始化的问题
    java中的多态
    java中的Iterator和ListIterator的区别
    Collection集合的三种初始化方法
    java正则表达式appendReplacement和appendTail方法
    java中main函数的String[] args
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/12553895.html
Copyright © 2011-2022 走看看