vue和react的区别之我见
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue和react的区别之我见相关的知识,希望对你有一定的参考价值。
参考技术A react和vue都是做组件化的,整体的功能都类似,但是他们的设计思路是有很多不同的。使用react和vue,主要是理解他们的设计思路的不同。react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,所以在react中,是单向数据流,推崇结合immutable来实现数据不可变。react在setState之后会重新走渲染的流程,如果shouldComponentUpdate返回的是true,就继续渲染,如果返回了false,就不会重新渲染,PureComponent就是重写了shouldComponentUpdate,然后在里面作了props和state的浅层对比。
而vue的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听,当属性变化的时候,响应式的更新对应的虚拟dom。
总之,react的性能优化需要手动去做,而vue的性能优化是自动的,但是vue的响应式机制也有问题,就是当state特别多的时候,Watcher也会很多,会导致卡顿,所以大型应用(状态特别多的)一般用react,更加可控。
react的思路是all in js,通过js来生成html,所以设计了jsx,还有通过js来操作css,社区的styled-component、jss等,
vue是把html,css,js组合到一起,用各自的处理方式,vue有单文件组件,可以把html、css、js写到一个文件中,html提供了模板引擎来处理。
react是类式的写法,api很少,
而vue是声明式的写法,通过传入各种options,api和参数都很多。所以react结合typescript更容易一起写,vue稍微复杂。
react可以通过高阶组件(Higher Order Components--HOC)来扩展,而vue需要通过mixins来扩展
一个react高阶组件的例子:
react做的事情很少,很多都交给社区去做,vue很多东西都是内置的,写起来确实方便一些,
比如 redux的combineReducer就对应vuex的modules,
比如reselect就对应vuex的getter和vue组件的computed,
vuex的mutation是直接改变的原始数据,而redux的reducer是返回一个全新的state,所以redux结合immutable来优化性能,vue不需要。
上面主要梳理了react和vue的4点不同:
(其中第3点在vue3.0支持类式写法之后就可以去掉了)
react整体的思路就是函数式,所以推崇纯组件,数据不可变,单向数据流,当然需要双向的地方也可以做到,比如结合redux-form,而vue是基于可变数据的,支持双向绑定。react组件的扩展一般是通过高阶组件,而vue组件会使用mixin。vue内置了很多功能,而react做的很少,很多都是由社区来完成的,vue追求的是开发的简单,而react更在乎方式是否正确。
LINUX 用户及权限之我见
用户是登录系统的身份凭证,不同的用户登录系统后,能够进行的操作也是不相同的。用户的正确配置和管理,是我们管理好主机和系统的重要前提。而了解用户的各种特性,才能够帮助我们实现对用户的很好管理。
linux 系统最优秀的地方之一,就在于它的多用户、多任务环境。为了区别不同用户的操作,对不同用户有一个安全的管理机制,而关于文件的权限管理和使用,就显得尤为重要。
在这里,就linux系统里面的用户和权限,谈谈我个人的一点点认识。
一、用户相关
1. 用户的定义:
严格来讲,linux系统并不“认识”登录时所输入的帐号,它所能够确定并可以区分的,只是一组数字,即系统记录的ID 号。系统通过这一组 ID号,来判断是否为当前系统允许的合法帐号。在系统的 /etc/passwd文件中,有一个帐号和ID号的对应关系,如下图所示。只是我们方便记忆的,则是与ID号对应的帐号。
[[email protected] ~]# head -n 7 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
[[email protected] ~]# head -n 7 /etc/passwd | awk -F: ‘{ print$1"---"$3"---"$4}‘
root---0---0
bin---1---1
daemon---2---2
adm---3---4
sync---5---0
上图通过一系列命令,就把帐号和ID的对应关系给列出来了,其中的三列分别是:系统帐号、其对应的UID号、其对应的GID号。GID,即用户ID和组ID。也可以通过命令,显示用户的ID信息,如图:
[[email protected] ~]# tail -n 3 /etc/passwd
kaiaki:x:676:894:ddssdsddsdsddsffkkk:/home/kaiaki:/bin/csh
sttt:x:877:894:ddssdsddsdsddsffkkk:/home/sttt:/bin/csh
abc:x:805:893::/home/abc:/bin/bash
[[email protected] ~]# id abc
uid=805(abc) gid=893(sg) 组=893(sg),894(hehe)
由此可见,系统是通过ID的不同,来识别不同的用户的。
在 linux系统中,root帐号UID为0,1到499留给了系统帐号使用,而普通帐号则是从500到65535之间,默认顺序标识。而最新的rhel7.x中,系统帐号和普通帐号分别是1到999和1000到65535之间。
如下图,里面就有三种不同的UID。
[[email protected] mnt]# more passwd | awk -F: ‘{ print $1"---"$3}‘
root---0
daemon---2
sshd---74
tomcat---496
water---506
baicai---666
其中:root UID为0,意味管理员,daemon、sshd、tomcat UID分别是2、74、496 ,他们是系统用户,water 和baocai UID分别为506和 666 ,则是一般用户。
2. 用户和组的配置文件
1)用户相关的配置文件,主要有两个:/etc/passwd 和/etc/shadow 。
[[email protected] ~]# more /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
/etc/passwd 文件中,七个字段的内容分别为:帐号名称、密码标识位、UID、GID、用户的描述信息、用户家目录、用户登录所使用的shell信息。
[[email protected] ~]# more /etc/shadow
root:$6$Nmjl33fG$g6Q4iujJdr3QCsW1.W1mho5u05oGcpLVHpavDpF/2aw8yjnhOA1Uf7aImBh9z6hcyencwKtX3tpRqeIxdXyAx1:16871:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
/etc/shadow 文件中,九个字段的内容分别为:帐号名称、用户密码、最近更改密码日期、密码不可更改天数、密码需要重新更改的天数、密码更改前警告期限、密码过期的款型时间、帐号失效日期、系统保留。
2)用户组有关的配置文件,有两个:/etc/group 和 /etc/gshadow 。
[[email protected] ~]# head -n 5 /etc/group
root:x:0:
bin:x:1:bin,daemon
daemon:x:2:bin,daemon
sys:x:3:bin,adm
adm:x:4:adm,daemon
/etc/group 文件中,四个字段内容分别为:用户组名称、用户组密码、用户GID、用户所在的组信息。
[[email protected] ~]# head -n 5 /etc/gshadow
root:::
bin:::bin,daemon
daemon:::bin,daemon
sys:::bin,adm
adm:::adm,daemon
/etc/gshadow文件中,四个字段内容分别为:用户组名称、用户组密码栏、组管理者、用户组的帐号。
3. 用户和组的管理:
1)用户的管理:
添加用户命令: useradd
常见参数 u 用户UID 、g 用户GID、G 指定附加组、M 不建立用户家目录、m 添加用户时建立家目录、c 用户描述信息、d 指定家目录、r 指定为系统用户、s 指定用户登录时默认的shell。其中 m 默认不需要添加。
如下图所示:
[[email protected] ~]# useradd -u 991 -g hehe -G lili,liang -c usertest -s/bin/bash jack
[[email protected] ~]# tail -n 1 /etc/passwd
jack:x:991:894:usertest:/home/jack:/bin/bash
[[email protected] ~]# more /etc/group | grep jack
liang:x:890:kaiaki,sttt,jack
lili:x:891:jack
[[email protected] ~]# id jack
uid=991(jack) gid=894(hehe) 组=894(hehe),890(liang),891(lili)
上面就是添加用户jack的过程,在添加的时候,顺带指明其UID号、用户属主、其附属组、描述信息、登录shell 等信息
删除用户 userdel : 参数 r 的区别是删除时是否删除其家目录
[[email protected] ~]# ll /home/ | grep li
drwx------. 4 liang liang 4096 3月 2322:02 liang
drwx------. 4 lili lili 4096 3月 2322:02 lili
drwx------. 4 list kkk 4096 3月 2321:20 list
[[email protected] ~]# userdel liang
[[email protected] ~]# userdel lili
[[email protected] ~]# userdel -r list
[[email protected] ~]# ll /home/ | grep li
drwx------. 4 890 liang 4096 3月 2322:02 liang
drwx------. 4 891 lili 4096 3月 2322:02 lili
修改用户属性命令: usermod
常见参数 u 、g、 G 、d 、l 、s 、L 、U 。
结合上面的举例很容易理解,所以这里只解释说明下L 、U两个选项 ,分别是锁定和解锁帐号,l 为修改帐号名称。其他的就不做解释了。
修改密码命令: passwd ,语法为:passwd 或者 passwd username。很简单的应用,这里就不举例子了
2)相对于的组的管理:
用户组相关的常见操作,即添加、删除、修改。具体命令对应为groupadd 、groupdel 、groupmod,gpasswd 。
groupadd 常见参数 g 、r ,分别是指UID 和系统组之意。
groupmod 常见参数 g 、n ,分别为修改UID和组名称。
gpasswd 常见参数 a 、d ,意思分别为加入某个组和从组中删除。
具体看下面的例子说明:
[[email protected] ~]# tail /etc/group
tom:x:667:baicai,ak,stl,sg,hehe
op:x:889:stl,sg,hehe
stl:x:892:
sg:x:893:kaiaki,sttt,ccc
hehe:x:894:abc
abc:x:897:
[[email protected] ~]# id abc
uid=805(abc) gid=893(sg) 组=893(sg),894(hehe)
[[email protected] ~]# gpasswd -a abc stl
Adding user abc to group stl
[[email protected] ~]# id abc
uid=805(abc) gid=893(sg) 组=893(sg),892(stl),894(hehe)
[[email protected] ~]# id stl
uid=892(stl) gid=892(stl) 组=892(stl),667(tom),889(op)
[[email protected] ~]# gpasswd -d stl op
Removing user stl from group op
[[email protected] ~]# gpasswd -d stl tom
Removing user stl from group tom
[[email protected] ~]# id stl
uid=892(stl) gid=892(stl) 组=892(stl)
二 、权限相关
1. 权限的定义(这里指普通权限)
Linux系统根据文件的访问者不同,将访问方式分为:owner、group、other (简写为u、g、o),且分别都对应有read(读)、write(写)、excute(执行)的权限(分别简写为r、w、x)。
如图所示:
[[email protected] mnt]# ll
-rw-r--r--. 1 root root 46328 3月 2401:48 install.log
-rw-r--r--. 1 root root 0 3月 24 01:49 linuxtest
-rw-r--r--. 1 root root 461 3月 24 01:34 passwd
-rw-r--r--. 1 root root 0 3月 24 01:49 zero.repo
三种权限对于文件和目录,有不同的意义。
对于文件:r:可获取文件数据
w:可修改文件数据
x:可将此文件运行为进程
对于目录:r:可使用命令获取其下的所有文件列表
w:可修改此目录下的文件列表,即可在此目录下创建或删除文件
x:可以使用 ls 命令来获取文件详细属性信息,也可cd至此目录中
2. 权限的管理
权限相关的操作命令主要有两个:chmod 、 chown
chmod :更改文件的 9 个属性,根据权限表示法,有两种方式
chmod u,g,o,a +-= rwx filename 可以称为字母表示法
chmod 644 filename 可以称为数字表示法
两种方法都可以,看个人习惯用那种授权方法了。下面分别说明下两种的方法:
[[email protected] mnt]# ll
-rw-r--r--. 1 root root 0 3月 29 12:06 kkk
-rw-r--r--. 1 root root 37 3月 2908:36 xinxi.txt
-rw-r--r--. 1 root root 0 3月 24 01:49 zero.repo
[[email protected] mnt]# chmod 660 kkk
[[email protected] mnt]# chmod a+x xinxi.txt
[[email protected] mnt]# chmod g+x zero.repo
[[email protected] mnt]# ll
-rw-rw----. 1 root root 0 3月 29 12:06 kkk
-rwxr-xr-x. 1 root root 37 3月 2908:36 xinxi.txt
-rw-r-xr--. 1 root root 0 3月 24 01:49 zero.repo
chown :更改文件拥有者。拥有者这里既指文件的属主也指文件的属组。
其语法为: chown owner:group filename。当后面为目录时,一般会加上 R 参数,指递归修改。可以单独指定属主或属组,也可以同时两者都指定。
[[email protected] mnt]# ll
-rw-rw----. 1 root root 0 3月 29 12:06 kkk
-rwxr-xr-x. 1 root root 37 3月 2908:36 xinxi.txt
-rw-r-xr--. 1 root root 0 3月 24 01:49 zero.repo
[[email protected] mnt]# chown xww: kkk
[[email protected] mnt]# chown :lg zero.repo
[[email protected] mnt]# chown lg:xww xinxi.txt
[[email protected] mnt]# ll
-rw-rw----. 1 xww xww 0 3月 2912:06 kkk
-rwxr-xr-x. 1 lg xww 37 3月 29 08:36 xinxi.txt
-rw-r-xr--. 1 root lg 0 3月 24 01:49 zero.repo
上面就是权限的一般应用的情况了,关于权限方面,还有其特殊权限,以后再作说明了。
本文出自 “惹尘埃” 博客,请务必保留此出处http://liangww.blog.51cto.com/9468518/1760104
以上是关于vue和react的区别之我见的主要内容,如果未能解决你的问题,请参考以下文章