頁面優化技術

瓶頸在數據庫。
解決辦法加緩存。
緩存:
1.用戶在發送請求時使用頁面的靜態化,把頁面緩存在客戶端
2.請求還沒有到達網站之前可以部署CDN節點,讓請求首先訪問CDN
3.可以使用Nginx緩存
4.接着在使用頁面級緩存在詳細點可以使用對象緩存

1.頁面緩存+URL緩存+對象緩存

  • 1.取緩存
  • 2.手動渲染模版
  • 3.結果輸出
    /**
     * 使用頁面緩存技術
     *
     * @param model
     * @param user
     * @return
     * @throws Exception
     **/
    @RequestMapping(value = "/to_list", produces = "text/html")
    @ResponseBody
    public String list(Model model, MiaoshaUser user, HttpServletResponse response, HttpServletRequest request) {
        //查詢商品列表
        List<GoodsVo> goodsList = goodsService.listGoodsVo();
        model.addAttribute("goodsList", goodsList);

        String html = redisService.get(GoodsKey.getGoodsList, "", String.class);
        //取緩存
        if (!StringUtils.isEmpty(html)) {
            return html;
        }

        //手動渲染
        WebContext webContext = new WebContext(request,response,request.getServletContext(),request.getLocale(),model.asMap());
        html = thymeleafViewResolver.getTemplateEngine().process("goods_list", webContext);
        if (!StringUtils.isEmpty(html)) {
           redisService.set(GoodsKey.getGoodsList,"",html);
        }
        System.out.println(html);
        return html;
    }

URL緩存技術 (不同的商品id 有不同緩存)

    /**
     * 使用URL緩存技術
     *
     * @param model
     * @param user
     * @return
     * @throws Exception
     **/
    @RequestMapping(value = "/to_detail/{goodsId}", produces = "text/html")
    @ResponseBody
    public String detail(Model model, MiaoshaUser user,
                         @PathVariable("goodsId") long goodsId,HttpServletResponse response, HttpServletRequest request) {
        model.addAttribute("user", user);

        String html = redisService.get(GoodsKey.getGoodsDetail, ""+goodsId, String.class);
        //取緩存
        if (!StringUtils.isEmpty(html)) {
            return html;
        }

        GoodsVo goods = goodsService.getGoodsVoByGoodsId(goodsId);
        model.addAttribute("goods", goods);

        long startAt = goods.getStartDate().getTime();
        long endAt = goods.getEndDate().getTime();
        long now = System.currentTimeMillis();

        int miaoshaStatus = 0;
        int remainSeconds = 0;
        if (now < startAt) {//秒殺還沒開始,倒計時
            miaoshaStatus = 0;
            remainSeconds = (int) ((startAt - now) / 1000);
        } else if (now > endAt) {//秒殺已經結束
            miaoshaStatus = 2;
            remainSeconds = -1;
        } else {//秒殺進行中
            miaoshaStatus = 1;
            remainSeconds = 0;
        }
        model.addAttribute("miaoshaStatus", miaoshaStatus);
        model.addAttribute("remainSeconds", remainSeconds);


        //手動渲染
        WebContext webContext = new WebContext(request,response,request.getServletContext(),request.getLocale(),model.asMap());
        html = thymeleafViewResolver.getTemplateEngine().process("goods_detail", webContext);
        if (!StringUtils.isEmpty(html)) {
            redisService.set(GoodsKey.getGoodsDetail,""+goodsId,html);
        }

        return html;
    }

2.頁面靜態化,前後端分離

3.靜態資源優化

  • JS/CSS壓縮,減少流量
  • 多個JS/CSS組合,減少鏈接數

使用技術 Nginx 或者 Tengine

  • CDN就近訪問

4.CDN優化

發佈了49 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章