blog icon indicating copy to clipboard operation
blog copied to clipboard

一种全新的UI架构——HSEJ模式

Open wintercn opened this issue 8 years ago • 33 comments

HSEJ模式是最新研究出来的先进UI架构,它的特点是基于群众基础广泛的jQuery,学习成本极低,代码极其轻量。 它先进的理念使得它比MVC、MVP、MVVM和FLUX、REFLUX、REDUX等框架不知高到哪里去了。

首先是代码量,HSEJ模式依赖的jQuery大小仅仅34.5k,而相比之下react.js竟然达到惊人的133k。

我们先来了解一下HSEJ的名词:

  • H-HTML:就是我们写的HTML代码,这没什么好解释的。
  • S-Selector:选择器,选择器是由jQuery首创的一种非常先进的操作HTML的方法。
  • E-Event:事件,事件是jQuery的一些方法,经过高度封装之后,可以响应用户的各种操作。
  • J-JavaScript:JavaScript是jQuery的一部分功能,提供了极其强大的图灵完备的拼接字符串的能力,其中最厉害的就是$字符。$在jQuery中有九种作用,其它任何一个框架的任何函数都没有这么强大。此外,JavaScript是基于对象的,而不是面向对象的。

下面我们来看看HSEJ模式的架构图,为了对比,我放上了最近特别火的FLUX的架构图:

image

image

两张图是如此之相似,那么各位一定有一个疑惑,那就是,到底为什么这么相似?

没错,跟你想的一样,HSEJ模式随着jQuery发布就已经普及了,只是开发jQuery的大师们担心你们前端太low才没好意思提出来,React不过是最近几年的事情,谁抄谁的一目了然。

由此可见,React不过是窃取了广大jQuery开发者的智慧,改了个名字重新卖卖概念的二道贩子罢了,Facebook公司这样的人品,怎么能让它来到中国呢?

HSEJ的用户操作响应过程如下:

用户点击了HTML元素=>通过选择器和事件找到JavaScript代码=>在JavaScript中拼接HTML字符串=>通过选择器把字符串填回去

下面我们来看一段例子:

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
    <div>
      <p>
        Clicked: <span id="value">0</span> times
        <button id="increment">+</button>
      </p>
    </div>
    <script>
      $('#increment').click(function(){
        $('#value').html(parseInt($('#value').html())++)
      })
    </script>

而同样的功能,用redux来实现,则是以下代码:

    <script src="https://npmcdn.com/redux@latest/dist/redux.min.js"></script>
    <div>
      <p>
        Clicked: <span id="value">0</span> times
        <button id="increment">+</button>
      </p>
    </div>
    <script>
      function counter(state, action) {
        if (typeof state === 'undefined') {
          return 0
        }
        switch (action.type) {
          case 'INCREMENT':
            return state + 1
          default:
            return state
        }
      }
      var store = Redux.createStore(counter)
      var valueEl = document.getElementById('value')
      function render() {
        valueEl.innerHTML = store.getState().toString()
      }
      render()
      store.subscribe(render)
      document.getElementById('increment')
        .addEventListener('click', function () {
          store.dispatch({ type: 'INCREMENT' })
        })

    </script>

你说他们是不是有病?

HSEJ模式的提出标志着前端进入了超越以往客户端UI架构的全新时代来临,希望大家好好学习,节日快乐。

wintercn avatar Apr 01 '16 06:04 wintercn

:100:

ethe avatar Apr 01 '16 06:04 ethe

6666666

catboy1006 avatar Apr 01 '16 06:04 catboy1006

这个我给82分,剩下的以666的形式附上……

k-jay-wang avatar Apr 01 '16 06:04 k-jay-wang

还是你们城里人会玩

deasel avatar Apr 01 '16 06:04 deasel

高大上,是时候学起来了呢.......

Tommassissimo avatar Apr 01 '16 06:04 Tommassissimo

看成 HESJ 模式了,还以为是贺老提出来的呢

Justineo avatar Apr 01 '16 06:04 Justineo

这个模式我喜欢, 前端就要这么直接简单明了.

lealife avatar Apr 01 '16 06:04 lealife

节日愉快...

feibinyang avatar Apr 01 '16 06:04 feibinyang

哈哈哈节日快乐

Gaohaoyang avatar Apr 01 '16 06:04 Gaohaoyang

赶紧学习下 ~~~

xinglie avatar Apr 01 '16 07:04 xinglie

干得漂亮

Xujkstra avatar Apr 01 '16 07:04 Xujkstra

6666666666666666 碉堡了~ 哈哈~

mtsee avatar Apr 01 '16 07:04 mtsee

82分好吧,剩下的666

zhou-yg avatar Apr 01 '16 07:04 zhou-yg

6666666

nikoohp avatar Apr 01 '16 07:04 nikoohp

很好的解释了Facebook为什么不能来中国的原因

johnninja avatar Apr 01 '16 08:04 johnninja

光天化日之下一本道⋯⋯

HustLiuCN avatar Apr 01 '16 08:04 HustLiuCN

这个架构太先进了!!下个项目就要使用了,小伙伴们太开心了

agileago avatar Apr 01 '16 08:04 agileago

哈哈哈哈 :100:

airyland avatar Apr 01 '16 08:04 airyland

这个架构我给 :100: 分。

hotoo avatar Apr 01 '16 09:04 hotoo

哈哈哈 6666666666

kaiailu avatar Apr 01 '16 09:04 kaiailu

太简洁了,学到不少,谢谢楼主。

chaoren1641 avatar Apr 01 '16 09:04 chaoren1641

瞎说什么大实话!

kaiailu avatar Apr 01 '16 09:04 kaiailu

6666

karoo avatar Apr 01 '16 09:04 karoo

恍然大悟

but

最大的区别应该在数据、组件、通信的问题上。

jincdream avatar Apr 01 '16 09:04 jincdream

目瞪口呆.jpg

malcolmyu avatar Apr 01 '16 09:04 malcolmyu

2016年最流行模式HSEJ模式

ginny315 avatar Apr 01 '16 10:04 ginny315

。。。

VectorHo avatar Apr 01 '16 10:04 VectorHo

世界最屌的js框架 非VanillaJs莫属

l3ve avatar Apr 01 '16 11:04 l3ve

今日最佳!

hax avatar Apr 01 '16 14:04 hax

膜拜

Tankpt avatar Apr 03 '16 05:04 Tankpt