Any application that can be compiled to WebAssembly, will be compiled to WebAssembly eventually. -- Ending's law JavaScript诞生起到现在已经成为最流行的编程语言(之一),背后正是由Web及相关技术发展所推动的。JS应用正在变得越来越复杂(各种前后端技术、扩展到了手机APP、桌面),但这也暴露出了JS的问题: 语法灵活导致开发大型项目困难 性能在一些场景下不如C/C++等其他语言 一些公司研发了各种框架/语言/工具来尝试补救,比较有名的有微软的TypeScript(强类型,提升代码健壮性)、Google的Dart(新的虚拟机直接运行Dart提升性能),Firefox的asm.js(JS 的子集,引擎针对性能优化)。 那么,WebAssembly,于2015年诞生,2018年发布了1.0版本,被预言为未来的标准,现在已经被4大浏览器(FF,…
Architecture(架构)一词源于建筑学,指建筑物在大尺度上是如何靠内部支撑物相互结合而稳固构造的方式 Architect(架构师)是为满足软件设计目标而在较大尺度上进行整体构思的角色 -- 架构、架构师的定义 建议读本文前先找几本关于Microservice的书阅读一下,我的Slack bookshare里面有几本。 相比设计思想一脉相承的SOA(Service Oriented Architecture),Microservices 是一种把服务分解到更细粒度,松耦合的架构风格。 使用微服务,你的代码将被分解为独立的服务,而这些服务可以用不同的语言开发、部署在不同的地方、作为单独的进程运行。这样的架构风格提供了更高的模块化,使程序更易于开发、测试、部署,最重要的是,更改和维护。(和敏捷开发契合度很高) 市面上有很多微服务的框架,Java的有Spring Cloud和Dubbo(不推荐,缺少很多组件且曾经多年没人维护,使用老旧的RPC),NodeJS也有Seneca和Moleculer可选。不过对于有理想和追求的程序员来说,有什么比自己亲手搭建一个能使自己更了解这种架构呢?(只知道调用API,调整别人的配置有什么意思!) 搭建前的一些技术decision: 微服务的通信全部基于REST(REST服务的搭建不是重点,为了省代码,使用我的小框架@jinyexin/core)…
如果你使用的是Typescript>1.7,或者NodeJS>7.6, 那么你就已经可以使用新的async/await语法来部分代替原来的promise写法了。 先来看一个最简单的例子 Promise写法: doSomethingWithPromise(): Promise<string> { return Promise.resolve("success"); } doSomethingWithPromise().then(result=>console.log(`result is ${result}`));// result is success aysnc/await写法: async doSomething(){ return Promise.resolve("success"); } let result = await doSomething(); console.log(`result is ${result}`);// result is…
如何理解NodeJS (二)写好异步代码 链接:(一)基本原理 上篇说到,得益于异步的机制,NodeJS在拥有卓越性能的同时,也会使逻辑的实现变得更复杂和难于理解。 首先,其实NodeJS也是能实现blocking的代码的,比如读取一个文件: var fs = require("fs"); var contents = fs.readFileSync("data.txt", "utf8"); console.log(contents); console.log("done"); 这样写的输出结果就是先读取打印文件的内容,再输出done. 当然,这样就失去了使用NodeJS的优势,而且,绝大部分的库(比如文件的读取,数据库的操作等)都是使用异步机制,并且不提供类似fs的sync同步方法,而一般的Callback写法应该是这样的: var fs = require("fs"); fs.readFile("data.txt", "utf8"…
如何理解NodeJS (一)基本原理、优势、劣势等 用NodeJS相关技术作为项目的主平台开发已一年有余,写个小文章谈一下如何更好的理解NodeJS。 要理解NodeJS,就必须看看它和其他的Java,C#写的服务器有何不同。 如果你Google一下的话,就会发现很多类似这样的文章:w/1M concurrent connections! 或者这样的:600k concurrent websocket. 而Java服务器,在没有用任何工具的情况下大概一个服务器能撑500-1000个并发。(除非上和NodeJS原理相似的netty) 为什么NodeJS能在默认单线程的情况下实现如此高的并发呢?这和NodeJS的三大特点: Single threaded Event Loop Non-blocking I/O 是分不开的。 举个具体的比喻:我们传统的程序处理方式就和去银行办事情一样,我们手里拿着几件要办的事情来到银行。从门口的机器里面拿到一个号,一般有多个窗口在办业务(多线程),当叫到我们的号时,我们去特定的窗口把我们要办的事情都办完(阻塞性),然后下一个人。如下图: (一家拥有3个柜台/服务员的银行) 现在,更高效的NodeJS银行开张了,去里面办事是一种什么体验呢?…