我们使用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. [Scikit-Learn] - introduction

    scikit-learn是一个用于机器学习的 Python 模块,建立在SciPy基础之上. 主要特点: 操作简单.高效的数据挖掘和数据分析 无访问限制,在任何情况下可重新使用 建立在NumPy.Sc ...

  2. [C++] 反编译器

    各种开源的decompiler都不太好用,眼下最好的反编译器是IDA pro. 尽管是收费的,只是破解版非常好找. 我试过5.5版本号的,还不错. 我把windows notepad进行了反编译,多少 ...

  3. ubuntu设置root密码及 Xftp连接linux(ubuntu)时提示ssh服务器拒绝了密码,请再试一次

    原文:ubuntu设置root密码及 Xftp连接linux(ubuntu)时提示ssh服务器拒绝了密码,请再试一次 alt+f2,在弹出的运行窗口中输入:gnome-terminal sudo pa ...

  4. Codeforces 15C Industrial Nim 简单的游戏

    主题链接:点击打开链接 意甲冠军: 特定n 下列n行,每一行2的数量u v 表达v礧:u,u+1,u+2···u+v-1 问先手必胜还是后手必胜 思路: 首先依据Nim的博弈结论 把全部数都异或一下, ...

  5. 1 DDD理论学习1 通用语言

    通用语言就是将事情描述清楚的语言 达到DDD的目标代码即设计,设计即代码.通俗的讲,也就是开发人员写的代码领域专家也能看懂. ddd模式跟传统模式的一个区别在于 传统先创建数据库表 再根据表创建类.而 ...

  6. 使用Adorner显示WPF控件的边界点

    原文:使用Adorner显示WPF控件的边界点 当我们拖动WPF控件时,我们为了更清楚地需要显示控件,一般我们会在WPF控件所围成的矩形区域的四个边界点上作一个特殊的记号(比如圆点).如下图: 在Wi ...

  7. Emoji:搜索将与您找到表情符号背后的故事

    眼下.秉已经开始支持emoji搜索,这意味着,你可以插入或粘贴系列emoji表情,让我们的爱.微笑.食品等..些表情随意组合,必应总会带给你非常多有趣的但却没有不论什么实际用途的搜索结果. 这是一项非 ...

  8. android4.4系统解决“ERRORcouldn&#39;t find native method”方法

    android4.4系统解决"ERRORcouldn't find native method"方法 今天笔者在移植一个tv模块从android4.2到android4.4系统的设 ...

  9. Leetcode 169 Majority Element 分治

    在一个长度为n的数组中找出出现次数超过(n+1)/2次的数 说明请参考编程之美中的2.3 class Solution { public: int majorityElement(vector< ...

  10. 如何删除您的注册js图书馆bower私人图书馆

    建立你自己bower 这样的私人图书馆参考http://blog.csdn.net/nsrainbow/article/details/35988611 本文 假设我们想注册自己的创作js私人图书馆图 ...