#caniuse #serde #css #html-css #html #api-bindings #detail

caniuse-serde

使用 Serde 1.0 解析和查询 caniuse.com JSON 数据库的更现代的包装

7 个版本

使用旧的 Rust 2015

0.0.6 2017年11月13日
0.0.5 2017年11月7日
0.0.3 2017年10月31日

#45 in #detail


css-autoprefix 中使用

MIT 许可证

410KB
3.5K SLoC

caniuse-serde

caniuse-serde 是一个 rust crate,用于访问 caniuse 数据库。它使用 Serde 1.0 解析 JSON。它不会创建一个编译时完美的哈希表,因此允许支持 caniuse 数据库 的不同版本。

它附带了一个最新的 caniuse 数据库,默认情况下嵌入式;目前版本为 1.0.30000746

许可证

本项目的许可证为 MIT。 caniuse 数据库 可在 CC BY 4.0 许可证 下使用。对 caniuse 数据库的归属权为 "caniuse.com"。有关 caniuse 数据库 的问题,可在 http://a.deveria.com/contact 进行咨询。


lib.rs:

caniuse-serde

一个用于与浏览器(代理)功能和区域使用数据数据库 https://caniuse.cn 交互的 Rust 库 crate。附带嵌入式数据库版本,也可以与外部副本(JSON 文件)一起使用。

入门

要开始

extern crate caniuse_serde;
use ::caniuse_serde::{EmbeddedCanIUseDatabase, AgentName, FeatureName};

查找代理详情

let agent = AgentName::MozillaFirefox.agent(EmbeddedCanIUseDatabase).unwrap();

查找功能详情

let feature = "transform3d".into().feature(EmbeddedCanIUseDatabase).unwrap();

区域使用

  • 使用 regional_usage 模块中的常量来获取区域、大陆和全球使用数据。
  • 要复制 'browserlist' 的功能,请使用 RegionalUsage 上的 query() 方法。
  • 或者阅读下面的更有用的方法。
  • 使用枚举 RegionalUsages 和方法 regional_usage() 获取对嵌入式 RegionalUsage 数据库的引用。

使用caniuse数据库配合browserlist行为策略

浏览器厂商(例如IE与Chrome)对版本的概念理解不同,因此仅仅说“最新两个版本”并不特别有用。在实践中,需要使用数据库中的数据,结合选择规则来识别一组需要支持的浏览器和浏览器版本。这些选择规则可能会在几个月或几年内保持稳定,但长期来看不一定。

我为一个用英语编写并翻译成西班牙语、法语和意大利语的专业国际顾问网站确定了自己的选择规则。我将这些规则作为代码添加到这个包中,以确保我围绕caniuse.com数据库编写的API实际上是可以使用的。

要使用我的选择

最快的方式是使用sensible_choices()sensible_choices_default():-

extern crate caniuse_serde;
use ::caniuse_serde::*;
use ::caniuse_serde::regional_usage::*;

let (can_i_use, choices) = sensible_choices_default();

let feature_name = FeatureName("css-focus-ring".to_owned());
let mut unique_prefixes = HashSet::new();
choices.support_for_a_feature(&can_i_use, &feature_name, |agent, version, support| {
	if support.requires_prefix() {
		unique_prefixes.insert(agent.prefix(version).clone());
	}
});

assert!(unique_prefixes.contains(&Prefix::moz));
assert_eq!(unique_prefixes.len(), 1);

我的选择规则

  1. 仍在使用的过时浏览器
    • 我们需要支持这些浏览器的最新版本,直到其使用率低于X%
    • 使用率应针对世界的一个子集(即目标受众的洲或国家)
    • 这些浏览器包括:- - IE(版本11)
      • Blackberry浏览器(版本10)
      • IE手机(微软已放弃Windows Phone)
  2. 渲染引擎发生重大变化的浏览器
    • 这实际上使旧渲染引擎的最后一个版本过时了
    • 规则与过时浏览器相同,但选择需要意识到存在“较新”的版本
    • 这些浏览器包括:
      • Android浏览器(版本4.4.4)
        • 带有Presto的Opera
  3. 自动更新的浏览器
    • 这些浏览器的版本寿命较短,通常不到一年
    • 最好通过匹配特定发布日期(例如2年前)之后发布的所有版本来发现它们
    • 使用百分比并不明智,因为每个版本的使用率都会迅速变化(从几乎为零到几个百分点,然后再次接近零),而且肯定比静态网站重建变化得更快
    • 这些浏览器包括:
      • Firefox
      • Safari
      • Microsoft Edge
      • Chrome
      • 使用WebKit渲染引擎的Opera
  4. 自动更新浏览器的长期版本
    • 这些浏览器偶尔会发布长期版本,这些版本旨在支持一年或更长时间
    • 这些浏览器的使用率可能在全球范围内非常低,它们可能比9个或更多的发布版本“过时”,但它们代表了一个重要的受众
    • 实际上,每个长期版本支持的时长会随着每个发布版本的变化而变化,尽管厂商有“长期发布政策”
      • 这是因为政策在长期版本之间的长期间隔中发生变化
    • 这些浏览器很难识别,因为caniuse.com数据库没有包含它们
    • 一些长期发布版本在支持的功能上略有不同,特别是那些更具实验性质的功能,与它们的短期发布版本略有不同(即使它们可能具有相同的重大版本号)
      • 对于Firefox,ESR发布版本据说是一年(实际上,54周,“9周期”,发布之间的重叠为12周(“2周期”),周期是Firefox发布周期,通常是6周),但,正如这些类型的发布总是会发生的那样,政策已经改变了好几次。
    • 这些浏览器包括:
      • Firefox
  5. 对区域有重要意义的偶尔自动更新的浏览器
    • 对印度的亚洲市场来说,支持这些浏览器尤为重要
    • 许多较便宜的智能手机都配备了它们(我也使用过它们)
    • 厂商通常不会升级已安装的旧固件版本,一些较旧的版本可能比较新的版本使用率更高一段时间
    • 它们目前都只是比Chrome更早的WebKit渲染引擎版本
    • 这些浏览器可能最适合使用“超过X%规则”,其中X代表任何版本
    • 这些浏览器包括:
      • UC浏览器
      • 三星浏览器
      • QQ浏览器
      • 百度浏览器
  6. 与主流浏览器非常不同,不支持
    • Opera Mini是一款优秀的产品,但除非明确针对其用户群体,否则不支持它没有太大意义
    • 如果目标是针对其用户群体,其缺乏现代功能(使其成为最低公共分母)意味着网站开发不会利用caniuse.com数据;差异太大。

依赖项

~2.7–4MB
~99K SLoC