golang实现页面静态化操作的示例代码

什么是页面静态化:

简单的说,我们如果访问一个链接 ,服务器对应的模块会处理这个请求,转到对应的go方法,最后生成我们想要看到的数据。这其中的缺点是显而易见的:因为每次请求服务器都会进行处理,如 果有太多的高并发请求,那么就会加重应用服务器的压力,弄不好就把服务器 搞down 掉了。那么如何去避免呢?如果我们把请求后的结果保存成一个 html 文件,然后每次用户都去访问 ,这样应用服务器的压力不就减少了?

那么静态页面从哪里来呢?总不能让我们每个页面都手动处理吧?这里就牵涉到我们要讲解的内容了,静态页面生成方案… 我们需要的是自动的生成静态页面,当用户访问 ,会自动生成html文件 ,然后显示给用户。

为了路由方便我用的gin框架但是不管用在什么框架上面都是一样的

项目目录:

project

-tem

--index.html

-main.go

main.go文件代码:

package main

import (
  "fmt"
  "net/http"
  "os"
  "path/filepath"
  "text/template"

  "github.com/gin-gonic/gin"
)

type Product struct {
  Id  int64 `json:"id"` //字段一定要大写不然各种问题
  Name string `json:"name"`
}

//模拟从数据库查询过来的消息
var allproduct []*Product = []*Product{
  {1, "苹果手机"},
  {2, "苹果电脑"},
  {3, "苹果耳机"},
}
var (
  //生成的Html保存目录
  htmlOutPath = "./tem"
  //静态文件模版目录
  templatePath = "./tem"
)

func main() {
  r := gin.Default()
  r.LoadHTMLGlob("tem/*")
  r.GET("/index", func(c *gin.Context) {
    GetGenerateHtml()
    c.HTML(http.StatusOK, "index.html", gin.H{"allproduct": allproduct})
  })
  r.GET("/index2", func(c *gin.Context) {
    c.HTML(http.StatusOK, "htmlindex.html", gin.H{})
  })
  r.Run()
}

//生成静态文件的方法
func GetGenerateHtml() {
  //1.获取模版
  contenstTmp, err := template.ParseFiles(filepath.Join(templatePath, "index.html"))
  if err != nil {
    fmt.Println("获取模版文件失败")
  }
  //2.获取html生成路径
  fileName := filepath.Join(htmlOutPath, "htmlindex.html")
  //4.生成静态文件
  generateStaticHtml(contenstTmp, fileName, gin.H{"allproduct": allproduct})
}

//生成静态文件
func generateStaticHtml(template *template.Template, fileName string, product map[string]interface{}) {
  //1.判断静态文件是否存在
  if exist(fileName) {
    err := os.Remove(fileName)
    if err != nil {
      fmt.Println("移除文件失败")
    }
  }
  //2.生成静态文件
  file, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY, os.ModePerm)
  if err != nil {
    fmt.Println("打开文件失败")
  }
  defer file.Close()
  template.Execute(file, &product)
}

//判断文件是否存在
func exist(fileName string) bool {
  _, err := os.Stat(fileName)
  return err == nil || os.IsExist(err)
}

tem/index.html文件代码:

{{define "index.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>商品列表页</title>
</head>
<tbody>

<div><a href="#" rel="external nofollow" >商品列表页</a></div>
<table border="1">
  <thead>
  <tr>
    <th>ID</th>
    <th>商品名称</th>
  </tr>
  </thead>
  <tbody>
  {{range .allproduct}}
  <tr>
    <td>{{.Id}}</td>
    <td>{{.Name}}</td>
  </tr>
  {{end}}
  </tbody>
</table>
</html>
{{end}}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Smarty实现页面静态化(生成HTML)的方法

    本文实例讲述了Smarty实现页面静态化(生成HTML)的方法.分享给大家供大家参考,具体如下: 为了减少数据库读取次数,某些内容不经常被更改的页面,比如文章详细页面需要做成HTML静态页面. 在使用Smarty的情况下,也可以实现页面静态化.下面先简单说一下使用Smarty时通常动态读取的做法. 一般分这几步: 1.通过URL传递一个参数(ID): 2.然后根据此ID查询数据库: 3.取得数据后根据需要修改显示内容: 4.assign需要显示的数据: 5.display模板文件. Smarty

  • 通用大型网站页面静态化解决方案

    多个文件服务器读写,这里可采用SMB协议 页面静态化,可采用freemarker开源框架 如果考虑到大量的读写请求,则将请求分布式或采用调度的办法来解决 第一点我们首先应该考虑文件服务器与静态页面的映射关系,即什么文件应该读写到哪台服务器,这个关系最简单的办法是随机映射,然后将映射关系保存到数据库中即可,SMB常用的操作代码如下: 复制代码 代码如下: public static boolean exists(String filepath,String username,String pwd)

  • Django中通过定时任务触发页面静态化的处理方式

    Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架,由Python写成. Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 . Django采用了MVC的软件设计模式,即模型M,视图V和控制器C. 本章节给大家介绍Django中通过定时任务触发页面静态化的处理方式,具体内容如下所示: 安装 pip install dja

  • 详解php实现页面静态化原理

    1,file_put_contents()函数 2,使用PHP内置缓存机制实现页面静态化:output_buffering php中output_buffering内置函数,简称ob函数,主要会用到的下面几个: ob_start #打开输出控制缓冲 ob_get_contents #获取输出缓冲区内容 ob_clean #清空输出缓冲区 ob_get_clean #获取当前缓冲区内容,然后清空当前输出缓冲区 <?php // 开启输出缓冲控制 ob_start(); echo 'hello wo

  • PHP实现HTML页面静态化的方法

    随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要在此时对我们的网站进行代码优化和服务器配置的优化. 一般情况下会从以下方面来做优化 动态页面静态化 优化数据库 使用负载均衡 使用缓存 使用CDN加速 现在很多网站在建设的时候都要进行静态化的处理,为什么网站要进行静态化处理呢?我们都知道纯静态网站是所有的网页都是独立的一个html页面,当我们访问的时候不需要经过数据的处理直接就能读取到文件,访问速度就可想而知了,而其对

  • ThinkPHP 3.2.3实现页面静态化功能的方法详解

    前言 大家都知道PHP 的页面静态化有多种实现方式,比如使用输出缓冲(output buffering),该种方式是把数据缓存在 PHP 的缓冲区(内存)中,下一次取数据时直接从缓冲区中读取数据,从而避免了脚本的编译和访问数据库等过程:另一种方式是直接生成静态的 HTML 文件,使用文件读写函数来实现,一些内容不经常改动的页面可以使用静态页面,访客访问到的页面就是真实的 HTML 页面,一些常见的 CMS 会使用该种方法. 以第二种方法为例,参考 DedeCMS 5.7 的静态化功能,在 Thi

  • 分享常见的几种页面静态化的方法

    什么是PHP静态化 PHP静态化的简单理解就是使网站生成页面以静态HTML的形式展现在访客面前,PHP静态化分纯静态化和伪静态化,两者的区别在于PHP生成静态页面的处理机制不同. 为什么要让网页静态化 一.加快页面打开浏览速度,静态页面无需连接数据库打开速度较动态页面有明显提高: 二.有利于搜索引擎优化SEO,Baidu.Google都会优先收录静态页面,不仅被收录的快还收录的全: 三.减轻服务器负担,浏览网页无需调用系统数据库: 四.网站更安全,HTML页面不会受php相关漏洞的影响: 观看一

  • ASP页面静态化批量生成代码分享(多种方法)

    1.ASP两种简单的生成静态首页的方法 为什么要生成静态首页? 1.如果你首页读取的数据库次数比较多,速度很慢,而且占用很多服务器资源.使用静态页面访问速度当然快多了 2.搜索引擎容易搜索到 3.如果程序出问题,也能保证首页能访问. 4.其他的太多,自己想:) 应用方式: 如果你的首页是index.asp,你可以生成index.htm (默认访问顺序必须是index.htm,index.asp).这样访问者第一次访问到你的网站的时候打开的是index.htm .你可以把网站首页的链接做成inde

  • java Freemarker页面静态化实例详解

    Freemarker FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与 Web 容器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP.它不仅可以用作表现层的实现技术,而且还可以用于生成 XML,JSP 或 Java 等. 目前企业中:主要用 Freemarker 做静态页面或是页面展示 总结:freemarker 模版引擎,可以使用 Freemarker 模版生成 html 页面. Freemarker 语法 /*

  • PHP实现页面静态化的超简单方法

    为什么要页面静态化? 1.动态文件执行过程:语法分析-编译-运行 2.静态文件,不需要编译,减少了服务器脚本运行的时间,降低了服务器的响应时间,直接运行,响应速度快:如果页面中一些内容不经常改动,动态页面静态化是非常有效的加速方法.(纯静态,伪静态还是需要PHP解释器的) 3.生成静态URL利于SEO,利于蜘蛛抓取和收录,有利于提升排名 优化页面响应时间方法 1.动态页面静态化 2.优化数据库 3.负载均衡 4.使用缓存等等 //动态页面静态化一般用于不经常改动的地方,频繁改动的地方一般不适用静

  • 利用php的ob缓存机制实现页面静态化方法

    首先介绍一下php中ob缓存常用到的几个常用函数 ob_start():开启缓存机制 ob_get_contents():获取ob缓存中的内容 ob_clean()清除ob缓存中的内容,但不关闭缓存 ob_end_clean() 清除ob缓存中的内容,并关闭缓存 ob_flush 清空缓存,输出内容,但不关闭缓存 ob_end_flush 清空缓存,输出内容,并关闭缓存 flush强制刷新输出缓存中的内容 按照http协议的规定,回应内容不能在回应头之前输出,所以,如果在header()函数前面

随机推荐