我们使用React Native开发APP,在列表中显示图片时,列表框经常出现长时间的空白。经过稍微研究和参考其他人的经验,我们知道React Native的ListView以及后来改进版的FlatList在安卓系统上都有内存使用方面的问题,很多团队在开发时都需要自己去优化这个控件,大体优化思路无非也就是将滚出显示区域外的图片占用的内存释放掉,具体实现起来会复杂一些。

以上主要是背景介绍,不过有点跑题。那我们在优化之后,仍然还是有些问题,这和网络状况也有关系,网速慢的时候图片加载的时间比较长,会出现卡顿和渲染完成前的空白现象。我们图片全部存储在阿里云OSS服务中,数据库中只保存图片链接,那图片的加载速度问题,可以使用阿里云CDN来协助解决。

CDN+OSS能解决图片加速的问题,那具体是怎样配置的呢?这里我们先把两个名词了解清楚,有些名词因为向来没有被很好地解释,导致使用者对概念理解不正确,从而对加速的流程理解有错误,即使按照文档提示可以配置了,也无法正确理解为什么要那样去配置。

加速域名

比如我的网站域名是www.mydomain.com,CDN是用来加速这个网站的图片,那么有人就以为加速域名是:www.mydomain.com,即把加速域名理解为被加速的网站的域名。而实际上,我们应该添加一个二级域名来作为加速域名,加速域名的意思是,你访问这个域名的时候,所访问的资源是通过CDN来加速了的,需要注意的是,在这里,加速域名不是:www.mydomain.com。

源站域名

对于我们这个场景来说,源站域名就是OSS的域名。如果我们通过OSS域名来访问图片资源,那么就直接从OSS服务器获取图片,而如果从加速域名访问图片,则先试图从CDN服务器获取图片资源,如果CDN服务器没有缓存图片资源,则CDN服务器会自动去源站OSS服务器获取图片资源并缓存在CDN服务器上。

配置及原理

具体来说,比如我要在网站某个页面上显示一张图片,这张图片是放OSS中的,地址为:https://mydomain.com-oss.aliyun.com/test.jpg。现在我想使用CDN来加速这张图片,那么我需要在网站页面代码里面修改图片的地址为加速域名的地址。我先在阿里云的域名管理中选择域名:mydomain.com,然后给它添加一个二级域名,暂且就叫cdn.mydomain.com吧,之后在阿里云CDN控制台的域名管理界面上,添加一个加速域名,就是这个:cdn.mydomain.com,源站域名就设置为:https://mydomain.com-oss.aliyun.com。阿里云CDN会给这个加速域名分配一个CNAME,比如:cdn.mydomain.com.kunlunar.com,然后你在mydomain.com的域名解析那里,给二级域名:cdn.mydomain.com添加一个CNAME类型的解析,值为:cdn.mydomain.com.kunlunar.com。

现在就可以改下你网站界面里面的代码了,比如原来有代码如下:

<img src=”https://mydomain.com-oss.aliyun.com/test.jpg” />

就需要改成:

<img src=”https://cdn.mydomain.com/test.jpg” />

这样,当用户浏览你的网站:www.mydomain.com,访问到我们原来要加速的那张图片时,就访问了:https://cdn.mydomain.com/test.jpg,因为我们已经给二级域名cdn.mydomain.com添加了一个CNAME解析,这时候DNS会把这个二级域名解析到CNAME的值,也就是前面提到的阿里云给我们的CNAME值:cdn.mydomain.com.kunlunar.com,这个值再经过解析得到的是阿里云智能DNS服务的IP,于是域名解析流程转到了阿里云的智能DNS。这个智能DNS根据用户访问的源IP地址,可以知道用户离哪个CDN机房比较近,然后将那个CDN机房服务器的IP返回给用户,假设为:111.222.33.44。

用户得到这个IP:111.222.33.44后,就近地去获取图片了。当用户第一次访问CDN机房服务器时,找不到要访问的图片,这时候CDN服务器就会去访问源站,也就是从OSS中获取要访问的图片https://mydomain.com-oss.aliyun.com/test.jpg,并缓存到CDN服务器上,再将图片内容返回给用户。下一次如果有和该用户位于同一区域的用户访问该图片,则会走一样的流程,只是这时候,CDN服务器上已经缓存好图片,不需要再次去OSS中获取原始图片了。而CDN服务器相比于OSS存储服务器,一般来说离用户更近一些,这样就达到了加速访问的效果。阿里云CDN+OSS组合使用时,还提供了自动刷新功能,开启这个功能后,当OSS中的原始图片信息改变时,会通知CDN服务器重新拉取并缓存,这样就降低了访问CDN服务器获取资源时缓存未命中的机率。

原文发表于:阿里云CDN+OSS完成图片加速

欢迎关注微信公众号:

阿里云CDN+OSS完成图片加速的更多相关文章

  1. 云计算之路-阿里云上:访问阿里云CDN上的图片,自动跳转到百度首页

    昨天有用户向我们反馈一篇博文(一条语句导致CPU持续100%)中的部分图片不能显示,我们的图片访问用的是阿里云CDN,原以为是某个CDN节点不稳定的问题,但在排查时发现这些图片不能显示竟然是因为请求时 ...

  2. 阿里云 CDN 业务基于边缘容器的云原生转型实践

    导读:本文基于边缘容器的阿里云 CDN 云原生实践, 涵盖了边缘容器的背景和趋势,边缘托管集群 ACK Managed Edge K8s(文中简称“Edge@ACK”) 的能力.架构,以及基于边缘容器 ...

  3. 突破!阿里云CDN实现毫秒级全网刷新

    通常在某网站使用了CDN节点来实现内容分发加速后,当源站内容更新的时候,CDN刷新系统会通过提交刷新请求将CDN节点上的指定缓存内容强制过期.当用户访问的时候,CDN节点将回源获取最新内容返回给用户, ...

  4. 阿里云存储OSS之九大使用技巧

    http://www.biphp.com/cloud-computing/%E9%98%BF%E9%87%8C%E4%BA%91%E5%AD%98%E5%82%A8oss%E4%B9%8B%E4%B9 ...

  5. 阿里云-CDN

    1.什么是CDN 内容分发网络,意思是将内容(静态资源,如文件等)缓存到全球加速节点,用户请求这些内容时,请求将调度到最近的CDN节点,加快了访问速度. 2.CDN原理 1.用户(北京)向www.a. ...

  6. 博客中新浪图床 迁移至 阿里云的OSS

    前言 因为之前有个新浪的图床,还挺好用,而且免费,自己博客的图片上传到其上面也挺方便的,但是,前几周吧,突然图片就不能访问了,之前本来是想通过添加 meta 头来解决的,但是发现没有效果.于是就自己搞 ...

  7. 什么是阿里云CDN

    阿里云内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络.阿里云CDN分担源站压力,避免网络拥塞, ...

  8. 阿里云CDN上线 WAF,一站式提供分发+安全能力

    CDN是业界公认的加速网站访问效率.提升用户体验的内容分发加速产品.Gartner预测2019年超过50%的互联网流量将通过CDN内容分发网络进行加速. 然而,越来越多企业也意识到恶意网络攻击对非凡用 ...

  9. 阿里云CDN技术掌舵人文景:相爱相杀一路狂奔的这十年

    导读:提到阿里云CDN,不得不提技术掌舵人姚伟斌(文景),虽然他不是团队中最“老”的同学,但他却历经了淘宝业务发展最为飞速的几年,见证了从最初服务淘宝和集团内部的CDN,到如今国内服务客户最多的云CD ...

随机推荐

  1. 在web应用程序中在网页中对Web.config文件进行数据连接配置

    using System; using System.Collections.Generic; using System.Configuration; using System.Web.Configu ...

  2. docker入门1: Dockerfile介绍

    Dockerfile是为快速构建docker image而设计的,当你使用dockerbuild 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执行 ...

  3. matlab 矢量化编程(四)—— 标量函数转化为能够处理矢量的函数

    1. 组合的矢量实现 nchoosek(n, k) 的第二个参数在 matlab 下是不支持矢量化的,必须是标量形式.但 matlab 下的 gamma 函数,却可支持,矢量形式,又因为,gamma ...

  4. 隐变量模型(latent variable model)

    连续隐变量模型(continuous latent model)也常常被称为降维(dimensionality reduction) PCA Factor Analysis ICA 连续的情形比离散的 ...

  5. UVa 11400 Lighting System Design(DP 照明设计)

    意甲冠军  地方照明系统设计  总共需要n不同类型的灯泡  然后进入 每个灯电压v  相应电压电源的价格k  每一个灯泡的价格c   须要这样的灯泡的数量l   电压低的灯泡能够用电压高的灯泡替换   ...

  6. 最新用WPF为触摸屏写了一个手写程序,双格输入的

    原文:最新用WPF为触摸屏写了一个手写程序,双格输入的 双格输入可以提高手写速度,当前字写完以后可以自动识别提交,写下一个字.这样比单格手写速度提高一倍.特别适合触摸屏程序使用 界面如下: 程序如下: ...

  7. JPA示例项(J采纳PA的hibernate实现版本号)

    (1).JPA介绍: JPA全名Java Persistence API ,Java坚持API这是Sun公司Java EE 5规范中提出的Java持久化接口. JPA吸取了眼下Java持久化技术的长处 ...

  8. 【Struts2学习笔记(3)】至Action注入属性值

    (1)有属性注入? 当一些属性不适合固定写入时适合使用这样的方法,对于一些使用特频繁的类或者方法,非常多类都会用到,那么使用属性注入会节省很多其它的力气.并且在设计的时候就能够提早的把该属性给定义出来 ...

  9. jquery mobile 笔记

    1.navbar 相关 <nav data-role="navbar">    <ul>      <li><a href="# ...

  10. XF 进度条和指示器

    <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http:/ ...