Http页面缓存机制

Http页面缓存机制
Http页面缓存机制

改善Web 2.0 应用程序的性能

探秘不同的浏览器端缓存机制

Jian Qiao Sun, 软件工程师, IBM

Hua Pin Shen, 顾问软件工程师, IBM

简介:随着Web 2.0 应用程序的出现和流行,人们使用Internet 的方式已经悄然改变。现在,这些Web 2.0 应用程序拥有许多典型的特征,包括拥有富客户端、大页面、包含许多小项目的页面、大量的JavaScript 编码等等。鉴于目前的浏览器技术,大部分这些特征都会导致浏览器端性能问题,特别是在长距离网络中。本文将分析典型Web 2.0 应用程序的关键方面,并介绍它们如何影响浏览器端性能。本文还将检查浏览器端性能的一个非常重要的部分——浏览器端缓存。

发布日期: 2010 年2 月25 日

级别:中级

其他语言版本:英文

平均分(共2 个评分)

简介

随着Web 2.0 应用程序的出现和流行,Internet 的使用方式已经发生改变,出现了一种新趋势:针对内容管理、信息共享、通信、团队合作等创建一种更加以用户为中心的方法。从技术角度看,Web 2.0 应用程序并没有带来很多新的技术突破。但是,这些应用程序的确带来了一种新的Internet 使用模式。现在,Web 2.0 应用程序拥有许多典型特征,包括拥有富客户端、大页面、包含许多小项目的页面、大量的JavaScript 编码等等。这些特征会导致浏览器端性能问题,特别是在长距离网络中。这些性能问题会对用户体验造成不利影响,但您甚至不会意识到这些问题的存在。由于开发人员拥有很好的网络条件,因此这些性能问题很难完全暴露出来。

本文将首先分析典型的Web 2.0 应用程序的关键方面,解释它们如何影响浏览器端性能。然后,本文介绍浏览器端性能的一个非常重要的部分——浏览器缓存。通过使用适当的缓存设置,您可以向用户提供较好的应用程序体验。如果您没有一个整体缓存策略设计,那么您的缓存策略不仅会导致低劣的性能,还会引发一些功能缺陷。

有许多影响浏览器缓存的规则,其中的部分规则包括Cache-Control、Etag、Expires、Last-Modified 和Vary。所有这些设置拥有不同的含义和最适用的情形。困难之处在于对于相同的设置,并不是所有流行浏览器都拥有相同的行为。因此,在您决定使用这些设置之前,您应该准确了解这些浏览器是如何工作的。本文将检查目前市面上最流行的浏览器的行为:Internet Explorer、Firefox、Chrome 和Safari。

在本文中,我们还使用IBM? Mashups 和开源“Roller Weblogger” 来提供一些示例,展示如何应用不同的指令以最好地使用浏览器缓存。

背景

在当今的Internet 环境中,Web 2.0 应用程序正在变得越来越流行。许多Web 站点都使用Web 2.0 构建,比如Facebook、Youtube 等。IBM 也有Web 2.0 应用程序,比如Lotus Connections 和Lotus Mashups。

以下是一种用于计算浏览器响应时间的基本方法:

?浏览器响应时间= 服务器端时间+ 页面加载时间+ 浏览器呈现时间

?页面加载时间= (请求数/ 并发数)* 延迟时间+ 页面总大小/ 带宽

在上述等式中:

?“服务器端时间” 是指服务器端处理所花费的时间,比如通过LDAP 验证和从数据库检索信息。

?“浏览器呈现时间” 是指浏览器呈现页面所花费的时间,包括执行JavaScript 和解析DOM 树的时间。

?“请求数” 是指HTTP 请求的数量。

?“并发数” 是指浏览器与服务器之间的并行连接的数量。

?“页面总大小” 是指一个页面的完整大小。

?“延迟时间” 和“带宽” 是网络状态指标。在常见的长距离网络环境中,带宽大约为1M,延迟时间大约为100 毫秒。因此,减少到100KB 或减少为一个请求能够节约0.1 秒响应时间。

请注意一点,鉴于真实环境的复杂性,这个等式可能不能涵盖所有情形。

在一个典型的Web 2.0 富Internet 应用程序(例如Lotus Mashup Maker)中,浏览器首先发送格式定义请求到服务器。接收到定义响应数据后,浏览器向服务器发送数据请求。然后,浏览器对用户呈现页面。在这种模式中,有大量的小项目请求,比如JavaScript 文件、CSS 文件等。在长距离网络环境中,这会导致严重影响用户体验的客户端性能问题。大多数文件是可以被缓存的静态文件,因此,如果您添加适当的缓存控件、expiry 头部以及其他影响浏览器缓存的头部元数据,就可以明显改善用户体验。

浏览器缓存机制

有几个影响浏览器缓存的规则,这个小节将分别讨论它们。

Cache-Control

Cache-Control 是最重要的规则。这个字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令。这些指令指定用于阻止缓存对请求或响应造成不利干扰的行为。这些指令通常覆盖默认缓存算法。缓存指令是单向的,即请求中存在一个指令并不意味着响应中将存在同一个指令。

cache-control 定义是:Cache-Control = "Cache-Control" ":" cache-directive。表1 展示了适用的值。

表1. 常用cache-directive 值

Cache-directive 说明

public 所有内容都将被缓存

private 内容只缓存到私有缓存中

no-cache 所有内容都不会被缓存

no-store 所有内容都不会被缓存到缓存或Internet 临时文件中

must-revalidation/proxy-revalidation 如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证

max-age=xxx (xxx is numeric) 缓存的内容将在xxx秒后失效

表2 表明在不同的情形下,浏览器是将请求重新发送到服务器还是使用缓存的内容。表2. 对cache-directive 值的浏览器响应

Cache-directive 打开一个新的浏览器窗

在原窗口中单击Enter 按钮刷新单击Back 按钮

public 浏览器呈现来自缓存的

页面浏览器呈现来自缓存的页面浏览器重新发

送请求到服务

浏览器呈现来自缓存的

页面

private 浏览器重新发送请求到

服务器第一次,浏览器重新发送请求到服务

器;此后,浏览器呈现来自缓存的页

浏览器重新发

送请求到服务

浏览器呈现来自缓存的

页面

no-cache/no-store 浏览器重新发送请求到

服务器浏览器重新发送请求到服务器浏览器重新发

送请求到服务

浏览器重新发送请求到

服务器

must-revalidation/proxy-revalidation 浏览器重新发送请求到

服务器第一次,浏览器重新发送请求到服务

器;此后,浏览器呈现来自缓存的页

浏览器重新发

送请求到服务

浏览器呈现来自缓存的

页面

max-age=xxx (xxx is numeric) 在xxx秒后,浏览器重

新发送请求到服务器在xxx秒后,浏览器重新发送请求到

服务器

浏览器重新发

送请求到服务

在xxx秒后,浏览器重

新发送请求到服务器

Cache-Control 是关于浏览器缓存的最重要的设置,因为它覆盖其他设置,比如Expires 和Last-Modified。另外,由于浏览器的行为基本相同,这个属性是处理跨浏览器缓存问题的最有效的方法。

失效

Expires 头部字段提供一个日期和时间,响应在该日期和时间后被认为失效。失效的缓存条目通常不会被缓存(无论是代理缓存还是用户代理缓存)返回,除非首先通过原始服务器(或者拥有该实体的最新副本的中介缓存)验证。(注意:cache-control max-age 和s-maxage 将覆盖Expires 头部。)

Expires 字段接收以下格式的值:“Expires: Sun, 08 Nov 2009 03:37:26 GMT”。如果查看内容时的日期在给定的日期之前,则认为该内容没有失效并从缓存中提取出来。反之,则认为该内容失效,缓存将采取一些措施。表3-6 表明针对不同用户操作的不同浏览器的行为。

表3. 当用户打开一个新的浏览器窗口时的失效操作

Firefox 3.5 IE 8 Chrome 3 Safari 4

内容没有失效浏览器呈现来自缓存的页面浏览器重新发送请求到服务

器。返回代码是200

浏览器呈现来自缓存的页面浏览器呈现来自缓存的页面

内容失效浏览器重新发送请求到服务器。

返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务器。

返回代码是200

浏览器重新发送请求到服务器。

返回代码是200

表4. 当用户在原始浏览器窗口中单击Enter 按钮时的失效操作Firefox 3.5 IE 8 Chrome 3 Safari 4

内容没有失效浏览器呈现来自缓存的页面浏览器呈现来自缓

存的页面

浏览器重新发送请求到服务器。返回

代码是304

浏览器重新发送请求到服务器。返

回代码是304

内容失效浏览器重新发送请求到服务器。返

回代码是200 浏览器呈现来自缓

存的页面

浏览器重新发送请求到服务器。返回

代码是200

浏览器重新发送请求到服务器。返

回代码是200

表5. 当用户按F5 键刷新页面时的失效操作

Firefox 3.5 IE 8 Chrome 3 Safari 4

内容没有失效浏览器重新发送请求到服务器。

返回代码是304

浏览器重新发送请求到服务

器。返回代码是304

浏览器重新发送请求到服务器。

返回代码是304

浏览器重新发送请求到服务器。

返回代码是304

内容失效浏览器重新发送请求到服务器。

返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务器。

返回代码是200

浏览器重新发送请求到服务器。

返回代码是200

表6. 当用户单击Back 或Forward 按钮时的失效操作

Firefox 3.5 IE 8 Chrome 3 Safari 4

内容没有失效浏览器呈现来自缓存的页

浏览器呈现来自缓存的页

浏览器呈现来自缓存的页

浏览器呈现来自缓存的页面

内容失效浏览器呈现来自缓存的页

面浏览器呈现来自缓存的页

浏览器呈现来自缓存的页

浏览器重新发送请求到服务器。返回代码是

200

注意:所有浏览器都假定为使用默认设置运行。

Last-Modified/E-Tag

Last-Modified 实体头部字段值通常用作一个缓存验证器。简单来说,如果实体值在

Last-Modified 值之后没有被更改,则认为该缓存条目有效。ETag 响应头部字段值是一个

实体标记,它提供一个“不透明” 的缓存验证器。这可能在以下几种情况下提供更可靠的验证:不方便存储修改日期;HTTP 日期值的one-second 解决方案不够用;或者原始服务器希望避免由于使用修改日期而导致的某些冲突。

不同的浏览器有不同的配置行为。表7-10 表明针对不同用户操作的不同浏览器的行为。表7. 当用户打开一个新的浏览器窗口时的Last-Modified E-Tag 操作

Firefox 3.5 IE 8 Chrome 3 Safari 4

内容自上次访问以来没有被修改浏览器重新发送请求到服务

器。返回代码是304

浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是304

浏览器重新发送请求到服务

器。返回代码是304

内容自上次访问以来已经被修改浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

表8. 当用户在原始浏览器窗口中单击Enter 按钮时的Last-Modified E-Tag 操作Firefox 3.5 IE 8 Chrome 3 Safari 4

内容自上次访问以来没有被修改浏览器呈现来自缓存的页面浏览器呈现来自

缓存的页面

浏览器重新发送请求到服务器。

返回代码是304

浏览器重新发送请求到服务器。

返回代码是304

内容自上次访问以来已经被修改浏览器重新发送请求到服务器。

返回代码是200

浏览器呈现来自

缓存的页面

浏览器重新发送请求到服务器。

返回代码是200

浏览器重新发送请求到服务器。

返回代码是200

表9. 当用户按F5 键刷新页面时的Last-Modified E-Tag 操作

Firefox 3.5 IE 8 Chrome 3 Safari 4

内容自上次访问以来没有被修改浏览器重新发送请求到服务

器。返回代码是304

浏览器重新发送请求到服务

器。返回代码是304

浏览器重新发送请求到服务

器。返回代码是304

浏览器重新发送请求到服务

器。返回代码是304

内容自上次访问以来已经被修改浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

表10. 没有缓存设置且用户单击Back 或Forward 按钮

Firefox 3.5 IE 8 Chrome 3 Safari 4

内容自上次访问以来没有被修改浏览器呈现来自缓存的

页面

浏览器呈现来自缓存

的页面

浏览器呈现来自缓存的

页面

浏览器呈现来自缓存的页面

内容自上次访问以来已经被修改浏览器呈现来自缓存的

页面

浏览器呈现来自缓存

的页面

浏览器呈现来自缓存的

页面

浏览器重新发送请求到服务器。返回代

码是200

注意:所有浏览器都假定使用默认设置运行。

不进行任何缓存相关设置

如果您不定义任何缓存相关设置,则不同的浏览器有不同的行为。有时,同一个浏览器在相同的情形下每次运行时的行为都是不同的。情况可能很复杂。另外,有些不该缓存的内容如果被缓存,将会导致安全问题。

不同的浏览器有不同的行为。表11 展示了不同的浏览器行为。

表11. 没有缓存设置且用户打开一个新的浏览器窗口

Firefox 3.5 IE 8 Chrome 3 Safari 4

打开一个新页面浏览器重新发送请求到服务

器。返回代码是200 浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

在原始窗口中单击Enter 按钮浏览器重新发送请求到服务

器。返回代码是200

浏览器呈现来自缓存的页

面。

浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

按F5 键刷新浏览器重新发送请求到服务

器。返回代码是200 浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

单击Back 或Forward 按钮浏览器呈现来自缓存的页面。浏览器呈现来自缓存的页

面。

浏览器重新发送请求到服务

器。返回代码是200

浏览器重新发送请求到服务

器。返回代码是200

注意:所有浏览器都假定使用默认设置运行。

应用示例

本小节提供几个Web 站点分析示例,展示如何使用IBM 商业和开源工具确定正确的缓存行为。

Apache Roller Weblogger

Apache Roller Weblogger 是一个开源Web 2.0 Web 应用程序,它是驱动

https://www.360docs.net/doc/f4833489.html,、https://www.360docs.net/doc/f4833489.html,、IBM Lotus Connections、IBM Developer Works 博客等大量博客的开源Java? 博客服务器,

在本文中,我们选择IBM My developerWorks 博客作为一个示例,详细解释缓存设置。图1 展示了My developerWorks 博客页面的一个屏幕截图。

图1. My developerWorks 博客页面

这个页面有62 个请求,多数是png、gif、js 或其他静态文件类型。当用户首次访问这个页面时,将花费约16 秒时间来在浏览器中显示整个页面。如果您定义正确的缓存设置,多数资源将被缓存到浏览器端。因此,当用户再次访问这个页面时,这个页面的请求数量将减少到22,只需约6 秒钟就可以加载。用户体验得到极大地改善。

现在,我们将分析一些重要的请求缓存设置。相关的Weblogger 输出如图2 所示。

图2. My developerWorks 博客主页Response Header 1

首先,Cache-Control 覆盖Last-Modified 设置,因此页面可以在本地缓存5 秒钟,但如果内容失效将重新验证。当用户访问这个页面时,浏览器首先检查本地缓存,以确定本地文件是否已经失效。如果内容失效,浏览器将发送一个请求到服务器以比较Last-Modified 时间戳。如果响应文件拥有相同的Last-Modified 时间戳,则服务器将返回代码304 到浏览器,告知浏览器响应文件相同。

图3. My developerWorks 博客主页Response Header 2

这个Cache-Control 设置表明:这个响应不能被缓存。从业务角度看,这个请求用于检查用户验证和授权,不应该被缓存。

图4. My developerWorks 博客主页Response Header 3

这个响应文件是一个很少修改的JavaScript 库,因此它的max-age 等于1 天。Mashup Center

Mashup Center 设计用于提供一个易于使用的mashup 解决方案,支持将多个动态情景应用程序集合到一个业务范围中,并提供IT 所需的安全和治理功能。Mashup Center 包含Lotus Mashups 和InfoSphere MashupHub。图5 展示了正在运行的Lotus Mashups 的快照。

图5. Mashup 主页

图6 和图7 展示了选中的HTTP 头部。

图6. Mashup 主页Response Header 1

这个请求检索可以从服务器缓存的主题信息。

图7. Mashup 主页Response Header 2

这是一个个人主页,不应该被缓存。注意,Expires 日期值设置为一个很久以前的日期,以便这个页面总是能够刷新。

结束语

由于不同浏览器的复杂性,适当的缓存设置非常重要。在本文中,我们介绍了以下最佳实践:?尽可能多地缓存文件,以便减少加载次数并改善性能。

?尽可能使用cache-control 定义缓存行为,尤其是对IE。这降低了不同浏览器之间的差别,是改善性能的最佳方法。

?不要使用“no settings related with cache”。

?使用默认设置初次打开IE 时,IE 浏览器几乎总是发送一个请求到服务器端以检索数据。

?如果某个页面不应该被缓存,则使用“cache-control: no-cache, no-store” 来确保该页面不会被缓存,尤其是当数据涉及安全或敏感信息时。

?除非必要,不要使用post 请求,因为它不能被缓存。

参考资料

学习

?查看HTTP Protocol Definition,了解基础知识。

?阅读IBM developerWorks Blogs并加入讨论。

?“https://www.360docs.net/doc/f4833489.html, 揭秘:改善Web 站点的性能”介绍了Web 性能改进。

?developerWorks 技术活动和网络广播:随时关注developerWorks 技术活动和网络广播。

?developerWorks Web development 专区:通过专门关于Web 技术的文章和教程,扩展您在网站开发方面的技能。

获得产品和技术

各类型网站-缓存解决方案

门户类随着互联网不断普及和飞速成长,门户网站已经成为网民获取信息的重要通道。每天大量网民点击访问,网站速度和网络稳定等方面面临着严峻挑战: 1、网站运维技术复杂 2、网站影响力大,对网络灾备要求高 3、网络服务众多,传输机制复杂 4、用户众多,分布广泛,网络情况复杂,响应速度要求高 5、易遭受攻击,网站安全性和稳定性要求高 某门户网站高标准规划、高起点建设,以新闻、信息、下载内容为主,文字、图片与视频、音频结合,目前拥有30 多个频道和子网站。随着自身的不断成长,网站也面临了性能和可用性方面的问题和挑战: 一旦IDC 内的服务器停止工作或ISP 服务中断,如何保证网站始终在线?必须通过更快的响应速度来满足客户的需求,如何为客户提供最及时的响应?应用服务器由于服务器硬件的稳定性、流量压力超载、网络攻击等情况,经常会意外宕机,如何保证网络应用的7 ×24 小时持续性服务? 为解决以上问题,该门户网站使用了PowerCDN服务,确保了关键任务应用的快速、安全和容错性运行。无论该网站的客户所处全球位置如何,PowerCDN的Smart DNS都可将他们引导到具有最佳性能的可用PowerCDN节点,页面响应速度明显提升;同时源站隐藏在CDN节点后,大大减少来自互联网上的直接安全威胁;遇到热点事件的突发流量也不必为此单独购置专门的设备。 sns社区类随着越来越多的个人用户参与到互联网内容的管理、维护、存储、上传、分发等价值链条中,互联网逐渐转变成一个分散存储、读与写并存的多中心交互式平台,社会网络(sns)作为Web2.0的典型应用之一更是遍地开花。由于内容的生产者和组织者越来越多和越来越分散,内容的多节点上传几乎与自上而下的下发变得一样普遍,于是本已拥塞不堪的网络带宽更显拥挤,在现有带宽条件下,如何提高网站接入速度和响应速度,进而改善用户体验,真正做到以用户为中心?这是所有sns社区类网站都必须面对并给出满意解答的一道课题。 1、网站交互性超强 2、文件种类和数量多而且复杂 3、安全保密性要求高

PHP开发常用的五种缓存技术

1、全页面静态化缓存 也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程。此种方式,在CMS系统中比较常见,比如dedecms; 一种比较常用的实现方式是用输出缓存: Ob_start() ******要运行的代码******* $content = Ob_get_contents(); ****将缓存内容写入html文件***** Ob_end_clean(); 2、页面部分缓存 该种方式,是将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示;可以使用类似于ob_get_contents的方式实现,也可以利用类似ESI之类的页面片段缓存策略,使其用来做动态页面中相对静态的片段部分的缓存(ESI技术,请baidu,此处不详讲)。该种方式可以用于如商城中的商品页; 3、数据缓存 顾名思义,就是缓存数据的一种方式;比如,商城中的某个商品信息,当用商品id去请求时,就会得出包括店铺信息、商品信息等数据,此时就可以将这些数据缓存到一个php 文件中,文件名包含商品id来建一个唯一标示;下一次有人想查看这个商品时,首先就直接调这个文件里面的信息,而不用再去数据库查询;其实缓存文件中缓存的就是一个php数组之类; 4、查询缓存 其实这跟数据缓存是一个思路,就是根据查询语句来缓存;将查询得到的数据缓存在一个文件中,下次遇到相同的查询时,就直接先从这个文件里面调数据,不会再去查数据库;但此处的缓存文件名可能就需要以查询语句为基点来建立唯一标示; 5、按内容变更进行缓存 这个也并非独立的缓存技术,需结合着用;就是当数据库内容被修改时,即刻更新缓存文件; 比如,一个人流量很大的商城,商品很多,商品表必然比较大,这表的压力也比较重;我们就可以对商品显示页进行页面缓存;当商家在后台修改这个商品的信息时,点击保存,

缓冲溶液及其作用机制的教案

缓冲溶液及其作用机制(教学教案) 授课人:张瑞林 授课时间:20分钟 【教学目标】: 通过缓冲溶液的定义、作用、组成及作用机制的介绍,使学生对缓冲体系有一个基本的了解,为以后学习人体缓冲体系打下理论基础。 【教学方式】:多媒体结合板书进行讲解式教学 【教学内容】: 1、缓冲溶液的定义 2、缓冲溶液的作用 3、缓冲溶液的组成 4、缓冲溶液的作用机制 【教学重点及难点】:缓冲溶液的组成、缓冲溶液的作用机制 【教学过程】: 引言: 通过医学常识我们知道正常人的血液pH范围为7.35 ~ 7.45,pH值不因代谢过程中产生酸、碱性物质而变化。为什么血液的pH的范围能保持在7.35 ~ 7.45? 知识准备: 1.弱电解质的电离平衡 2.盐类水解 一、缓冲溶液的概念(由实验引出) 缓冲溶液:能抵抗外加少量强酸或强碱,而维持pH基本不发生变化的溶液。 缓冲作用:缓冲溶液所具有的抵抗外加少量强酸或强碱的作用。 【提问】:1.缓冲溶液的组成是怎样的? 2.缓冲溶液为什么能对抗外来少量强酸、强碱或适当稀释,而保持溶液的pH几乎不变的? 二、缓冲溶液的组成和作用机制 1.缓冲溶液的组成 根据缓冲对不同,缓冲溶液分为三种: 弱酸及其盐 弱碱及其盐 多元弱酸的酸式盐与其次级盐

2.缓冲溶液的作用机制 以HAc — NaAc为例 HAc、NaAc足量 HAc + H 2O H 3 O+ + Ac- + 左移 H 3 O+抗酸成分 + 抗碱成分右移 OH- 2H 2 O 共轭酸—抗碱成分共轭碱—抗酸成分三、讨论: NH 3—NH 4 Cl的缓冲原理 四、练习: 五、小结: 概念:缓冲溶液 缓冲溶液组成和缓冲作用 缓冲原理 六、作业: 搜集资料: 缓冲溶液在日常生活中的应用。

android文件功能释义

01.frameworks: 02../bin/am am命令来发送Intent 03../bin/app_process 系统进程 04../bin/audioloop 多媒体框架读取缓存内容 05../bin/bmgr adb shell命令下对Android Device所有package备份和恢复的操作。 06../bin/bootanimation 显示开机画面命令 07../bin/bu 系统backup manager 08../bin/bugreport bugreport命令,里面包含了各种log信息,大部分log也可以通过直接运行相关的程序来直接获得. bin/mpdecision 智能开核 09../bin/decoder decoder命令 10../bin/drmserver video protected 11../bin/dumpstate 状态抓取器 12../bin/dumpsys 系统抓取器 13../bin/ime ime命令所需jar包,用于查看当前话机输入法列表、设置输入法 14../bin/input input命令所需的jar包,用于模拟按键输入。 15../bin/installd android apk安装最后使用服务installd 来实现 16../bin/keystore keystore服务是加解密储存键值的服务。它主要作用就是验证应用程序与签名文件是否一致。 17../bin/keystore_cli keystore命令行 18../bin/mediaserver 是整个android中media部分的核心和灵魂。几乎所有与多媒体播放相关的内容都放在这里。包括了音视频的编解码以及显示输出 19../bin/omx_tests 多媒体框架omx接口测试 20../bin/pm 包管理器 21../bin/record 多媒体核心及插件record命令 22../bin/recordvideo 多媒体核心及插件 recordvideo命令 23../bin/screencap framebuffer service则调用截屏工具screencap来截屏。那些同步软件也是调用screencap实现截屏的 24../bin/screenshot 系统screenshot命令 25../bin/sensorservice 在Java层Sensor的状态控制由SensorService来负责 26../bin/service 配合libandroid_servers.so在话机启动时通过SystemServer以循环闭合管理的方式将各个service添加到ServiceManager中。 27../bin/servicemanager servicemanager服务的作用主要是服务管理,所谓的服务管理其实就是获取服务、检查服务、添加服务、枚举所有服务。 28../bin/sf2 多媒体核心及插件 recordvideo命令 sf2命令 29../bin/stagefright 多媒体框架 30../bin/stream 多媒体核心及插件stream命令 31../bin/surfaceflinger 触摸感应驱动

Android客户端缓存方案

概述: 客户端缓存机制是android应用开发中非常重要的一项工作,使用缓存机制不仅仅可以为用户节省3G流量,同时在用户体验方面也是非常好的选择. 缓存机制分为两部分,一部分是文字缓存,另一部分是多媒体文件缓存. 缓存文件保存策略: 1.文字缓存: 文字缓存应该分为两种,一种是更新比较频繁的区域,一种是更新不频繁的区域. 根据两者的更新频率区分它们的过期时间. 更新比较频繁的区域,它的缓存过期时间应该为应用程序内(即应用程序从打开到关闭的这段时间).这种情况会有专门的缓存文件夹存放该类缓存文件,以及专门的缓存数据库表存放信息.每次应用程序启动的时候都会先将该类数据清空. 另一种很少更新的区域,它的缓存不设置过期时间,而是提供一个按钮或者Menu可以让用户选择手动更新(如我的好友列表,我的订阅,我的分享.等等….) 具体的文字缓存划分,详见附录1. (1)通常情况下,我们与服务器交互都是采用JSON格式获取数据的,获取的JSON数 据仅仅是一段字符串,我们可以考虑将这些字符串使用文件流写入一个TXT,保存到 SD卡中,在数据库添加该数据的记录.添加数据库记录时,提供两个关键字段,一个是 请求的URL,另一个则是本地保存后的文件地址.日后每次向服务器发起请求之前都会根据URL在数据库中检索. 该方法好处:降低系统数据库数据量,不会出现数据库满了的现象. 缺点:IO操作频繁,有时代码书写有误会造成内存泄露等状况. (2)将JSON数据解析后装入List对象中,然后遍历List,将数据统统写入相应的 数据库表结构中,以后每次向服务器发起请求之前可以先在数据库中检索,如果有直接返回. 该方法好处:如果本地存在文字缓存,那么读取缓存速度快. 缺点:增加数据库数据量. 2.多媒体文件缓存 (1)图片缓存 图片的缓存可以根据当前日期,时间为名字缓存到SD卡中的指定图片缓存目录, 同时数据库中做相应记录,记录办法可以采用两个关键字段控制,一个字段是该图片 的URL地址,另一个字段是该图片的本机地址.取图片时根据URL在数据中检索, 如果没有则连接服务器下载,下载之后再服务器中作出相应记录. (2)视频文件缓存 考虑到视频文件就是动画片,每一集的大小应该超过20MB,如果边播放边下载的话 用户的3G流量负担是很大的,而且用户看完一集动画片,基本上不会再去看第二遍. 从这个状况来看,建议不要对视频文件进行下载缓存.另外也能降低程序员的编码负 担.

HTML清除浏览器缓存

JSP页面缓存技术浏览器缓存 一、概述 缓存的思想可以应用在软件分层的各个层面。它是一种内部机制,对外界而言,是不可感知的。 数据库本身有缓存,持久层也可以缓存。(比如:hibernate,还分1级和2级缓存)业务层也可以有缓存(但一般来说,这是一个过程域,不会设缓存)。 表现层/数据服务层(传统web的表现层)也可以设置缓存(jsp cache 就是这一层,实现在app server上的缓存机制) 另外Browser也有缓存(如IE)这个大家也都知道(实现在web server 上的缓存机制)。越上层的缓存效果越好,越底层的缓存影响越深远。 二、缓存实现(浏览器缓存当前访问的JSP动态页面) (一)、服务端方法: <% response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", -10); %> (二)、客户端方法: meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta 标签用于网页的<head>与</head>中,meta 标签的用处很多。meta 的属性有两种:name和http-equiv。name 属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。这其中最重要的是description(站点在搜索引擎上的描述)和keywords(分类关键词),所以应该给每页加一个meta值。比较常用的有以下几个: name 属性 1、<meta name="Generator" contect="">用以说明生成工具(如Microsoft FrontPage 4.0)等; 2、<meta name="KEYWords" contect="">向搜索引擎说明你的网页的关键词; 3、<meta name="DEscription" contect="">告诉搜索引擎你的站点的主要内容; 4、<meta name="Author" contect="你的姓名">告诉搜索引擎你的站点的制作的作者; 5、<meta name="Robots" contect="all|none|index|noindex|follow|nofollow"> 其中的属性说明如下: 设定为all:文件将被检索,且页面上的链接可以被查询; 设定为none:文件将不被检索,且页面上的链接不可以被查询; 设定为index:文件将被检索; 设定为follow:页面上的链接可以被查询; 设定为noindex:文件将不被检索,但页面上的链接可以被查询; 设定为nofollow:文件将不被检索,页面上的链接可以被查询。 http-equiv属性 1、<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80"> 和<meta http-equiv="Content-Language" contect="zh-CN">用以说明主页制作所使用的文字以及语言;又如英文是ISO-8859-1字符集,还有BIG5、utf-8、shift-Jis、Euc、Koi8-2等字符集; 2、<meta http-equiv="Refresh" contect="n;url=http://yourlink">定时让网页在指定的时间n

缓存机制

3.1、缓存策略 3.1.1、一级缓存 之前每一个数据库操作都是一个Session,那么对于Session来说本身是存在着缓存,可以保留之前的查询结果。 但是对于Session的缓存只针对于一个Session有效,那么如果现在想针对于多个Session 有作用,则必须在SessionFactory上配置缓存,那么这样的缓存称为二级缓存。 在Hiernate按ID查询有两个方法:load、get 那么下面使用以上的查询方法,查询两次 程序虽然调用了两次load方法,但是只发出了一条的查询命令,证明,第一次的查询结果被保存下来了,那么这就是一级缓存。

与之前的相比,查询了两次操作,所以此时,证明一级缓存只是针对于一个Session起作用的。但是一级缓存是无法关闭的,始终会存在。

从运行结果可以发现,如果之前先进行了保存操作,那么之后再查询的话也不会重新发出查询语句。证明实体被缓存下来。 问题: 如果现在要求使用程序插入100000万条记录?该怎么办? 如果使用Hibernate处理的话,则可能会出现内存的溢出,所以在这种情况下首先是绝对不建议使用Hibernate完成的,就使用最基本的JDBC操作完成即可。 如果非要使用Hibernate做,则必须使用到Session中关于缓存的一些操作方法:·清空Session中的所有缓存:clear() ·清空Session中一个指定的实体:evict(Object obj) 例如:下面验证clear()方法 因为程序中,将所有的缓存清空了,所以之后再查询相同实体的时候,在Session中已

以上因为只清空了一个实体,所以只发出了三个查询语句。 那么就可以通过以上的方式完成100W条记录的插入 思路:按照每十条清空缓存的操作,并将缓存中的内容强制性的写到数据库之中 3.1.2、二级缓存(重点) 在Hibernate本身中支持了多种的二级缓存组件。本次使用EHcache。如果要想使用ehcache话,则首先必须进行配置,配置ehcache的缓存文件。 ehcache.xml:

Android4.0的多媒体框架Nuplayer介绍

Android4.x 的RTSP 框架学习 ——NuPlayer 介绍 本文介绍如下内容: 播放框架介绍 RTSP 源介绍 HTTP 流媒体的区别 要研究的点 NuPlayer 框图: NuPlayer NuPlayerDriver ALooper <<接口>> MediaPlayerInterface NuPlayer::Renderer NuPlayer::Decoder ACodec::UninitializedState AHierarchicalStateMachine ACodec ACodec::UninitializedState ACodec::LoadedToIdleState ACodec::IdleToExecutingState ACodec::ExecutingState ACodec::ExecutingToIdleState ACodec::IdleToLoadedState ACodec::FlushingState AHandler 1 * * 11* <<接口>>NuPlayer::Source *1 NuPlayer::HTTPLiveSource NuPlayer::RTSPSource ALooper 1* MyHandler * 1 ARTPConnection ARTSPConnection ALooper 1* mNetLooper for ARTPConnection ARTPSource ARTPAssembler AAVCAssembler AAVCAssembler AMPEG4AudioAssembler AH263Assembler AAMRAssembler AAMRAssembler AMPEG4ElementaryAssembler ARawAudioAssembler AnotherPacketSource <<接口>>MediaSource APacketSource * 1 * 1* 1OMX AHandler

FTP文件下载不能及时更新

FTP文件下载“不能及时更新”都是IE缓存的错 事件回放:学期末,信息技术课学生正在微机室进行在线考试。”上面有答案,”下面有同学小声议论经,我看了一下,原来我在制作试卷时将答案与试题做成了一个文档,学生在下载试卷的同时,答案也就下载了。我赶紧嘱咐学生自觉考试,同时将答案自觉删除。幸好是第一个班,我赶紧登陆到学校FTP服务器上,将考试文档中答案删除。每想到第二个班考试时,下载的考试文档还有答案。我直接到FTP服务器上操作,发现确实已经删除了。怎么加事?经过一番分析,原来都是IE缓存引起的。 关于IE缓存 为了提高访问网页的速度,Internet Explorer浏览器会采用累积式加速的方法,将你曾经访问的网页内容(包括图片以及cookie文件等)存放在电脑里。这个存放空间,我们就称它为IE缓存。以后我们每次访问网站时,IE会首先搜索这个目录,如果其中已经有访问过的内容,那IE就不必从网上下载,而直接从缓存中调出来,从而提高了访问网站的速度。 FTP默认工作方式也是通过IE打开,我们不难分析产生这种现象的原因: 从FTP服务器下载文档到本地或是直接打开文档,首先到IE缓存检查有没有同名的文件存在,如果有,就直接从IE缓存打开或下载。如果没有,先下载到IE缓存,然后再从IE缓存下载到本地,当在FTP服务器上对文件内容修改时,只要文件名没改变时,即使内容变了或者文件大小变了,客户端先检查本地IE缓存,如果存在同名(不管大小或文件最后修改时间),就直接从本地IE缓存下载,当然还是原来那个文件了。 小秘密:关于文件在缓存中的位置。在IE的“工具”菜单下选择“Internet选项”,然后在“常规”选项卡中你会看到有“Internet临时文件”这一项,单击“设置”按钮,然后在弹出的“设置”对话框中就可以看到IE缓存的位置,winxp与win7略有不同了。这里有一个不能不说的秘密了。我开始在实验中,在该缓存目录下没有发现任何我要下载的文档,通过WINDOWS的文件查找功能在该目录下也没有找到任何文档了,其实下载的文档应该还是从缓存COPY过来的,因为在FTP服务端已经更改了内容了。后来查阅了相关资料才知道在系统提示的IE缓存目录下还有一个文件夹“\Content.IE5”,它即不是隐藏的也不是系统的,所以不通过手工输入,是无法进入的。当进入到该目录下,你看到那些在"content.ie5"目录下以数字和字母命名的文件夹了么?这是微软试图通过使用复杂的文件名来使他的计划越发难以理解,这些数字和字母命名的文件夹就是微软生成的用来保存你的cookies和缓存的文件夹,如下图所示。

Android http流媒体开发总结

Android http流媒体开发总结 http流媒体原理与实现: (1) android http流媒体的实现: (2) android http流媒体存在的问题与改善: (3) 流媒体早已容入我们现代的生活,给我们的生活带来很多欢快与乐趣。那它的技术原理又是如何的,又是如何实现的呢?流媒体是一种在网络上在线播放多媒体的技术,由于其边下载边播放的特性,缩短了用户初始等待的延迟,所以其数据也需要采用流式传输,具有较高的实时需求;其传输协议是使用最为广泛的http/tcp协议。 http流媒体原理与实现: http流媒体这个应用是从http网站提供文件服务发展而来的,在网站我们可以把文件放到http的服务器上,用户就可以从下载,而把支持流媒体传输的媒体文件放到支持http服务的服务器上,并且支持断点继传的服务就能做为http流媒体的服务器,然后客户端就可以通过url直接连接到服务器接收数据进行流媒体的播放,之前的http服务是只能支持下载然后播放的,而现在我们可以直接在线播放边下载边播放,这得益于我们在http协议层有了支持,就是在HTTP/1.1里新增了一个header field叫做range 的字段。 http协议对range 的规范定义如下: ranges-specifier = byte-ranges-specifier byte-ranges-specifier = bytes-unit “=” byte-range-set byte-range-set = 1#( byte-range-spec | suffix-byte-range-spec ) byte-range-spec = first-byte-pos “-” [last-byte-pos] first-byte-pos = 1*DIGIT last-byte-pos = 1*DIGIT range的意思请求的数据可以是指定位置,指定大小的,这样就如同操作本地文件一样读取服务器中的文件任何位置的任何数据。有了range支持使得http流媒体播放成为可能,当然也使得一些快速下载工具成为可能。如果在没有range 的情况下,数据只能顺序的接收,当文件的媒体数据很大的时候就出现内存无法保存到索引出现的地方,只能把整个文件下载下来才能播放。当有range的时候,文件可以像本地文件一样,随处随大小的读取播放。

缓存管理需求说明

缓存管理功能需求说明 缓存管理开发背景 缓存管理功能的开发,意在减少系统对数据库的过多访问,通过减少对数据库的访问次数,改用访问内存的方式,提升系统的性能。直接从内存获取数据,较之从数据库获取数据,效率可以得到显著的提升。 系统由于多次查询数据库,消耗大量系统资源,且查询效率可能因为开发者的个人能力导致查询效率不高,或占用过多资源影响系统性能。使用缓存管理,系统只有第一次查询访问数据库,而后皆通过访问内存取得数据,不需要在计较这次查询的SQL是否过于复杂,是否效率低下,直接取得数据返回即可。 第一部分、缓存管理 缓存管理提供了缓存工具类CacheUtils以供开发者对缓存进行自定义开发。如果开发者需要自己开发某功能需要涉及缓存管理则可以借助使用CacheUtils工具类来完成。本地缓存管理和redis 缓存管理的区分在于redis是否正确连接且启动。注意,是正确连接并且启动redis服务器。 关于开发者需要自行开发某功能的缓存管理需要了解CacheUtils怎么使用可以查看《缓存管理开发说明》 本地缓存管理 本地缓存管理是在redis没有正常启动运行的时候系统提供的缓存管理方式。本地缓存管理暂无任何持久化操作。对于缓存中的所有数据,在应用重启后一律清空,需要重新载入缓存。本地缓存

管理采用的是标准的key-value形式保存,于Java中采用的结构形式为HashMap结构,HashMap 有利于快速的存取,因而采用该结构保存本地缓存。其中key的类型为string,value的类型为object。本地缓存管理对于类型的限制基本没有。Value可以置入任何Java支持的对象。 本地缓存管理中,保存进入缓存只需要使用CacheUtils中的save方法进行保存即可,保存的数据在本地缓存中不做多余的处理,直接置入缓存中。由于采用的是以Object类型的形式保存,并不会对保存的数据进行转换,获取保存的缓存数据时直接使用CacheUtils中的get方法即可取得保存的数据,达到怎么存就怎么取,存什么取什么。无需更多的变换数据结构,更不会导致因为存储导致类型的变换或者数据的丢失。 由于存什么取得的就是什么,因而直接修改取得的数据对象有可能导致缓存数据也被修改。Redis缓存管理 Redis缓存管理需要开启redis服务器并正确配置连接信息,系统会在启动的时候检测redis是否可以正常连接启用,如果没有正常连接启用则使用本地缓存管理。 Redis缓存管理对于类型具有特别的要求,对于不同的数据类型需要使用对应的类型进行保存。且不允许使用复杂的对象类型进行保存,如list-object是不被允许的,需要转换为list-string的类型再进行保存,同理Map类型也不被允许使用Object,但是单个JavaBean是允许进行存取的。即redis 缓存管理不支持三维结构存储,仅支持二维结构存储。 Redis缓存管理的数据会有简易的持久化。即当redis停止后或者系统停止后,再次启动时redis 依然存有数据提供,不需要再次载入缓存。如果缓存设置了失效则可能会被清除。 Redis缓存管理保存、修改 由于redis数据类型的特殊性,所以所有Java中复杂的对象存储都需要进行相应的转换后才可

网页视频下载方式大全

网页音视频下载方式大全(编辑完成) 优酷、奇艺、搜狐等网站上有不少好看的、有用的、喜欢的视频,但下载却提示要安装客户端,而绝大多数人都不会只呆在一家视频网站上,要都安装客户端,未免太过麻烦,而且很多时候也基本用不到。那么有没有办法直接下载网页视频?答案是肯定的。 目前,我们可以通过插件、软件、网站和浏览器来下载网页视频。这些东西使用的方式主要有两类:一是从浏览器缓存中提取视频缓存;二是通过分析网页元素等方式查找网页视频的下载地址。下面我就将通过插件下载、软件下载、浏览器下载来介绍网页音视频的下载方式。 一、通过插件来下载网页中的音视频 1、火狐插件 说到通过插件下载网页中的音视频,最有名的果断是火狐上的NetVideoHunter Video Downloader。这款插件目前只开发了火狐版,该插件支持火狐3.0以后的 所有版本。它能从火狐的缓存中提取视频,能够从几乎任何网站上提取视频、音频的下载链接并下载,能在独立窗口中播放音视频,并且,即使是优酷之类的将长视频分段保存的网站,它也能嗅探到所有的视频片段,不会像某些工具只能嗅探到部分。 当页面有音视频时,火狐右下角NetVideoHunter的图标上就会显示网页中包含的音视频数量,点击弹出下载和独立播放窗口。下图为截图:

此外火狐上还有FlashGot、Easy YouTube Video Downloader等优秀插件也能 嗅探到网页中的音视频。 2、chrome及基于chromium开发的浏览器上的插件 作为浏览器市场上的有力竞争者,chrome上也有视频提取的插件:FVD Video Download,它同样能够嗅探到几乎所有网站上的音视频,包括优酷等分段存储 加载的音视频,并调用浏览器自带下载来下载音视频(调用迅雷旋风等需要浏览器或其他插件支持)。 当嗅探到页面上有音视频时,FVD Video Download在插件栏上的图标会变为蓝色的箭头(不然为带红×的灰色箭头),点击即可下载。下图是截图:

减震缓冲技术

减震缓冲技术发展综述 姓名:尚兴超 学号:511011503 指导老师:梁医 一.概述 机械振动、冲击问题广泛存在于工程机械[1]、汽车机械、建筑机械、船舶机械、航空航天、武器领域[2]等,减振器和缓冲器主要是用于减小或削弱振动或冲击对设备与人员影响的一个部件。它起到衰减和吸收振动的作用。使得某些设备及人员免受不良振动的影响,起到保护设备及人员正常工作与安全的作用,因此它广泛应用于各种机床、汽车、摩托车、火车、轮船、飞机及坦克等装备上。 振动问题的基本方程为: ()e sin n t d x A t ζωωφ-=+ 从方程中可以看出,系统振动幅值的衰减与阻尼系数大小ζ有关[3],也就是说,震动产生的能量将会被阻尼所吸收。减震器和缓冲器就是基于此原理而设计的。 二.发展历史 世界上第一个有记载、比较简单的减震器是1897年由两个姓吉明的人发明的。他们把橡胶块与叶片弹簧的端部相连,当悬架被完全压缩时,橡胶减震块就碰到连接在汽车大梁上的一个螺栓, 产生止动。1898年,第一个实用的减震器 由一个法国人特鲁芬特研制成功并被安装到摩托赛车上。他将前叉悬置于弹簧上,同时与一个摩擦阻尼件相连,以防止摩托车的振颤。1899年,美国汽车爱好者爱德华特·哈德福特将前者应用于汽车上。后来,又经历了加布里埃尔减震器、平衡弹簧式减震器和1909年发明的空气弹簧减震器。空气弹簧减震器类似于充气轮胎的工作原理,它的主要缺点是常常产生漏气。 1908年法国人霍迪立设计了第一个实用的液压减震器。其原理是液流通过小孔时产生的阻尼现象。20世纪60年代,通用公司麦迪逊工程师研制了把螺旋弹簧、液压减震器和上悬架臂杆组成的麦迪逊减震器,其体积比较小,得到了广泛的应用[4]。 三.研究现状 液压缓冲器是目前应用最为广泛的减震缓冲装置,其结构简单,运行平稳。

OpenMax多媒体引擎

Android OpenMax的基本层次结构如图18-1所示。

OpenMax是无授权费的,跨平台的应用程序接口API,通过使媒体加速组件能够在开发、集成和编程环节中实现跨多操作系统和处理器硬件平台,提供全面的流媒体编解码器和应用程序便携化。 OpenMax的官方网站如下所示: https://www.360docs.net/doc/f4833489.html,/openmax/ OpenMax实际上分成三个层次,自上而下分别是,OpenMax DL(开发层),OpenMax IL(集成层)和OpenMax AL(应用层)。三个层次的内容分别如下所示。 第一层:OpenMax DL(Development Layer,开发层) OpenMax DL定义了一个API,它是音频、视频和图像功能的集合。供应商能够在一个新的处理器上实现并优化,然后编解码供应商使用它来编写更广泛的编解码器功能。它包括音频信号的处理功能,如FFT和filter,图像原始处理,如颜色空间转换、视频原始处理,以实现例如MPEG-4、H.264、MP3、AAC和JPEG 等编解码器的优化。 第二层:OpenMax IL(Integration Layer,集成层) OpenMax IL作为音频、视频和图像编解码器能与多媒体编解码器交互,并以统一的行为支持组件(例如,资源和皮肤)。这些编解码器或许是软硬件的混合体,对用户是透明的底层接口应用于嵌入式、移动设备。它提供了应用程序和媒体框架,透明的。S编解码器供应商必须写私有的或者封闭的接口,集成进移动设备。IL的主要目的是使用特征集合为编解码器提供一个系统抽象,为解决多个不同媒体系统之间轻便性的问题。 第三层:OpenMax AL(Appliction Layer,应用层) OpenMax AL API在应用程序和多媒体中间件之间提供了一个标准化接口,多媒体中间件提供服务以实现被期待的API功能。 --------------------------------------------------------------------------------------------------- OpenMax的三个层次如图18-2所示。 OpenMax API将会与处理器一同提供,以使库和编解码器开发者能够高速有效地利用新器件的完整加速潜能,无须担心其底层的硬件结构。该标准是针对嵌入式设备和移动设备的多媒体软件架构。在架构底层上为多媒体的编解码和数据处理定义了一套统一的编程接口,对多媒体数据的处理功能进行系统级抽象,为用户屏蔽了底层的细节。因此,多媒体应用程序和多媒体框架通过OpenMax IL

网站性能优化:页面静态化和二级缓存

网站性能优化:页面静态化和二级缓存 2009-08-29 23:41:20| 分类:java | 标签:无|字号大中小订阅 性能方案: 1.页面静态化。只适合那些不会经常发生变化的页面(不适合条件查询和分页)。 对于经常发生变化的内容,如何进行性能优化 2.缓存方案。 1.页面缓存(性能高与二级缓存) 2.业务层缓存(二级缓存,只缓存对象),hibernate二级缓存 页面缓存 1.页面缓存缓存的是servlet向页面输出的html代码,我们使用OsCahe作为页面缓存产品。OsCahe也可以用作二级缓存。 什么是OSCache OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSCache是个一个广泛采用的高性能的J2EE 缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。拥有全面的API--OSCache API给你全面的程序来控制所有的OSCache特性。永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。支持集群--集群缓存数据能被单个的进行参数配置,不需要修改代码。缓存记录的过期--你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)。 使用OsCahe如何实现页面全局和局部缓存。 只需要学习几个标签 采用map结构的对象缓存内容,这个缓存的key就是我们请求的路径。以后只要我们访问相同的路径,就可以在map中找到这个缓存的内容。但是如果我们在路径后面加上参数,map 中就找不到了。缓存就不会被使用了。 所以我们可以自己指定缓存的key的名称。 scope可以定义这个缓存的使用范围,session只对同一个会话进行缓存 time指定缓存时间,默认是1个小时。过时以后,旧缓存会丢失,重新建立新的缓存。 refresh:强行清除缓存。里面可以接收el表达式,true表示重新建立缓存。默认为false。 下面是一些示例 我们使用Oscache的标签来进行页面的局部缓存.使用方法如下: <%@taglib uri="https://www.360docs.net/doc/f4833489.html,/oscache" prefix="cache"%>

LibStageFright

LibStageFright AwesomePlayer AudioPlayer MEPG4Writer (default) AMRWriter OMXCodec OMX AwesomeRender OMXClient SoftWareRender AwesomeNativeWindowRenderer MediaExtractor SoftWare Codec DataSource 图1 LibStageFright 内部架构图 LibStageFright 图2 LibStageFright 与外部接口调用关系图 MediaSource OMXMaster MediaPlayerService AwesomePlayer MEPG4Writer AMRWriter SoftWareRender AwesomeNativeWindowRenderer AudioPlayer OMXClient OMX StagefrightRecorder Audio Output Get OMX SurfaceFlinger EGL AudioFlinger StagefrightPlayer OMXMaster libstagefrighthw Hardware

MediaPlayer MediaPlayeService Jni_android_media_MediaPlayer AwesomPlayer StagefrightPlayer MediaPlayer.java 图3 MediaPlayer 框架 MediaRecorder.java Jni_android_media_MediaRecorder MediaRecorder MediaPlayerService MediaRecorderClient StagefrightRecorder AudioSource CameraSource AudioRecord Camera 图4 MediaRecorder 框架

mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache

mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和 mybatis整合ehcache 1 查询缓存1.1 什么是查询缓存mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。mybaits 提供一级缓存,和二级缓存。一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper 的sql语句,多个SqlSession去操作数据库得到数据会存在二级缓存区域,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。二级缓存是多个SqlSession 共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql 中传递参数也相同即最终执行相同的sql语句,第一次执行

完毕会将数据库中查询的数据写到缓存(内存),第二次会 从缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis默认没有开启二级缓存需要在setting全局参数中配置开启二级缓存。如果缓存中有数据就不用从数据库中获取,大大提高系统性能。1.2 一级缓存1.2.1 一级缓存工作原理下图是根据id查询用户的一级缓存图解第一次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的 用户信息,如果没有,从数据库查询用户信息。得到用户信息,将用户信息存储到一级缓存中。如果sqlSession去执行commit操作(执行插入、更新、删除),清空SqlSession 中的一级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。第二次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,缓存中有,直接从缓存中获取用户信息。1.2.2 一级缓存测试mybatis默认支持一级缓存,不需要在配置文件去配置。按照上边一级 缓存原理步骤去测试。@Test public void testCache1() throws Exception{ SqlSessionsqlSession = sqlSessionFactory.openSession();//创建代理对象UserMapperuserMapper = sqlSession.getMapper(UserMapper.class); // 下边查询使用一个SqlSession //第一次发起请求,查询id为1的用户Useruser1 =

教你如何提取网页中的视频、音乐歌曲、

教你如何提取网页中的视频、音乐歌曲、flash、图片等多媒体文件(很实用) 打开网页后,发现里面有好看的视频、好听的音乐、好看的图片、很炫的flash,是不是想把它们弄到自己电脑上或手机、mp4上?但很多时候视频无法下载,音乐只能试听,或者好听的背景音乐根本就不知道什么名字,更别说怎么下了;至于图片直接右键另存为即可,不过如果网页突然关掉了,但又想把看过的图片弄下来,而忘了图片网页地址或者不想再通过历史记录打开,这时又该怎么办? 其实这些问题都能很好的解决,并且很简单,只要用一个软件 来替你从电脑的缓存中搜索一下就OK了,因为网页中显示的内容基本 上全部都在缓存中,如果自己手动搜索,那将是很累人滴,又不好找,东西太多,又没分类。 无意中发现一个小软件很强(对此感兴趣,本人玩过无数小软件),我一直在用,也是用它帮了很多网友的忙,为了让更多的网友解决问题,于是拿来和亲们分享一下。不废话了,下面进入主题: 这款免费小软件就是YuanBox(元宝箱)v1.6,百度一搜就能下载。 下面是我自己整理的使用步骤,供亲们参考(其实不用看就行,软件简单,不用学就会),我只是用的时间长了,很熟练罢了: 软件下好后,解压,打开里面的YuanBox.exe即可,不用安装;打开此软件前,先打开你要提取东西的网页(之后再关掉也行),这是为了保证电脑缓存中有你要的东西。 运行软件,初始界面如下图:

之后直接是flv格式视频搜索结果的界面,原因就是此软件的全称是 元宝箱FLV视频下载专家,不想要视频的话,点击最上面的设置或者最下面的高级设置,即可进行搜索范围设定

下面是搜索条件设定界面 以swf格式flash为例,进行搜索,选择类型中的第二项 点击确定,开始搜索,结果如下:

相关文档
最新文档