浏览器缓存

大型网站技术架构——网站架构的伸缩性设计

眉间皱痕 提交于 2020-04-06 22:45:28
首先,所谓网站的伸缩性,指 不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力 。在整个互联网行业的发展渐进演化中,最重要的技术就是 服务器集群 ,通过不断地向集群中添加服务器来增强整个集群的处理能力。 一、网站架构的伸缩性设计 1.1 不同功能进行物理分离实现伸缩   (1)纵向分离:将业务处理流程上得不同部分分离部署,实现系统的伸缩性;   (2)横向分离:将不同的业务模块分离部署,实现系统的伸缩性; 1.2 单一功通过集群规模实现伸缩   使用服务器集群,即将相同服务部署在多台服务器上构成一个集群整体对外提供服务。具体来说,集群伸缩性又分为应用服务器集群伸缩性和数据服务器集群伸缩性。这两种集群对于数据状态管理的不同,技术实现也有很大的区别。  It is said that 当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车 。 二、应用服务器集群的伸缩性设计 2.1 应用服务器那点必须知道的事儿   (1)应用服务器应该被设计成 无状态 的,即应用服务器不存储请求上下文信息;构建集群后,每次用户的请求都可以发到集群中任意一台服务器上处理,任何一台服务器的处理结果都是相同的;   (2)HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态

memcached

拥有回忆 提交于 2020-04-06 19:43:08
1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力. 缓存是将一些常用的数据保存内存或者memcache中,在一定的时间内有人来访问这些数据时,则不再去执行数据库及渲染等操作,而是直接从内存或memcache的缓存中去取得数据,然后返回给用户. 2.Django提供了6种缓存方式 开发调试缓存 内存缓存 文件缓存 数据库缓存 Memcache缓存(使用python-memcached模块) Memcache缓存(使用pylibmc模块) 经常使用的有文件缓存和Mencache缓存 2.1 各种缓存方式的配置文件说明 2.1.1 开发调试(此模式为开发调试使用,实际上不执行任何操作) settings.py文件配置 ? 1 2 3 4 5 6 7 8 9 10 CACHES = { 'default' : { 'BACKEND' : 'django.core.cache.backends.dummy.DummyCache' , # 缓存后台使用的引擎 'TIMEOUT' : 300 , # 缓存超时时间(默认300秒,None表示永不过期,0表示立即过期) 'OPTIONS'

HTML5 performance API 草案.

北慕城南 提交于 2020-04-06 07:10:00
支持浏览器 : IE9+,Chrome11+,Firefox7+. 宿主对象window.performance. 参考资料: http://msdn.microsoft.com/zh-cn/office/ff975118 参考w3c的标准草案: http://w3c-test.org/webperf/specs/NavigationTiming/ 目前,IE9+和 chrome11+,Firefox7+已经实现了该草案定义的接口. 成员 : .navigation (一个叫做performanceNavigation的对象.) .timing (这玩意是一个被称作performanceTiming的包含了很多成员的对象) 方法 : .toJSON 返回一个 对象,并抄写performance的可枚举成员到其中. 是的,timing,navigation都在上面. JSON.stringify(performance.toJSON()) == JSON.stringify(performance)//true. 悲剧啊.明明是继承来的,msdn非要特殊标一下.. PS: 1. performance,仅能对当前的html文档做检测,所有的对象都和当前文档有关. 如果我们想检测某个图片资源的网络状况,则不行. 比如我们想监控,用户访问我们服务的状况,就只能创建一个iframe,

HTML5性能优化

丶灬走出姿态 提交于 2020-04-06 05:19:51
HTML5性能优化 在看完这两章内容之后,我意犹未尽,于是乎从网上搜索关键字“Java Web高性能”,在IBM社区找到两篇不错的文章,而让人更意外的是我发现那两篇文章的内容跟《高性能HTML5》前两章高度相似,不知道是谁抄袭谁的,大家可以鉴别下真伪,下面附上地址。 http://dl2.iteye.com/upload/attachment/0097/9373/b0e69540-e703-3530-81bb-c93de7b850a6.pdf http://www.ibm.com/developerworks/cn/java/j-lo-javawebhiperf1/ http://www.ibm.com/developerworks/cn/java/j-lo-javawebhiperf2/ 前面是读后感,下面是我针对最近几天学习到的提高Web性能进行了篇幅不小的总结,一来为新人提供帮助,二来自己做一下笔记,加深记忆。 性能之前端篇 --减少重绘 在HTML页面完成展现之后,动态改变页面元素或调整CSS样式都会引起浏览器重绘,性能的损耗直接取决于动态改变的范围:如果只是改变一个元素的颜色之类的信息则只会重绘该元素;而如果是增删节点或调整节点位置则会引起其兄弟节点也一并重绘。 减少重绘并不是说不要重绘,而是要注意重绘范围:①改动的DOM元素越深则影响越小,所以尽量深入节点改动

高性能网站建设指南笔记

喜欢而已 提交于 2020-04-05 19:07:32
规则1-减少HTTP请求 1.图片合并 1)将多个图片合并为一个图片, 2)CSS Sprites。使用CSS的background-positon属性,配合width/height显示指定位置的图片局部内容。 <div style="background-image:url('xxxxx.gif');background-position:-260px -90px; width:26px;height:24px;"></div> 3)合并后的图片,不但减少了下载次数,而且降低了总体大小,因为它减少了颜色表、格式信息等图片格式开销。 2.内嵌图片 1)使用data:URL模式 data:[<mediatype>][;base64],<data> data:URL形式无法直接被浏览器缓存,可以将其放在css样式表中,从而实现缓存,base64转换后的图片会变大。 .home{background-image:url(data:image/gif;base64,XXXXXXXXX);} 3.合并js和css文件 规则2-使用内容分发网络 规则3-使用Max-Age 1.使用Expires/Max-Age/mod_expires设定缓存时间 可以通过设置文件版本号等方法,使文件及时刷新。 规则4-压缩组件 1.gzip压缩 1)浏览器发送Accept-Encoding:gzip

深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1

 ̄綄美尐妖づ 提交于 2020-04-04 08:32:32
备注 : 因为文章太长,所以将它分为三部分,本文是第二部分。 第一部分 : 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1 第二部分 : 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 2 第三部分 : 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3 背景 “从浏览器中输入URL到页面加载的发生了什么“,这是一道经典的面试题,涉及到的知识面非常多,但作为一个自认为对网络知识掌握的比较好的老码农来说,回答这个问题自然不在话下。如果这道题目如果在面试出现,对我来说就是送分题啊。尽管如此,我还是愿意花一些时间根据我自己的理解回答一下这个题目,看我自己到底掌握的有多深,同时也把自己的知识梳理一下。 这让我想起另外一件往事,这道题有点类似于“在手机上浏览器上输入一个URL,手机做了一些什么”,我当时学习通信里的核心网时就给自己提出过这个问题。 我非常愿意将这个面试题的答案共享出来,一是希望得到大家的意见,二是也希望对那些不是特别熟的人起到一些帮助。 因为文章较长,我将它们分为三大部份,后面会提供该文章的完整PDF版本,供大家下载。 从本文里学到什么? 正如前面所说,这篇文章涉及到的知识面非常丰富,我相信您绝对可以从本文里学到很多基础知识,还有一些高级话题。 DNS的解析原理,常用命令,端口等 TCP

HTML5学习(16)应用程序缓存

╄→尐↘猪︶ㄣ 提交于 2020-04-04 07:32:21
什么是应用程序缓存(Application Cache)? HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问。 应用程序缓存为应用带来三个优势: 离线浏览 - 用户可在应用离线时使用它们 速度 - 已缓存资源加载得更快 减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源。 Cache Manifest 基础 如需启用应用程序缓存,请在文档的<html> 标签中包含 manifest 属性: <!DOCTYPE HTML> <html manifest="demo.appcache"> ... </html> manifest 文件的建议的文件扩展名是:".appcache"。 请注意,manifest 文件需要配置正确的 MIME-type,即 "text/cache-manifest"。必须在 web 服务器上进行配置。 Manifest 文件 manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。 manifest 文件可分为三个部分: CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存 NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存 FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)

HTTP 缓存

♀尐吖头ヾ 提交于 2020-04-03 16:05:55
通过网络获取内容既缓慢,成本又高:大的响应需要在客户端和服务器之间进行多次往返通信,这拖延了浏览器可以使用和处理内容的时间,同时也增加了访问者的数据成本。因此,缓存和重用以前获取的资源的能力成为优化性能很关键的一个方面。 Contents 使用 ETag 验证缓存的响应 Cache-Control 定义最优 Cache-Control 策略 废弃和更新已缓存的响应 缓存检查表 好消息是每个浏览器都实现了 HTTP 缓存! 我们所要做的就是,确保每个服务器响应都提供正确的 HTTP 头指令,以指导浏览器何时可以缓存响应以及可以缓存多久。 如果在应用中使用 Webview 来获取和显示网页内容,可能需要提供额外的配置标志,以确保启用了 HTTP 缓存,并根据用途设置了合理的缓存大小,同时,确保缓存持久化。查看平台文档并确认您的设置! 服务器在返回响应时,还会发出一组 HTTP 头,用来描述内容类型、长度、缓存指令、验证令牌等。例如,在上图的交互中,服务器返回了一个 1024 字节的响应,指导客户端缓存响应长达 120 秒,并提供验证令牌( x234dff ),在响应过期之后,可以用来验证资源是否被修改。 使用 ETag 验证缓存的响应 TL;DR 服务器通过 ETag HTTP 头传递验证令牌 通过验证令牌可以进行高效的资源更新检查:如果资源未更改,则不会传输任何数据。

前端性能优化(十一)

南楼画角 提交于 2020-04-03 16:05:32
HTTP 缓存 通过网络获取内容既缓慢,成本又高:大的响应需要在客户端和服务器之间进行多次往返通信,这拖延了浏览器可以使用和处理内容的时间,同时也增加了访问者的数据成本。因此,缓存和重用以前获取的资源的能力成为优化性能很关键的一个方面。 好消息是每个浏览器都实现了 HTTP 缓存! 我们所要做的就是,确保每个服务器响应都提供正确的 HTTP 头指令,以指导浏览器何时可以缓存响应以及可以缓存多久。 如果在应用中使用 Webview 来获取和显示网页内容,可能需要提供额外的配置标志,以确保启用了 HTTP 缓存,并根据用途设置了合理的缓存大小,同时,确保缓存持久化。查看平台文档并确认您的设置! 服务器在返回响应时,还会发出一组 HTTP 头,用来描述内容类型、长度、缓存指令、验证令牌等。例如,在上图的交互中,服务器返回了一个 1024 字节的响应,指导客户端缓存响应长达 120 秒,并提供验证令牌( x234dff ),在响应过期之后,可以用来验证资源是否被修改。 使用 ETag 验证缓存的响应 让我们假设在首次获取资源 120 秒之后,浏览器又对该资源发起了新请求。首先,浏览器会检查本地缓存并找到之前的响应,不幸的是,这个响应现在已经’过期’,无法在使用。此时,浏览器也可以直接发出新请求,获取新的完整响应,但是这样做效率较低,因为如果资源未被更改过

HTTP 缓存

為{幸葍}努か 提交于 2020-04-03 16:05:13
通过网络获取内容既缓慢,成本又高:大的响应需要在客户端和服务器之间进行多次往返通信,这拖延了浏览器可以使用和处理内容的时间,同时也增加了访问者的数据成本。因此,缓存和重用以前获取的资源的能力成为优化性能很关键的一个方面。 在这篇指南中 使用 ETag 验证缓存的响应 Cache-Control 定义最优 Cache-Control 策略 废弃和更新已缓存的响应 缓存检查表 好消息是每个浏览器都实现了 HTTP 缓存! 我们所要做的就是,确保每个服务器响应都提供正确的 HTTP 头指令,以指导浏览器何时可以缓存响应以及可以缓存多久。 如果在应用中使用 Webview 来获取和显示网页内容,可能需要提供额外的配置标志,以确保启用了 HTTP 缓存,并根据用途设置了合理的缓存大小,同时,确保缓存持久化。查看平台文档并确认您的设置! 服务器在返回响应时,还会发出一组 HTTP 头,用来描述内容类型、长度、缓存指令、验证令牌等。例如,在上图的交互中,服务器返回了一个 1024 字节的响应,指导客户端缓存响应长达 120 秒,并提供验证令牌( x234dff ),在响应过期之后,可以用来验证资源是否被修改。 使用 ETag 验证缓存的响应 服务器通过 ETag HTTP 头传递验证令牌 通过验证令牌可以进行高效的资源更新检查:如果资源未更改,则不会传输任何数据。 让我们假设在首次获取资源