下一代web:浏览器存储支持
作者:净空无道 来源:译言 发布时间:2008-06-11 11:50:00
下一代的 web 已经开始上路了,就在这个星期,MySpace 集成了 Google Gears,雅虎发布了新的 BrowserPlus,Google 的浏览器版三维地球也上线了。类似 AIR、Silverlight、JavaFX、Gears、XUL、Web Applications 1.0 (DOM5, HTML5 等) 这样的技术和格式让开发者能够超过 AJAX 加速冲向下一代的,有着更好的性能、更多的功能,而且和桌面集成的更加紧密的 web 程序。
现在,因为各个公司都急于展示他们自己的下一代 web 的样子,导致开发者和用户都被前所未有的超多 web 技术所压迫;“DLL 地狱”也被“插件地域”所取代。但是在 web 上,这样过多的选择会导致用户和开发者的成本增加。第一次 web 格式大战已经过去十多年了,那个时候微软、网景、苹果、美国在线还有其他公司都在浏览器标准、脚本语言、web 服务等方面成立了不同的基金会。这次大战的影响一直持续到现在,例如 Javascript 开发者需要依赖 整套的代码库 来开发跨浏览器代码,CSS 开发者需要一系列 hack 才能让他们的站点能够在不同的浏览器中看起来都一样。
现在新一代的富 web 程序技术还都在开发阶段,所以还有机会采用基于标准的态度,来避免重蹈覆辙。幸亏有了过去十多年的教训,现在连微软这样的公司都在以更加开放的姿态来接纳开放标准、数据迁移还有跨平台支持。不管是用户还是开发者,对开放标准的广泛支持都能简化他们用到的技术,但是明显的,并不是所有当前发布的新技术都能支持开放标准。
在 Techcrunch 这一系列帖子里,我们来看看这些组成新一代 web 的各种元素,并且评估可用的选项,当前支持的标准以及对标准的采用情况。由于 MySpace 刚刚宣布他们在程序里面使用了 Google Gears,那么我们的第一篇就来评估基于浏览器的本地缓存。
基于浏览器的本地存储
随着基于 web 的应用程序逐渐流行,就有了希望能够离线运行这些程序的需求。第一个不需要任何插件或者独立程序的解决方案是那些靠缓存 HTTP 头信息来在浏览器缓存里存储信息的方法。类似 Dojo 对离线 web 应用的支持这样的 Javascript 库使用的就是这样的原理,但是这样的程序应用范围非常狭窄,因为没有一个好的办法在浏览器里存储结构化的数据。(Dojo 现在引用了很多包括 Gears 在内的其他的存储引擎——提示:Dylan)
在 2007 年 5 月,Google 发布了Google Gears,一个浏览器插件,它允许 web 程序把数据同步到本地存储器,然后可以离线使用这些 web 程序。在 Gears 发布会上,Google Reader 被重写以支持 Gears,Gears 的突出的重点是离线访问应用程序。但是不被所知的是,Gears 不仅仅能够用来离线访问,它还提供这三大功能:
缓存资源(HTML 页面、图片等)
在数据库中存储结构化数据
异步后台工作线程
在这部分我们关注的是本地对象和结构化数据存储。Gears 通过 Javascript API 来提供相应的功能,这些 API 可以被任何 web 程序访问到。Sqlite,一个轻量级 RDBMS,提供了结构化存储的支持。由于使用了本地数据库,开发者不仅可以执行查询、插入新纪录这样的操作,还能执行更复杂的 SQL 操作,例如连接多表查询等。尽管你可以有多个使用 Gears 的程序,但是每个程序都要运行在一个基于域名的安全模型的沙盒环境里(类似 cookie 和 AJAX 请求)。虽然 Sqlite 已经嵌入 Firefox 2.0 以后的版本,但是它的 API 只能够被 Firefox 核心组件或者附加模块访问到。Gears 插件弥补了这个缺陷,让客户端脚本环境也能够访问到这些 API。
在 Gears 发布前,万维网超文本应用程序技术工作组 (WHATWG) 已经着手制定 Web 程序规范 1.0 草案,这个草案把结构化数据存储包括到了 HTML5 里。该草案当前版本包含了对访问数据库对象和查询本地数据存储的定义。实现的细节虽然交给了各个公司去完成,不过规范里面已经详细说明了 API 的细节。Firefox 将会在 3.0 版里实现一部分和 WHATW 规范一样的存储 API,不过这个版本现在只有预览版可用。WHATWG 规范里的关键部分有:
程序缓存 ——在本地浏览器缓存里存储对象(包含校验)。
navigator.onLine——测试浏览器是否在线(使用缓存,如果需要则加上本地数据存储)。
存储界面和事件——用来通过 DOM 属性存储“名称/值”对。
数据库界面——用来连接本地数据库。支持 SQL语法(或者其子集,取决于使用的服务器)、版本控制和错误回调事件。
线程和回调——这样多个请求就能够异步发送给本地数据存储。
调用本地存储、缓存和离线访问相对来说很简单。程序首先检查是否支持相应的函数,然后通过在后台同步用户数据进程来设置本地缓存。当一个线程在运行的时候,不管是上传还是下载,你可以查询进程状态并且给用户一个反馈(例如一个进度条)。一旦数据本地化,由于是在本地机器上运行数据库,开发者就能大幅度的提高查询性能。当下很多 web 程序仅仅把浏览器用作展示层,例如,电子表格软件就是做 =1+1 这样简单的计算也要进行一次到服务器再返回的请求。通过使用本地数据存储和客户端代码,开发者可以减少到处理和存储到客户端的负荷,同时还能提供给用户更加平滑、类似桌面程序的体验


猜你喜欢
- 今天用scrapy爬取壁纸的时候(url:http://pic.netbian.com/4kmein...)絮叨了一些问题,记录下来,供后世
- 一、Mysql事务概念MySQL 事务主要用于处理操作量大,复杂度高的数据。由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执
- 前言本文主要给大家介绍了关于python中用Future对象异步返回结果的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的
- 本文实例讲述了Python List列表对象内置方法。分享给大家供大家参考,具体如下:前言在上一篇中介绍了Python的序列和String类
- 本例已经实现的数据库password,数据库的表以及表结构如下:表中已经插入的信息:实现思路无非是用户完成账户密码输入并点击登录
- 一般我们能过VS2005的SQL explorer来添加一个本地的MDF文件。也许你可能会出现下面这个问题:Exception Detail
- 1 解决方案【方案一】载入模型结构放在全局,即tensorflow会话外层。'''载入模型结构:最关键的一步'
- javascript中一个标识符所在的位置越深,它的读写速度也越慢。因此,函数中读写局部变量总是最快的,而读写全局变量通常是最慢的。一个好的
- 先给大家分享JQuery判断radio单选框是否选中并获取值的方法https://www.aspxhome.com/article/1548
- 最近python代码遇到了一个神奇的需求, 就是如果将python utc datetime转换为时间戳.百度找到都是使用time.mkti
- 前言:很多人都在使用mysql数据库,但是很少有人能够说出来整个sql语句的执行过程是怎样的,如果不了解执行过程的话,就很难进行sql语句的
- 前言Mysql插入不重复的数据,当大数据量的数据需要插入值时,要判断插入是否重复,然后再插入,那么如何提高效率?解决的办法有很多种,不同的场
- 前言在AI领域,来快速实现一个idea:前后端开发+部署+展现,如果走传统的前后端分离开发+服务器docker部署等方式,会很重且入门成本很
- clock()方法返回当前的处理器时间,以秒表示Unix上一个浮点数。精度取决于具有相同名称的C函数,但在任何情况下,这是使用于
- 前言:处理字符串时经常要定制化去掉无用的空格,python 中要么用存在的常规方法,或者用正则处理1.去掉左边空格string = &quo
- 一、介绍对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github.com/m
- 用AJAX刷新一个DIV中的jsp内容 <script type="text/javascript"> va
- 背景vue是异步渲染的,当data改变之后,DOM不会立刻被渲染,页面渲染时会将data的修改做整合,多次data修改只会做整合最后一次性渲
- 1.打开文件:f=open(r'E:\PythonProjects\test7\a.txt',mode='rt
- 本文实例讲述了Python操作多维数组输出和矩阵运算。分享给大家供大家参考,具体如下:在许多编程语言中(Java,COBOL,BASIC),