由于用户纷纷反应山坡网的打开速度比较慢,所以两天前我们决定把服务器从linode迁移到阿里云。

整个迁移过程非常平滑,基本上一个小时就完成了。而且阿里云的配套设施提供的也很不错,运行状态监控什么的都有。在此向大家推荐阿里云!

话说由于我们资金有限,就选择了ECS服务器中最低档的一款,512MB内存,2MB带宽。而山坡网上会有很多书籍封面图片,这导致了页面打开的速度并没有想象中提高的多,用户反应速度虽有提升,但不明显。

此时我想到了七牛云存储,虽说知道它已经几个月了,但始终没有正式开始用,总觉得我们挺穷的,云存储这类高端大气上档次的东西一时半会儿估计用不上。但还是抱着学习一下的心思打开它看了看。这一看我就乐疯了。

这……不敢相信啊!二话不说,立马决定把所有书籍封面图片都迁移到云端!

接着打开七牛的API文档看了一下,嗯,简单明了。10分钟后就照着动手了。

七牛的Go SDK提供了两种上传策略,上传内存数据或者上传文件。本来最佳的方式应该是直接上传内存数据,但考虑到服务器内存比较小,所以我选择了性能上次之的文件上传方式。

思路定下来之后就简单了,在文件下载完成之后,上传到云端,返回key值作为书籍封面的url保存到数据库。上传的函数如下:

//将本地文件上传到七牛云存储,返回key。
func UploadToQiniu(filepath string) (string, error) {
  bucket := "xxxxxxx"

  //获取uptoken
  putPolicy := rs.PutPolicy{Scope: bucket}
  uptoken := putPolicy.Token(nil)

  //上传
  var ret qnio.PutRet
  err := qnio.PutFileWithoutKey(nil, &ret, uptoken, filepath, nil)

  return ret.Key, err
}

接着就可以用“http://xxxxxx.qiniu.com/<key>”的方式访问图片资源了。

有经验的人此时应该想到一个问题,防盗链。对啊,就算每个月有100万次免费的GET请求,可以顶不住盗链哪!

七牛早就想到了,很简单,把存储空间设置成为私有的,然后使用如下函数生成访问链接。

//处理成访问七牛云存储私有空间的url
domain := "xxxx.qiniudn.com"
baseUrl := rs.MakeBaseUrl(domain, urlStr)
policy := rs.GetPolicy{}

return policy.MakeRequest(baseUrl, nil)

这样就会在访问的url后面加上一个有时间限制的token。防盗链完成!

再接下来就处理一下历史数据,写个小程序把所有现有的书籍封面都上传到云端,同时更新数据库。

半小时之内,山坡网就搭上了云存储的快车,我和我的小伙伴们都惊呆了!

我这只是用了七牛提供的众多功能中最简单的,其实照这个思路,可以把站点上所有静态的资源都放到云端,仅让我们的服务器处理必要的动态内容。这样成本会大幅降低。

在此,我向所有网站的开发和运营者们推荐七牛云存储!靠谱!

Go语言实战 - 网站性能优化第一弹“七牛云存储”的更多相关文章

  1. OneinStack定时同步备份数据库/网站至七牛云存储方法

    无论我们用WEB面板,还是用一键脚本安装环境建站,只要一旦我们开始用VPS.服务器,最为关键的就是服务器中的数据.因为大部分VPS.服务器商家都是无管理型主机,任何的安装和维护都需要我们自行管理.即便 ...

  2. 网站性能优化实战——从12.67s到1.06s的故事

    文章摘自https://juejin.im/post/5b0b7d74518825158e173a0c 作为互联网项目,最重要的便是用户体验.在举国“互联网+”的热潮中,用户至上也已经被大多数企业所接 ...

  3. 第一章-Flink介绍-《Fink原理、实战与性能优化》读书笔记

    Flink介绍-<Fink原理.实战与性能优化>读书笔记 1.1 Apache Flink是什么? 在当代数据量激增的时代,各种业务场景都有大量的业务数据产生,对于这些不断产生的数据应该如 ...

  4. input屏蔽历史记录 ;function($,undefined) 前面的分号是什么用处 JSON 和 JSONP 两兄弟 document.body.scrollTop与document.documentElement.scrollTop兼容 URL中的# 网站性能优化 前端必知的ajax 简单理解同步与异步 那些年,我们被耍过的bug——has

    input屏蔽历史记录   设置input的扩展属性autocomplete 为off即可 ;function($,undefined) 前面的分号是什么用处   ;(function($){$.ex ...

  5. 网站性能优化(Yahoo 35条)

    Yahoo 网站性能优化 35条 一.内容部分 尽量减少 HTTP请求 减少 DNS查找 避免跳转 缓存 Ajxa 推迟加载 提前加载 减少 DOM元素数量 用域名划分页面内容 使 frame数量最少 ...

  6. Yahoo团队经验:网站性能优化的34条黄金法则

    Yahoo团队总结的关于网站性能优化的经验,非常有参考价值.英文原文:http://developer.yahoo.com/performance/rules.html 1.尽量减少HTTP请求次数 ...

  7. Yahoo网站性能优化的34条规则

    摘自:http://blog.chinaunix.net/uid/20714478/cid-74195-list-1.html Yahoo网站性能优化的34条规则 1.尽量减少HTTP请求次数 终端用 ...

  8. Yahoo! 35条网站性能优化建议

    Yahoo! 35条网站性能优化建议 Yahoo!的 Exceptional Performance团队为改善 Web性能带来最佳实践.他们为此进行了一系列的实验.开发了各种工具.写了大量的文章和博客 ...

  9. Yslow网站性能优化工具

    Yslow是一款网站性能优化的插件:

随机推荐

  1. 配置android sdk 环境

    1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/

  2. 关于Unity3D自定义编辑器的学习

    被人物编辑器折腾了一个月,最终还是交了点成品上去(还要很多优化都还么做).  刚接手这项工作时觉得没概念,没想法,不知道.后来就去看<<Unity5.X从入门到精通>>中有关于 ...

  3. ASP.NET Aries 入门开发教程1:框架下载与运行

    背景: 鉴于框架的使用者越来越多,文档太少,不少用户反映框架的入门门槛太高. 好吧,再辛苦下,抽时间写教程吧! 步骤1:下载框架源码 开源地址:https://github.com/cyq1162/A ...

  4. MVVM模式和在WPF中的实现(二)数据绑定

    MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  5. 使用CSS3实现一个3D相册

    CSS3系列我已经写过两篇文章,感兴趣的同学可以先看一下CSS3初体验之奇技淫巧,CSS3 3D立方体效果-transform也不过如此 第一篇主要列出了一些常用或经典的CSS3技巧和方法:第二篇是一 ...

  6. 利用on和off方法编写高效的js代码

    先说下将这个话题的起因:最近发现公司的功能代码,很多在dom对象删除以后,其声明的绑定在window上的resize事件还一直存在,导致相同的功能代码执行了几次.对于我这种轻微代码洁癖的人来说,简直是 ...

  7. Carousel 旋转画廊特效的疑难杂症

    疑难杂症 该画廊特效的特点就是前后元素有层级关系. 我想很多人应该看过或者用过这个插件carousel.js,网上也有相关的教程.不知道这个插件的原型是哪个,有知道的朋友可以告诉我. 该插件相对完美, ...

  8. mybatis_个人总结

    在使用mybatis框架开发数据访问层的过程中,我在这段时间遇到很多细节问题困住我,在这里我来分享一下我遇到的坑,希望能帮到大家. 一.mybatis动态代理方式开发的规范: 1.注意在mybatis ...

  9. node中子进程同步输出

    管道 通过"child_process"模块fork出来的子进程都是返回一个ChildProcess对象实例,ChildProcess类比较特殊无法手动创建该对象实例,只能使用fo ...

  10. [转载]Cookie/Session的机制与安全

    Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和哪个客户在打交道.本文来详细讨论Cookie和Session的实现机制,以及其中涉及的安全问题. 因 ...