到前端的框架,目前主流最受欢迎三大框架莫属于Vue、Angular、React。但是在面对90%的中小企业为什么会选择使用vue呢?
【vue到底是什么呢】
首先Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。
MVVM分为三部分:View(页面DOM)、ViewModel(监控者)、Model(数据)
所以简而言之:Vue.js是一个构建数据驱动的系统 web 界面的渐进式框架。Vue.js 目标是通过尽可能简单地实现 API 实现响应的数据绑定和组合的视图组件。核心是一个响应的数据绑定系统。
【Vue具体的特点和优点有哪些呢】
响应式编程:在使用 Vue 实现 SPA,响应式编程是一套最核心的理念,整个系统根据数据对象对页面进行反向渲染,让站点避免结构混乱的问题。
组件化:一个站点由不同的多个组件组成, 当数据发生变化,最小颗粒的更新变化的部分,不会整个页面发生变化,从而大大提高了性能。同时每个组件都有自己独立的CSS、JS、模板(可理解为就是我们所熟悉的html)
vue的优势
轻量级的框架+指令:它通过双向数据绑定把 View 层和 Model 层连接了起来.实际的DOM封装和输出。
双向数据绑定:当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。
组件化开发:就是把页面拆分成多个组件,每个组件依赖的 CSS、JS、模板、图片等资源放在一起开发和维护。
单页面路由:单页是把原本的多个页面以组件的形式集成在一个页面中,页面跳转时由vue路由到目标页面,分别加载不同的组件,而页面不会刷新,路由在更新
虚拟dom:在Vue的底层实现上, Vue将模板编译成虚拟DOM渲染函数。结合Vue自带的响应系统,在状态改变时 ,Vue能够智能地计算出重新渲染组件的最小代价并应到DOM操作上。
渐进式框架:用你想用或者能用的功能特性,不想用的部分功能可以先不用,来完成一个开发。
数据和结构的分离:最小粒度更新,vue每次更新会进行虚拟dom和屏幕已有dom对比,只更新有变化的部分,性能更高
插件化:插件的功能范围没有严格的限制,满足大多插件可以和vue配合一起使用。
【Vue的缺点有哪些呢】
但是并不是vue.js 只有优点,而没有缺点,任何东西都没有十全十美的东西!
支持IE8以下
社区可能没有Angular和React那么丰富
Vue 不缺入门教程,可是很缺乏高阶教程与文档。同样的还有书籍
因为是单页面应用,不利于seo优化
初次加载时耗时多
【vue与Angular、React的异同】
为什么在90%企业选择vue.js,而不是Angular和React呢?
首先vue.js作者尤雨溪在开发vue.js的时候,不光借鉴了Angular和React的优势,同时还保留开发了自己独有的优点!快效地完成一个项目的开发,节约成本,这无疑对于中小企业来讲是一大福利,节省了项目开发的周期以及开发成本!
那么我们来看一下vue 与 Angular和React到底有哪些相同点和不同点呢?
相同点
1、都支持指令,内部指令和自定义指令
2、都支持过滤器,内置过滤器和自定义过滤器
3、都支持双向绑定
4、都不支持低端浏览器
不同点
1、Angular学习成本高,增加了依赖注入,Vue本身提供的API比较简单,直观
2、在性能上,Angular依赖对数据做脏检查,所以watcher越多越慢
相同点
1、React采用了JSX语法,Vue也可使用特殊文件格式
2、都不内置Ajax,Router等功能的核心包,而是以插件的形式加载
3、在组件开发中都支持mixins的特性
4、利用虚拟DOM实现快速渲染
不同点
1、vue在模板中提供了指令,过滤器等,可以非常方便地操作DOM
2、渲染过程不同
3、vue实现了数据的双向绑定,react数据流动是单向的
软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,非常广泛。这样开发出完善健壮的软件,对程序员的要求将会非常高。如果采用成熟,稳健的框架,那么一些基础的通用工作,比如,事物处理,安全性,数据流控制等都可以交给框架处理,那么程序员只需要集中精力完成系统的业务逻辑设计,可以降低开发难度。
CSS 框架是一系列 CSS 文件的集合体,包含了基本的元素重置,页面排版、网格布局、 表单样式、通用规则等代码块,用于简化web 前端开发的工作,提高工作效率。
其实有些朋友在做项目的时候,首先会选择采用原始方法写CSS。 在项目之中最让人头疼的就是类的命名,大多数人会根据功能去命名,这就造成了很多的冗余,相同的组件可能写很多次。简单举一个例子,如下图,个人中心的登录界面。
很多人包括我刚开始的时候可能会选择下面的类命名及布局方式,其通用性非常差
然而了解 Bootstrap 的人应该一眼就发现上图就是一个 media 对象,无非一些小细节需要调整一下
为了让文字与图片居中对齐,我们可以使用 Bootstrap 的 .media-middle 的辅助类。如果在工作中还要根据需求自定义一些辅助类调整细节,当然这是一个移动端的例子,可以选择移动端框架相关的 media 对象。
另外,在项目改版的时候,原始的方法的修改更是惨不忍睹,可以说是噩梦,冗长的 CSS 文件、混乱的功能划分、类名、色值等等。最后也只能硬着头皮一点一点修改。那一刻才体会到框架的意义以及前端工具的重要性。从工作中总结出,要么你可以熟练的使用某一个框架,要么就自己实现一个框架。
目前市面上前端框架主要分重量级与轻量级。重量级主要有 Bootstrap、Semantic、UIkit、Foundation 等,轻量级有 Pure、Skeleton、Miligram 等。经常关注前端动态的工程师会发现轻量级框架每年都层出不穷。在上面提到的主流轻量级框架之外还有很多类似的框架。我一直问自己,为什么要重复造轮子。经过研究,我发现这些轻量级框架其实大多都不能胜任工作需求,而且模仿的痕迹很重,基本上都或多或少的有 Bootstrap 的影子。那么这些轻量级框架有没有意义呢?当然有。但是就我个人观点,选择轻量级框架反倒不如自己实现一个框架。因为大多轻量级框架就像是工作总结,是根据自己的业务需求实现的。所以大多不具有通用性。
前端框架的对比主要以 Bootstrap、Semantic、UIkit 为主,因为我个人感觉这三个最具有代表性,而且设计风格各有特色。Foundation 也有很多大公司在用,但以我个人观点,无论是框架的易用性还是设计风格,相比其它几个框架稍逊一筹。
其中 Bootstrap 和 Semantic 是面向对象的最好体现。
我先说一下 Bootstrap 的优势,不是设计风格,不是模块,不是特效,而是栅格,响应式栅格。Bootstrap 的栅格在与其它框架对比中占有绝对优势,无论是栅格的划分还是类名的风格都堪称经典。如果读者有心看一下 Bootstrap 的 Less 源文件,就会感受到 Bootstrap 对于响应式栅格的独具匠心。其实在 Bootstrap 之前也有很多栅格方案,但是给人的感觉就是不够利索,类名繁琐不好记。而后来的很多框架,尤其轻量级的框架大多都有 Bootstrap 的影子。
下面我们通过对比几个框架的栅格和按钮来看一下类命名的策略。
Bootstrap
Semantic
FFoundation
UIkit
通过上面的对比,大家应该已经发现了这些框架的命名策略的不同。不可否认,Bootstrap 的命名最经典。
之前在网上看到有人讨论关于框架的易用性,有人说 Bootstrap 的类名太长,然而通过上面几个框架的对比,Bootstrap 的类并不繁琐,而且用预处理器编写框架时嵌套会比较灵活。
Semantic 的类名最简洁,通过多个定语的修饰组成一句话,确实很有意思。但是过多的修饰类在编写框架时会稍显凌乱,有利有弊,因人而异吧。
Foundation 的栅格应该是最丰富的,策略上类似 Bootstrap,只是对公共属性进行了拆分,大家也可以看看其中的具体细节。
UIkit 和 Pure 的策略相同,都加了前缀以区分其他框架,但是很显然类名过于冗长了。我在编写框架时也这样想过,但是最终放弃了这种方式。
CSS 预处理器早已不是什么新鲜事,但是真正能够在工作中运用的人有多少呢?熟练使用预处理器特性的人又有多少呢?
我之前工作的时候也没有用预处理器,因为不用,所以也意识不到预处理器的好处。主要是觉得麻烦,因为要使用编译器编译一下,还不如直接写 CSS 方便。但是在项目维护的时候就意识到预处理器的好处。后来在几个项目中尝试了预处理器,但是对于模块化的写法不太明确。预处理器作为工具,可以实现模块化编写 CSS,那么应该如何划分模块?另外,预处理器有很多特性,但是大多数人刚开始只用到变量和嵌套,其它的特性几乎很少用到。我相信在自己动手实现一个轻量级框架的过程中,我们可以对预处理器有一个全面的了解。
目前流行的预处理器有 Less,Sass,Stylus 三个,选择哪个完全是看自己的习惯。我最开始因为 Bootstrap 了解的 Less,但是因为习惯选择了 Sass,其次 Sass 的功能要更全面一些。
无论是工作还是自己写项目,都要搭建一个项目环境,也就是安装一系列的 npm 包。相比刀耕火种的开发方式,使用工具开发的前期准备过程稍显麻烦,然而一旦环境建好,后期的开发将会游刃有余。
Miligram 这个轻量级框架在 Github 上有很高人气,但是说实话,用处并不大。不过这个框架的构建方式非常值得学习。虽然 CSS 对于很多人来说很简单,但是真要去写一个框架,还是非常棘手,这时候就需要借鉴一些优秀的框架。
编写框架大致会用到的 npm 如下:
其实最主要的就是一个 node-sass,其它的都是辅助 CSS 文件的生成修改,大家感兴趣的话可以去 npm 官网搜索这些插件,了解具体用法,如有不懂可以给我留言,我就不啰嗦了。
终于到了本篇文章的重头戏。
大多数的轻量级框架只是 CSS 框架,不涉及 JS 部分,主要用于网页的布局。我之所以打算自己编写框架,是因为工作中重复的东西太多,通过框架可以很好的将这些零散组件整合到一起。另一方面,写个小项目,学点新知识是一件趣事。
编写框架的第一步就是要确定框架应该包含哪些模块。因为是轻量级框架,所以模块肯定没有重量级框架那么全面,只有核心的一些组件。通过比较一些轻量级框架以及工作总结,大致常用的模块包括栅格、媒体、按钮、排版、表单、表格、面板以及辅助工具。
在常用的这几个组件中,需要重点关注的是栅格、表单及面板,媒体组件也很重要,但是自由发挥的空间不大,我直接用了 Bootstrap 的媒体组件。
首先是类命名的层次与结构。类命名一直是我比较纠结的地方,刚开始工作的时候为了起一个见名知意又简洁的类名总是抓耳挠腮。我在编写框架时尽量避免与 Bootstrap 的类名重叠,但也不能完全避免。对比其他框架会发现,这种情况不可避免的会出现,毕竟类名会有一定的规律性以及层次性。在这一点上我比较喜欢 Bootstrap 的风格。下面和 Bootstrap 的表单做一个对比。
Bootstrap 的表单结构及类名
--div.form-horizontal
--div.form-group
--label.control-label
--input.form-control
Snack 的表单结构及类名
--div.form-row
--div.form-item
--label.form-label
--input.form-field
这个表单结构整体而言还算不错,只是个别地方需要修改。有一些框架不给 input 等元素起类名,而是给父元素一个类名,个人对这种做法表示疑问,不起类名会降低框架编写及使用的灵活性。
第二个策略是组件的修饰,比如按钮及面板都存在多个语境(颜色、大小等),在这一点上我编写框架时做了一些简化,风格上有些 Semantic 的影子。
关于修饰类的策略是一个仁者见仁智者见智的问题,至于哪种方法更好,还需要在编写框架的过程中摸索。
任何框架必须建立在栅格的基础上才能灵活布局。我在前面提到了 Bootstrap 的精华就是栅格系统。栅格系统的编写需要使用预处理器的循环功能,否则就要做无谓的重复劳动了。
栅格的使用和 Bootstrap 是一样的,除了 12 列栅格外,10 列栅格以及均分栅格都要添加 .cols- 类
这个栅格并没有响应式,只有一个断点,小屏手机上的话所有栅格都会单行显示。一方面,这样的设计符合大多数轻量级框架的初衷;另一方面,我打算再写一个针对移动端的框架,毕竟 Web 端和移动端的风格差距较大,按照业务需求分开会更好。不过最近我更改了源文件,为响应式预留了扩展方式。
在上面的命名策略中已经展示了 Snack 表单的基本结构,基本表单除了结构之外,样式上并没有太多可以讨论的地方。在此说一下表单中 checkbox 的结构调整,先看一下 Bootstrap 的 checkbox 结构。
以上两种结构不能有偏差,稍有偏差样式就会错乱,灵活性较差。其次我在想两种结构能不能整合在一起,增强灵活性。想了很久,找到了方法,Snack 结构如下:
也可以将样式直接加到 label 标签上。另外,如果将 input 移到 label 标签外也是没有问题的,如下:
这种结构有一个好处,就是可以自定义
这种结构有一个好处,就是可以自定义 input 样式,详见下面的 CodePen 的 scss 文件。radio 的设置和 checkBox 是一样的。
辅助类是一系列类的组合,比如字号大小、颜色值、padding、margin 以及左右浮动等。在一些 Bootstrap 搭建的后台管理系统中尤为常见,这样布局起来就会比较灵活。以下是一个边框的辅助类。
对编程感兴趣,想了解更多的编程知识,关注头条号一起玩转编程
更多编程资讯、干货持续更新中~
者 | Tim Anderson
译者 | 王强
策划 | Tina
AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!
用于扩展 HTML 规范的 Htmx 项目发布了 2.0 版,这是该项目自 2020 年 11 月 发布 1.0 版以来的第一个主要版本。
Htmx 2.0 取消了对 Internet Explorer 的支持,并将扩展项移出了核心存储库,这样每个扩展都可以按照自己的节奏发布更新了。新版本还删除了一些已弃用的属性,并将 HTTP DELETE 请求更改为使用参数。
新版还加入了一些新特性,包括 htmx.swap() 方法,该方法用新内容替换现有内容。它替换并改进了现有的内部 selectAndSwap() 方法。新版还改进了与 Web 组件、可重复使用的自定义元素的集成。
新版发布博文解释说,为了避免破坏现有项目,1.x 版本将在 NPM(节点包管理器)中继续标注为为“latest”,2.x 还是“next”,直到 2025 年 1 月 1 日为止。迁移到 2.0 版并不困难,但根据迁移指南,用户可能需要做一些工作。
Htmx 是一种新的前端开发方法,侧重于 HTML 而非 JavaScript(尽管它是作为 JavaScript 库实现的)。Htmx 是从之前的一个项目 intercooler.js 发展而来的,后者是由 Htmx 发明者 Carson Gross 于 2013 年创建。这两个项目的灵感都来自于这样一种观点:HTML 的特性一直因为行业对 JavaScript 框架的关注而被限制住了,而 JavaScript 框架的复杂性却一直在增长。Gross 在 2020 年推出 1.0 版时写道:“HTML 导向的 Web 开发范式被抛弃,不是因为超文本是个坏主意,而是因为 HTML 没有足够的表达能力。htmx 旨在解决这个问题,并让你可以使用 Web 的原始超文本模型实现许多常见的现代 Web UI 模式。”
Htmx 现在支持包括异步请求、CSS 转换和使用 HTML 属性的 WebSocket 通信在内的特性。
尽管 Htmx 仍然不如 React 或 Angular 等框架那么出名,但它还是收获了开发人员的赞赏。之前就有人提到,“我绞尽脑汁想找出一个没有过度设计的 js 框架,找到 htmx 让我非常高兴”。另一个人则表示“Htmx 简直太棒了。我们正用它来完成一个重大项目。”
Gross 参与了 Hacker News 上的讨论并回答了问题。有人问他,是否在设法将 Htmx 的一些特性推向 HTML 标准?“我们正在与 Chrome 开发人员讨论这些想法,我持谨慎乐观的态度”,Gross 说。
Htmx 使用的是 XMLHttpRequest,而非更新、更强大的 fetch API。有人问,团队是否考虑过改用 fetch?“看过了,不幸的是 fetch() 和 xhr 有一组不相交的特性(特别是 xhr 的上传进度),所以我们决定不碰它”,Gross 回答道。
该项目在 GitHub 上根据 Zero-Clause BSD 许可开源。
原文链接:
https://devclass.com/2024/06/18/htmx-2-0-released-aims-to-replace-complex-javascript-frameworks-with-easily-understood-html-attributes/
声明:本文为 InfoQ 翻译,未经许可禁止转载。
原文链接:Htmx 2.0 发布:用易懂的 HTML 属性取代复杂 JavaScript 框架_架构_InfoQ精选文章
*请认真填写需求信息,我们会在24小时内与您取得联系。