比较CSS框架的工具

嗨,我是亚历山大。 我一直在积极研究和进行Web开发约一年。 这一切都始于删除您最喜欢的游戏的客户端并寻找指导者。 为了改善Web开发,他创建了CSS Comparator项目。 该项目的实质是根据大小以及其他流行和现代的参数比较CSS框架。 创建项目时,不追求商业目标。 本文的主要目的是接收其他Web开发人员的反馈。

这已经是我目前的第三个项目,由于它对于初学者和有经验的Web开发人员都将是有趣且有用的,所以我决定写一篇有关它的文章。

这一切始于我的同事正在寻找尺寸的CSS框架,而Google提供的第一个答案是:

图片

因此,这个想法浮出水面-创建一种产品,该产品将比较流行的CSS框架的大小和其他参数。 这个项目只有两个人-我是前端Web开发人员,另一个是我在Golang参与抓取工作的同事。 该项目的第一个原型具有相当简化的视图:

图片

与流行的替代方法不同,我们的项目有一个针对可访问性(依赖项),无依赖项(不依赖JavaScript,jQuery等)的筛选器,以及指向Gitter chat和Stack Overflow的链接。

然后项目完全交给了我。 在2019年7月上旬,工作开始了。 首要的愿望是赋予产品更富表现力的外观,当然还要增加过滤和按尺寸分类。 为了反映所需的结果,您只需要在相应的输入字段中指定所需的大小(以字节为单位):

图片

还提供单独的尺寸表:

图片

就像按大小过滤一样,按Stack Overflow上的问题数和GitHub上的星数进行过滤。 毕竟,众所周知,每个Web开发人员都花费大量时间来寻找正确的信息。 在这方面,我决定添加相关链接和论坛链接(如果存在)。 这些解决方案将帮助极大地促进和加速开发,因为所有必要的链接都在手边。 过滤将有助于在用户中找到更流行的框架。

当然,在智能手机时代,不可能不添加有关框架适应性的数据,并通过多选功能对其进行过滤:

图片

通常,可以通过以下列表示意性地描述张贴在框架卡上的信息:

  • 框架名称
  • 公司发展商
  • GitHub星
  • 可用性可访问性
  • Javascript依赖
  • 执照
  • 适应性
  • 尺寸图
  • 堆栈溢出问题数
  • 用户数Gitter聊天
  • 论坛

过滤单元本身和卡整体具有以下形式:

图片

在客户端,使用HTML5,CSS3(使用Flexbox进行布局)和纯JavaScript,而不使用第三方库和框架。 GitHub上的明星,所有大小的框架都使用Golang刮板从开放的Api中获得,并且cron-jobs每周更新一次。

图片

刮板本身的工作非常简单。 从上述json(针对其自己的每个框架)获得的GitHub上的星数数据,该数据位于Bootstrap示例中,以供参考。 大小的计算方法如下-加载CSS的dev和prod版本,然后将prod版本以gzip格式存档。

因此,我将进一步说明客户端发生了什么。

使用onChecked函数通过复选框执行过滤,该函数具有3个参数:

$ element-复选框本身
名称-过滤器名称
filter-过滤器本身。

以可访问性过滤为例,所有代码将如下所示:

const FILTER_ACCESSIBILITY = "accessibility"; function matchAll(framework) { return true; } function matchAccessibility(framework) { return framework.accessibility; } const matchStateMap = { [FILTER_ACCESSIBILITY]: matchAll, }; function match(frameworks) { const result = frameworks .filter(matchStateMap[FILTER_ACCESSIBILITY]); // other filtration return result; } function $(id) { return document.getElementById(id); } function render(list) { const views = new Array(list.length); for (let i = 0; i < list.length; i++) { const item = list[i]; views[i] = `<h2><a href="${item.siteUrl}" target="_blank">${item.name} v${item.version}</a></h2>`; } $("demo").innerHTML = views.join(""); } function onChecked($element, name, filter) { $element.addEventListener("click", function () { if ($element.checked) { matchStateMap[name] = filter; } else { matchStateMap[name] = matchAll; } render(match(frameworks)); }); } const $accessibilityCheckbox = $("js-checkbox-accessibility"); onChecked($accessibilityCheckbox, FILTER_ACCESSIBILITY, matchAccessibility); 

通过类似的功能进行排序

 let compare = null; const matchStateMap = { [FILTER_ACCESSIBILITY]: matchAll, // ... }; function match(frameworks) { const result = frameworks .filter(matchStateMap[FILTER_ACCESSIBILITY]); // other filtration // sort O(N *ln(N)), so better first match, than sort if (compare !== null) { result.sort(compare); } return result; } function sortByStars(a, b) { // DESC return b.repository.stars - a.repository.stars; } function onSort($element, sort) { $element.addEventListener("click", function () { compare = sort; render(match(frameworks)); }); } const $moreStars = $("js-sort-by-stars"); onSort($moreStars, sortByStars); 

据分析人士说,该项目的平均每日出勤量约为10个用户。 对于将来的计划,这是添加可用组件(导航栏,按钮等)的列表,然后比较它们的大小。 另外,使用所有比较的框架创建静态静态页面,并比较它们的大小和加载速度。 而且,如果该项目将很受欢迎-通过更新有关Stack Overflow的问题数和Gitter中的用户数,添加一个刮板。

Source: https://habr.com/ru/post/zh-CN466603/


All Articles