【问题标题】:HTML 5 web SQL chrome support , Should I use webSQL?HTML 5 web SQL chrome 支持,我应该使用 webSQL 吗?
【发布时间】:2012-08-30 06:59:39
【问题描述】:

在这里,我必须创建一个基于服务器的应用程序,该应用程序将在封闭的网络上运行并且特定于 chrome。 我现在必须决定是应该使用 WebSQL(这肯定会节省我们的开发时间)还是应该使用 IndexedDB(我们对此知之甚少)。

如何才能知道 chrome 会在功能版本中继续支持 WebSQL? 或者我必须将我的客户限制在支持版本,这不利于长期的业务关系。

还请告诉我任何学习索引数据库的好教程或指南...

我无法理解 w3c 停止支持 webSQL 的原因。 有谁知道吗?

【问题讨论】:

标签: google-chrome web-sql indexeddb


【解决方案1】:

WebSql 自 2010 年 11 月 18 日起不再维护 standard by W3C

本文档在 W3C 推荐轨道上,但规范 工作已经停止。规范陷入僵局:所有人都感兴趣 实现者使用了相同的 SQL 后端(Sqlite),但我们需要 多个独立的实现以继续进行 标准化路径。

这是我维护的link to github 项目,其中包含 IndexedDB 基本功能的示例,例如:创建数据库、插入、检索、更新和删除数据。我刚刚更新了它以在最新版本的 Chrome 和 Firefox 中工作

【讨论】:

  • 谢谢您,您的示例帮助了我,但我无法在 chrome 21 win 7 中查看 indexedDB 的内容,因为这是 chrome 特有的(我为此感到幸运)。然而,我觉得 IndexedDB 上的资料不足。
  • 当您尝试打开它时遇到什么样的错误?我已经检查了代码,它在 ff 15 和 chrome 21 中都有效 - 您还可以通过资源选项卡中的 chrome 开发人员工具查看数据库内容
  • 现在,它运行良好,我直接运行该示例,现在当我在 Apache 中运行示例并将.html 转换为.php 现在我可以在 chrome 的资源选项卡中查看内容.
【解决方案2】:

实际上,IndexedDB 会在您继续前进时节省您的时间。通过版本控制更改版本非常容易。

对于教程,我真的推荐我自己的http://dev.yathit.com/ydn-db/starting/query.html它是教程javascript indexeddb wrapper,但你可以很快理解和感受它。在 chrome、safari 和 firefox 上阅读,打开开发控制台并复制并粘贴代码 sn-ps,稍作更改。了解关键范围的重要性非常重要。关于密钥生成和过滤光标迭代有一些技巧。

我认为这是因为 WebSQL 查询结果与 JSON 非常不同。使用 NoSQL,如果我们只想持久化一个 JSON 对象,现在为什么需要定义 TABLE 实在是太愚蠢了。与 WebSQL 相比,IndexedDB 非常简单且重量非常轻。

【讨论】:

    【解决方案3】:

    我迟到了几年,但认为回答那些尚未直接回答的 OP 问题会有所帮助,并添加一些有用的建议:)。

    我怎么知道chrome会继续支持WebSQL在 功能版本?

    据我所知,无法确定特定浏览器供应商何时会放弃对技术或 API 的支持。但是,供应商通常会提前一段时间(大约几个月或几年)通知开发人员。

    我应该使用 webSQL 吗?

    简而言之,不。由于 Deni Spasovski 的回答,关于deprecation of WebSQL still stands 的一切。另一方面,IndexedDB,enjoys the support of all of the major browser vendors。所以选择后者。

    然而,我应该指出,两个数据库之间的决定不是必须做出的;可以简单地选择(或制作)一个库,该库利用客户端计算机上可用的任何数据库。

    BakedGoods 与此处已建议的此类库在几个方面有所不同;最相关的是,它允许明确指定要使用的存储类型,进而允许开发人员在决策过程中引入其他因素(例如性能特征)。

    有了它,在支持的任何一种数据库类型中执行存储操作都是...

    ...为两种数据库类型指定适当的操作选项和等效配置:

    //If the operation is a set(), and the referenced structures 
    //don't exist, they will be created automatically.
    
    var webSQLOptionsObj = {
        databaseName: "Example_DB",
        databaseDisplayName: "Example DB",
        databaseVersion: "",
        estimatedDatabaseSize: 1024 * 1024,
        tableData: {
            name: "Main",
            keyColumnName: "lastName",
            columnDefinitions: "(lastName TEXT PRIMARY KEY, firstName TEXT)"
        }, 
        tableIndexDataArray: [name: "First_Name_Index", columnNames: "(firstName)"]
    };
    
    var indexedDBOptionsObj = {
        databaseName: "Example_DB",
        databaseVersion: 1,
        objectStoreData: {
            name: "Main",
            keyPath: lastName,
            autoIncrement: false
        },
        objectStoreIndexDataArray: [
            {name: "First_Name_Index", keyPath: "firstName", unique: false, multiEntry: false}
        ],
    };
    
    var optionsObj = {
        conductDisjointly: false, 
        webSQL: webSQLOptionsObj, 
        indexedDB: indexedDBOptionsObj
    };
    

    ...并进行操作:

    bakedGoods.set({
        data: [
            {value: {lastName: "Obama", firstName: "Barack"}}, 
            {value: {lastName: "Biden", firstName: "Joe"}}
        ],
        storageTypes: ["indexedDB", "webSQL"],
        options: optionsObj,
        complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
    });
    

    其简单的界面和无与伦比的存储设施支持是以缺乏对某些存储设施特定配置的支持为代价的。例如,它不支持在具有多列主键的 WebSQL 表中进行存储操作。

    因此,如果您大量使用这些类型的功能,您可能想看看其他地方。

    哦,为了完全透明,BakedGoods 确实由您维护 :)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多