most, 超高性能反应编程

分享于 

9分钟阅读

GitHub

  繁體 雙語
Ultra-high performance reactive programming that works in DOMless JS environments
  • 源代码名称:most
  • 源代码网址:http://www.github.com/cujojs/most
  • most源代码文档
  • most源代码下载
  • Git URL:
    git://www.github.com/cujojs/most.git
    Git Clone代码到本地:
    git clone http://www.github.com/cujojs/most
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/cujojs/most
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    
    ________________________________
    
    
    ___ |//_ __ _ ___/__ __/
    
    
    __/|_//_///____ __/
    
    
    _/////_//____//_/
    
    
    /_//_/____/______//_/
    
    
    
    
    用于React性程序的

    Greenkeeper badge

    Build StatusJoin the chat at https://gitter.im/cujojs/most

    Most.js 是一个面向React性编程的工具包。 它有助于在数值和事件,比如 WebSocket消息,DOM事件,DOM事件和不存在副作用,副作用和可变共享状态的情况下对数据流进行异步操作。

    它具有超高性能。低架构。api,可以轻松地从现有的源代码中创建事件流。

    了解更多

    简单示例

    下面是一个简单的程序,它显示了添加两个输入的结果。 结果是React性和更新性,无论什么时候,只要输入更改。

    首先,输入的HTML fragment 和显示活动结果的位置:

    <form>
     <inputclass="x"> + <inputclass="y"> = <spanclass="result"></span>
    </form>

    使用 most.js 使它的具有React性:

    import { fromEvent, combine } from'most'constxInput=document.querySelector('input.x')constyInput=document.querySelector('input.y')constresultNode=document.querySelector('.result')constadd= (x, y) => x + yconsttoNumber=e=>Number(e.target.value)constrenderResult=result=> {
     resultNode.textContent= result
    }exportconstmain= () => {
     // x represents the current value of xInputconstx=fromEvent('input', xInput).map(toNumber)
     // y represents the current value of yInputconsty=fromEvent('input', yInput).map(toNumber)
     // result is the live current value of adding x and yconstresult=combine(add, x, y)
     // Observe the result value by rendering it to the resultNoderesult.observe(renderResult)
    }

    更多示例

    你可以在示例 repo 中找到示例 上面 和其他示例。

    要求

    大多数要求使用 ES6 Promise。你可以使用最喜欢的polyfill,例如信条蓝鸟,蓝鸟,es6-promise,在还没有具备良好处理报告功能的平台上。

    安装

    作为模块:

    
    npm install --save most
    
    
    
    
    // ES6import { /* functions */ } from'most'// orimport*asmostfrom'most'
    // ES5var most =require('most')

    作为 window.most:

    
    bower install --save most
    
    
    
    
    <scriptsrc="most/dist/most.js"></script>

    通过cdn作为库:

    <!-- unminified --><scriptsrc="https://unpkg.com/most/dist/most.js"></script>
    <!-- minified --><scriptsrc="https://unpkg.com/most/dist/most.min.js"></script>

    电子邮件支持

    当你在代码中导入 most.js 时,Most.js 将使用开箱即用的本地typings插件来处理该文件。 你无需在tsconfig中手动链接外部 d.ts 文件。

    Most.js 对本机承诺有依赖性,因此你的安装程序中必须提供Promise的类型定义:

    • 如果你的tsconfig目标是 ES6,那么你不需要做任何事情,因为默认情况下,by将包含。
    • 如果你的tsconfig目标是 ES5,你需要提供你自己的承诺定义。 例如 es6-shim.d.ts

    基于的互操作性

    Promises/A+Fantasy Land

    Most.js 流是与承诺/a+和ES6兼容的,承诺。 他们还实现了 Fantasystatic Land SemigroupMonoidFunctorApplyApplicativeChainMonad

    实时React程序

    React性程序是一个重要的概念,它提供了许多优势: 它自然处理异步,并提供处理复杂数据和时间流的模型,同时减少了使用共享可变状态的必要性。 它有许多应用程序:交互式ui和动画。客户端服务器通信。机器人。物联网。传感器网络等。

    用于React性编程的most.js?

    高性能

    most.js的主要焦点是性能。 测试结果表明它在这个领域达到了目标。 我们希望通过发布这些数字并展示什么是可能的,其他库也会改进。

    模块架构

    Most.js 是高度模块化的。它是内部 Stream/Source/Sink 架构和 api,它简单。简洁和。 组合器完全按照这个API实现,不需要使用任何 private 细节。 这使得在外部(。IE 中的,例如) 中实现新的组合器变得很容易,同时也保证它们仍然是高性能的。

    简单

    除了使组合器减少"明显正确"之外,复杂性还可能导致性能和可维护性问题。 我们觉得一个简单的实现将导致更稳定和性能更高的库整体。

    插件集成

    Most.js 与语言特性,如 promise,迭代器,生成器和异步生成器。

    承诺

    承诺是对异步React性流的自然。 同步"顺序"与"值"的关系清晰,且异步模拟需要清晰。 通过采用序列和值的概念并将它们提升到异步世界,显然减少异步序列应该会产生一个承诺。 因此,当单个值是自然同步模拟时,most.js 使用承诺。

    Most.js 可以与ES6无缝互操作,承诺/a+承诺。 例如减少流将为最终结果返回一个 promise:

    import { from } from'most'// After 1 second, logs 10from([1, 2, 3, 4])
    . delay(1000)
    . reduce((result, y) => result + y, 0)
    . then(result=>console.log(result))

    你还可以从promise创建流:

    import { fromPromise } from'most'// Logs"hello"fromPromise(Promise.resolve('hello'))
    . observe(message=>console.log(message))
    生成器

    从概念上讲,生成器允许编写像iterable序列一样的函数。 生成器支持标准的ES6 迭代器接口插件,因此可以使用标准 for of 或者迭代器API的next() 来迭代它们。

    Most.js 与ES6生成器和迭代器互操作。 例如你可以从任何 ES6 iterable创建一个事件流:

    import { from } from'most'function*allTheIntegers() {
     let i=0while(true) {
     yield i++ }
    }// Log the first 100 integersfrom(allTheIntegers())
    . take(100)
    . observe(x=>console.log(x))
    异步生成器

    你还可以从异步生成器创建事件流,生成承诺的生成器有:

    import { generate } from'most'function*allTheIntegers(interval) {
     let i=0while(true) {
     yielddelayPromise(interval, i++)
     }
    }constdelayPromise= (ms, value) =>newPromise(resolve=>setTimeout(() =>resolve(value), ms))// Log the first 100 integers, at 1 second intervalsgenerate(allTheIntegers, 1000)
    . take(100)
    . observe(x=>console.log(x))

    相关文章