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. 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至此目录中

 

  1. 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的区别之我见的主要内容,如果未能解决你的问题,请参考以下文章

LINUX 用户及权限之我见

关于堆栈和block之我见

架构设计原则之我见2

MVVMMVVMLightMVVMLight Toolkit之我见

360和QQ大战之我见

js原型链之我见