fibjs
2020-02-27 197浏览
- 1.Javascript on Fiber @孢⼦子响⻢马 2014.10.25
- 2.什么是 fibjs? • 服务器端 Javascript 开发 • 基于 Google v8 引擎构建 • 完全⾮非阻塞,fiber 驱动,拒绝回调,类似 goroutine • CommonJS 模块系统 • 80,000+ ⾏行 c/c++ 代码,充分挖掘多核性能 • 27 个基本模块,覆盖常⻅见服务器应⽤用场景
- 3.27 个内置模块
- 4.82 个公开对象类型 object + dispose() + toString() + toJSON() + valueOf() Image + width + height + format + type + colorsTotal + transparent + alphaBlending Buffer + operator[] + length + Buffer() + Buffer() + Buffer() + resize() + write() + write() + write() + readUInt8() + readUInt16LE() + readUInt16BE() + readUInt32LE() + readUInt32BE() + readInt8() + readInt16LE() + readInt16BE() + readInt32LE() + readInt32BE() + readInt64LE() + readInt64BE() + readFloatLE() + readFloatBE() + readDoubleLE() + readDoubleBE() + writeUInt8() + writeUInt16LE() + writeUInt16BE() + writeUInt32LE() + writeUInt32BE() + writeInt8() + writeInt16LE() + writeInt16BE() + writeInt32LE() + writeInt32BE() + writeInt64LE() + writeInt64BE() + writeFloatLE() + writeFloatBE() + writeDoubleLE() + writeDoubleBE() + slice() + hex() + base64() + toString() + toString() Expect Cipher DbConnection + name + keySize + ivSize + blockSize DBRow + close() + begin() + commit() + rollback() + execute() + execute() + format() + Cipher() + Cipher() + Cipher() + paddingMode() + encrypt() + decrypt() + operator[] + operator[String] Digest + size + update() + digest() + digest() + to + be + been + is + that + and + have + with + at + of + same + not + deep + ok + true + false + null + undefined + function + object + array + string + number + boolean + exist HttpCollection GridFS Fiber Function + caller + join() + start() + files + chunks + retrieve() + store() + store() + exists() + remove() + operator[String] Handler + invoke() + clear() + has() + first() + all() + add() + add() + set() + set() + remove() HttpCookie + name + value + domain + path + expires + httpOnly + secure HttpUploadData + fileName + contentType + contentTransferEncoding + body + HttpCookie() + HttpCookie() + parse() + match() + a() + an() + equal() + eql() + above() + greaterThan() + least() + below() + lessThan() + most() + property() + property() + closeTo() + getData() + save() + save() + colorAllocate() + colorAllocate() + colorAllocateAlpha() + colorAllocateAlpha() + colorClosest() + colorClosest() + colorClosestHWB() + colorClosestHWB() + colorClosestAlpha() + colorClosestAlpha() + colorExact() + colorExact() + colorExactAlpha() + colorExactAlpha() + colorResolve() + colorResolve() + colorResolveAlpha() + colorResolveAlpha() + colorDeallocate() + clip() + getPixel() + getTrueColorPixel() + setPixel() + setThickness() + line() + rectangle() + filledRectangle() + polygon() + openPolygon() + filledPolygon() + ellipse() + filledEllipse() + arc() + filledArc() + fill() + fillToBorder() + colorReplace() + clone() + resample() + crop() + flip() + rotate() + convert() + copy() + copyMerge() + copyMergeGray() + copyResized() + copyResampled() + copyRotated() Redis MongoCollection Int64 + hi + lo + Int64() + Int64() + Int64() + Int64() + equal() + compare() + shiftLeft() + shiftRight() + and() + or() + xor() + add() + sub() + toNumber() + toString() List LevelDB Message LruCache + operator[] + length + has() + get() + mget() + set() + mset() + remove() + remove() + forEach() + between() + begin() + commit() + close() + List() + resize() + push() + push() + pop() + slice() + concat() + every() + filter() + forEach() + map() + toArray() + size Lock + LruCache() + clear() + has() + get() + get() + set() + put() + put() + remove() + isEmpty() + Lock() + acquire() + release() + value + params + result + body + length + stream + response Map + size + operator[String] + Map() + clear() + has() + get() + put() + put() + remove() + isEmpty() + Message() + read() + readAll() + write() + clear() + sendTo() + readFrom() PKey + operator[String] + find() + findOne() + findAndModify() + insert() + insert() + save() + update() + update() + remove() + runCommand() + runCommand() + drop() + ensureIndex() + reIndex() + dropIndex() + dropIndexes() + getIndexes() + getCollection() + name + keySize + publicKey MongoCursor + skip() + limit() + sort() + hasNext() + next() + count() + size() + forEach() + map() + toArray() + hint() MongoDB + operator[String] + fs + getCollection() + runCommand() + runCommand() + oid() + close() MongoID + PKey() + genRsaKey() + genEcKey() + isPrivate() + clone() + importKey() + importKey() + exportPem() + exportDer() + encrypt() + decrypt() + sign() + verify() Queue + length + Queue() + add() + offer() + remove() + poll() + element() + peek() + clear() + toArray() + command() + set() + setNX() + setXX() + mset() + mset() + msetNX() + msetNX() + append() + setRange() + getRange() + strlen() + bitcount() + get() + mget() + mget() + getset() + decr() + incr() + setBit() + getBit() + exists() + type() + keys() + del() + del() + expire() + ttl() + persist() + rename() + renameNX() + sub() + sub() + unsub() + unsub() + unsub() + unsub() + psub() + psub() + unpsub() + unpsub() + unpsub() + unpsub() + onsuberror() + pub() + getHash() + getList() + getSet() + getSortedSet() + dump() + restore() + close() Url RedisHash RedisList RedisSet + set() + setNX() + mset() + mset() + get() + mget() + mget() + incr() + getAll() + keys() + len() + exists() + del() + del() + push() + push() + pop() + rpush() + rpush() + rpop() + set() + get() + insertBefore() + insertAfter() + remove() + trim() + len() + range() + add() + add() + remove() + remove() + len() + exists() + members() + pop() + randMember() + randMember() Stat RedisSortedSet SandBox + add() + add() + score() + incr() + remove() + remove() + len() + count() + range() + rangeRev() + rank() + rankRev() + lastIndex + global + ignoreCase + multiline + exec() + test() Smtp + socket Regex + SandBox() + SandBox() + add() + add() + addScript() + remove() + run() + require() + Smtp() + connect() + command() + hello() + login() + from() + to() + data() + quit() + name + size + mode + mtime + atime + ctime Stats + Stats() + Stats() + inc() + dec() + add() + reset() + uptime() + isWritable() + isReadable() + isExecutable() + isHidden() + isDirectory() + isFile() + isSymbolicLink() + isMemory() + isSocket() Trigger TcpServer + operator[String] Stream TextColor + socket + handler + stats + read() + write() + close() + copyTo() + TcpServer() + TcpServer() + run() + asyncRun() + stop() + notice + warn + error + highLight + Trigger() + on() + on() + once() + once() + off() + off() + off() + trigger() + href + protocol + slashes + auth + username + password + host + hostname + port + path + pathname + search + query + hash + Url() + Url() + parse() + format() + resolve() + normalize() X509Cert uuidValue + data() + detail() XmlNode + version + serial + issuer + subject + notBefore + notAfter + ca + pathlen + usage + type + publicKey + next X509Req X509Crl + X509Crl() + load() + load() + loadFile() + dump() + clear() + X509Cert() + load() + load() + loadFile() + loadRootCerts() + verify() + dump() + clear() HttpHandler MySQL SQLite + rxBufferSize + txBufferSize + fileName + timeout + use() + backup() AsyncWait + end() Chain + Chain() + append() + append() + crossDomain + forceGZIP + maxHeadersCount + maxUploadSize + handler + stats + HttpHandler() PacketHandler + maxSize + handler + stats + PacketHandler() Routing + Routing() + append() + append() SslHandler + verification + ca + handler + SslHandler() + SslHandler() DBResult + insertId + affected + fields Condition + Condition() + Condition() + wait() + notify() + notifyAll() Event + Event() + isSet() + set() + pulse() + clear() + wait() Semaphore + Semaphore() + wait() + post() + trywait() BufferedStream + protocol + headers + keepAlive + maxHeadersCount + maxUploadSize + hasHeader() + firstHeader() + allHeader() + addHeader() + addHeader() + setHeader() + setHeader() + removeHeader() HttpRequest + method + address + queryString + cookies + form + query + HttpRequest() PacketMessage + maxSize + PacketMessage() HttpResponse + status + cookies + HttpResponse() + addCookie() + redirect() BlockQueue + BlockQueue() + put() + take() + stream + charset + EOL SeekableStream + BufferedStream() + readText() + readLine() + readLines() + readUntil() + readPacket() + writeText() + writeLine() + writePacket() + seek() + tell() + rewind() + size() + readAll() + stat() File + family + type + remoteAddress + remotePort + localAddress + localPort + Socket() + connect() + bind() + bind() + listen() + accept() + recv() + recvFrom() + send() + sendto() MemoryStream + truncate() + eof() + flush() + chmod() SslSocket HttpServer + verification + ca + peerCert + crossDomain + forceGZIP + maxHeadersCount + maxUploadSize + httpStats + SslSocket() + SslSocket() + connect() + accept() + HttpServer() + HttpServer() + MemoryStream() + setTime() + clone() + clear() SslServer + verification + ca + SslServer() + SslServer() + SslServer() + SslServer() XmlCharacterData + data + length + substringData() + appendData() + insertData() + deleteData() + replaceData() + inputEncoding + xmlStandalone + xmlVersion + doctype + documentElement + head + title + body + XmlDocument() + load() + getElementsByTagName() + getElementsByTagNameNS() + createElement() + createElementNS() + createTextNode() + createComment() + createCDATASection() + createProcessingInstruction() HttpsServer + verification + ca + name + X509Req() + X509Req() + load() + load() + loadFile() + exportPem() + exportDer() + sign() + hasChildNodes() + normalize() + cloneNode() + lookupPrefix() + lookupNamespaceURI() + insertBefore() + insertAfter() + appendChild() + replaceChild() + removeChild() + HttpsServer() + HttpsServer() + HttpsServer() + HttpsServer() XmlComment XmlText + splitText() XmlCDATASection XmlNodeList + length + operator[] + item() XmlElement XmlDocument Socket HttpMessage + subject + publicKey + nodeType + nodeName + nodeValue + ownerDocument + parentNode + childNodes + firstChild + lastChild + previousSibling + nextSibling XmlDocumentType + name + publicId + systemId + namespaceURI + prefix + localName + tagName + id + textContent + innerHTML + className + attributes + getAttribute() + getAttributeNS() + setAttribute() + setAttributeNS() + removeAttribute() + removeAttributeNS() + hasAttribute() + hasAttributeNS() + getElementsByTagName() + getElementsByTagNameNS() XmlProcessingInstruction + target + data
- 5.更多模块持续发展中
- 6.fibjs 和 nodejs 有什么不同?
- 7.来看⼀一段常⽤用的数据库操作 nodejs fibjs
- 8.等⼀一下!!!!!! nodejs 告诉我们: 会阻塞,导致其他任务不能运⾏行。 写这样的代码难道不会被打吗?
- 9.nodejs ⼀一直说: sync 是邪恶的
- 10.祂们说: In busy processes, the programmer is strongly encouraged to use the asynchronous versions of these calls. The synchronous versions will block the entire process until they complete--halting all connections.
- 11.⽽而 module.js ⾥里华丽丽滴写着这样的代码
- 12.因此 nodejs 在 require 时不响应请求
- 13.fibjs 不会出现这样的尴尬 当调⽤用阻塞⽅方法时, fibjs 会保护现场,挂起当前 fiber,并将 Javascript 引擎切 换⾄至下⼀一个排队的 fiber。挂起 的 fiber 在⼯工作完成后会进⼊入 排队队列等待恢复
- 14.fibjs 有三种类型的线程(nodejs 类似) Javascript 线程 ⼯工作线程池 异步 io 线程
- 15.Javascript 线程是 fibjs 的主线程 Javascript 线程 • ⼀一个 fibjs 进程只有⼀一个 Javascript 线程 • Javascript 线程内会运⾏行多个 fiber • Javascript 代码在 fiber 内运⾏行 • 同⼀一时刻只会有⼀一个 fiber 激活 • 当前 fiber 休眠时其它 fiber 才会恢复 • fiber 不释放就会把 Javascript 塞住
- 16.socket 操作会委托给异步 io 线程处理 Javascript 线程 异步 io 线程 sock.recv return
- 17.阻塞操作也会委托给⼯工作线程池处理 ⼯工作线程池 Javascript 线程 fs.readFile return
- 18.最终避免 fiber 阻塞导致 Javascript 被挂起
- 19.fibjs 的并发:轻量的⽤用户空间线程 fiber • 操作系统线程的切换成本昂贵 • fiber 是在应⽤用级的线程系统 • 运⾏行现场完整保护,对应⽤用开发透明 • 可以直接使⽤用的编程逻辑,包括 try/catch • 基于堆栈切换现场,模块调⽤用和返回更⾼高效 • ⾮非抢先,⽆无需内存级锁,并发逻辑简单
- 20.再回顾⼀一下这两段代码,是不是很爽 nodejs fibjs
- 21.nodejs 常说: 使⽤用回调,所以更快?
- 22.祂们⽤用 Apache 和 nginx 的对⽐比来证明
- 23.⽽而事实上,异步并不等同于回调
- 24.这是⼀一个 web 服务器基准测试 fibjs nodejs 60,000 每秒请求数 50,000 40,000 30,000 20,000 10,000 0 100 500 900 1300 1700 2100 2500 2900 3300 3700 4100 4500 4900 并发连接
- 25.平均 7.25 倍
- 26.有⺴⽹网友祭出 cluster ⼤大法
- 27.但是 fibjs 真的是多线程吗?
- 28.fibjs 同样是单线程的 • fibjs 和 nodejs 都是以 v8 为脚本引擎 • v8 本⾝身被设计为 isolate 不⽀支持多线程 • nodejs 使⽤用异步回调复⽤用 v8 线程 • fibjs 使⽤用 fiber 复⽤用 v8 线程 • 因此 fibjs 和 nodejs 都是单线程
- 29.那么 fibjs 快在哪⾥里呢?
- 30.Javascript 线程是珍贵的计算资源 Javascript 线程
- 31.fibjs 将更多的计算移⾄至⼯工作线程池 Javascript 线程 ⼯工作线程池 异步 io 线程
- 32.⼯工作线程不再仅仅完成阻塞操作 ⼯工作线程池 • 同步 io 操作,⽐比如磁盘操作,⽂文件处理 • 计算密集的⽅方法,⽐比如加密,压缩,图像 • 异步 io 基础上的复杂逻辑,⽐比如协议处理ps:异步 io 基础上的计算,全部以异步⽅方式完成,并 发性能更⾼高。
- 33.从⽽而提⾼高 Javascript 线程利⽤用率 Javascript 线程 Javascript 线程
- 34.多线程的⼯工作线程池也可以发挥多核性能 Javascript 线程 ⼯工作线程池 异步 io 线程
- 35.fibjs 是更彻底的异步 并将异步延伸⾄至⼯工作线程池 只是不在 js 层表现出来
- 36.fibjs 的应⽤用逻辑是在太过于直⽩白和简单 毫⽆无 nodejs 回调处理的各种惊艳技巧 就不再展⽰示那些毫⽆无趣味的⽰示例代码了
- 37.良好的⽣生态从积极参与和分享开始 ⺴⽹网站:http://fibjs.org/代码:https://github.com/xicilion/fibjs社区:http://baoz.cn/fibjs
- 38.fibjs ⼯工程实践:孢⼦子社区 baoz.cn
- 39.孢⼦子社区的 fibjs 实践 • 基于 http ⻓长连接的客户端消息推送 • 基于 tcp 的移动 app 消息推送 • 基于 fiber 的数据并⾏行读取 • 基于 fiber 的后台运算异步化 • 基于 SandBox 的服务器端模块 app 化与数据隔离 • 基于 SandBox 的服务器代码热升级
- 40.欢迎加⼊入孢⼦子团队 简历请寄 info@baoz.cn
- 41.Javascript on Fiber