-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

Node.js:來一打 C++ 擴展

( 簡體 字)
作者:死月類別:1. -> 程式設計 -> 網路編程 -> Node.js
   2. -> 程式設計 -> C++ -> C++
譯者:
出版社:電子工業出版社Node.js:來一打 C++ 擴展 3dWoo書號: 49279
詢問書籍請說出此書號!

缺書
NT售價: 545

出版日:6/1/2018
頁數:480
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121336423
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

序一
1995 年Brendan Eich 花了10 天時間開發出了一門腳本語言,用來彌補Java Applet 的不足,隨后Marc Andreessen 給它起名為Mocha。其最初的定位是,Java 用于大型專業級開發,而Mocha 則是給測試腳本編寫人員、業余愛好者、設計師使用的。1995 年5 月,Mocha 被集成到了Netscape 瀏覽器中,其不久后改名為LiveScript,當年年
底網景公司和Sun 公司達成協議并獲得了Java 商標的使用權,其正式更名為JavaScript。有人說Sun 公司的介入限制了Brendan Eich 的手腳。JavaScript 除了某些語法和Java 類似以外,骨子里卻是完全不一樣的東西。也有人說正式改名為JavaScript 才使得這門語言成為瀏覽器執行的唯一語言。時至今日JavaScript 已經不僅僅局限于為網頁做特效了,而真正發展成為一門全功能的編程語言:
? 2008 年Chrome 發布、V8 發布;
? 2009 年Node.js 發布;
? 2010 年NPM 發布;
? 2014 年12 月,多位核心Node.js 開發者不滿于Joyent 對Node.js 的管理制度,創建了io.js;
? 2015 年初Node.js 基金會成立;
? 2015 年9 月Node.js 4.0 發布,Node.js 和io.js 正式合并。
Node.js 4.0 版引入了ES6 的語言特性和“長期支持版本”的發布周期。
如今Node.js 社區已經成為最活躍的編程社區之一,而從NPM 的包數量來看,其已經超越了Java 的Manven、Ruby 的gem、PHP 的composer。
但是Node.js 仍有很多不足之處,Node.js 的使用者絕大部分僅僅把Node.js 作為前端開發的輔助工具。大家把Node.js 作為后端主力開發平臺使用時,遇到CPU 密集的場景時又不得不借助Java 或者Go。雖然V8 引擎一直致力于讓JavaScript 運行得更快,但是和Java、C++ 相比,還有不小的性能差距。
雖然關于JavaScript 的書已經汗牛充棟,但是有關Node.js 原理的書卻屈指可數。而目前真正能夠深入介紹原理的,國內的圖書中也只有樸靈的《深入淺出Node.js》了,但如今四五年過去了依然沒有等到該書的第2 版,而死月的這本書卻可以彌補這一方面的不足。
所有的編程語言底層都會回歸C/C++,Node.js 的底層依賴庫V8 使用C++ 開發,libuv 則使用C 語言。而使用C++ 開發Node.js 擴展將直接把擅長CPU 的C++ 和擅長I/O 的Node.js結合在了一起,彌補了JavaScript 在計算密集型應用方面的不足。
我從2015 年開始研究V8,認識死月的時間則更早。死月不僅僅精通C++,他也是國內的Node.js 布道師之一。從我認識他起,他就一直在使用Node.js。如果你想深入了解Node.js 的原理,或者想打開Node.js 另一個世界的大門,這本《Node.js:來一打C++ 擴展》值得你精讀。
——迷渡(justjavac),Flarum 中文社區創始人,國內知名前端技術專家
2018 年3 月22 日于天津

序二
我跟死月相識于GitHub,那時我們經常會向Node.js 貢獻一些代碼,彼此也會在微信上討論一些技術問題。當我聽說死月在寫一本關于Node.js C++ 擴展相關的圖書時,激動得幾乎要從床上蹦起來。因為我深知一個對Node.js 與V8 引擎都如此了解之人,愿意將他所知所想分享出來,這將是給予社區的一份大禮。
從我個人的角度來看,這本書非常適合這類開發者:他們對于Node.js 的使用已經了然于胸,但卻苦于沒有底層開發經驗,對整個V8 虛擬機也一知半解。這時,他們可以從第3 章開始讀起。本書用了很長的篇幅介紹JavaScript 代碼究竟在虛擬機里是怎么運行的,它們又都分別對應著哪一類數據結構等。因為作者深知,只有把這些基礎理解透了,則無論是開發C++ 擴展,還是寫純JavaScript 代碼,大家都能更得心應手。
本書像是在述說著Node.js 在C++ 擴展這一課題中曲折而又有趣的歷史進程。首先從最原始的V8 API 時代開始。對于每個原始時代,開發者最痛苦的莫過于解決各種版本的兼容問題。之后迎來的是NAN 時代。它解決了原始時代的接口抽象問題,接口也更豐富多樣,異步接口也封裝在內。最后,是還在路上的N-API。它與NAN 一脈相承,擁有更官方的支持和更友好的接口。
另外,我們通常在寫一個C++ 擴展時,多數情況下會跟異步打交道,這其中包含著如何非阻塞地調用底層接口,如何將異步的結果返回到JavaScript 的回調函數中,以及如何正確地在異步封裝中釋放你的資源。對這些內容特別感興趣的讀者,可以打開第6 章一睹為快。
Node.js 已快走完它的第一個10 年,盡管被人詬病于其回調地獄、虛假繁榮、超高并發場景下的不適應性,以及低端設備上的內存等問題,但這仍舊無法阻止它前進的步伐。然而對于我們Node.js 工程師來說,除了掌握好這門語言之外,學習如何寫C++ 擴展、了解它如何運轉將是我們下一階段的重要功課。相信《Node.js:來一打C++ 擴展》將會成為常伴大家左右的另一本《代碼大全》。
——劉亞中(Yorkie),Rokid 系統工程師,tensorflow-nodejs 作者
2018 年3 月22 日于杭州
內容簡介:

本書講解了如何在 Node.js 上寫 C++ 的原生模塊以供使用,包括且不僅限于一些 API 和原理的介紹,但是不包括 Node.js 的基礎入門知識(如語法等)。目標是讀者能用 C++ 寫出 Node.js 原生模塊來提高開發和運行效率。

目錄:

1 Node.js 的 C++ 擴展前驅知識儲備 / 1
1.1 Node.js 的模塊機制 / 2
1.1.1 CommonJS 的模塊規范 / 2
1.1.2 Node.js 的模塊 / 4
1.1.3 小結 / 9
1.1.4 參考資料 / 9
1.2 Node.js 的包機制 / 9
1.2.1 CommonJS 的包規范 / 9
1.2.2 Node.js / NPM 下的包 / 13
1.2.3 NPM 與 CNPM / 16
1.2.4 小結 / 19
1.2.5 參考資料 / 19
1.3 Node.js 依賴簡介 / 20
1.3.1 Chrome V8 / 20
1.3.2 libuv / 25
1.3.3 其他依賴 / 28
1.3.4 小結 / 30
1.3.5 參考資料 / 30
1.4 C++ 擴展開發的準備工作 / 31
1.4.1 編輯器 / IDE / 31
1.4.2 node-gyp / 36
1.4.3 其他構建工具 / 54
1.4.4 小結 / 56
1.4.5 參考資料 / 56
2 C++ 模塊原理簡析 / 57
2.1 為什么要寫 C++ 模塊 / 57
2.1.1 C++ 比 JavaScript 解釋器高效 / 57
2.1.2 已有的 C++ 輪子 / 72
2.1.3 小結 / 77
2.1.4 參考資料 / 77
2.2 什么是 C++ 擴展 / 78
2.2.1 C++ 模塊本質 / 80
2.2.3 小結 / 102
2.2.4 參考資料 / 103
3 Chrome V8 基礎 / 104
3.1 Node.js 與 Chrome V8 / 104
3.2 基本概念 / 105
3.2.1 內存機制 / 105
3.2.2 隔離實例(Isolate) / 108
3.2.3 上下文(Context) / 109
3.2.4 腳本(Script) / 110
3.2.5 小結 / 110
3.2.6 參考資料 / 111
3.3 句柄(Handle / 111
3.3.1 本地句柄(Local) / 112
3.3.2 持久句柄(Persistent) / 115
3.3.3 永生句柄(Eternal) / 119
3.3.4 待實本地句柄(Maybe Local) / 119
3.3.5 小結 / 121
3.3.6 參考資料 / 121
3.4 句柄作用域 / 121
3.4.1 一般句柄作用域(Handle Scope) / 122
3.4.2 可逃句柄作用域(Escapable Handle Scope) / 125
3.4.3 小結 / 129
3.4.4 參考資料 / 129
3.5 上下文(Context) / 129
3.6 模板(Template) / 133
3.6.1 函數模板(Function Template) / 133
3.6.2 對象模板(Object Template) / 138
3.6.3 對象模板的訪問器(Accessor)與攔截器(Interceptor) / 144
3.6.4 對象模板的內置字段(Internal Field) / 175
3.6.5 函數模板的繼承(Inherit) / 183
3.6.6 小結 / 188
3.6.7 參考資料 / 189
3.7 常用數據類型 / 189
3.7.1 基值(Value) / 189
3.7.2 字符串(String) / 194
3.7.3 數值類型 / 196
3.7.4 布爾類型(Boolean) / 196
3.7.5 對象(Object) / 196
3.7.6 函數(Function) / 200
3.7.7 數組(Array) / 202
3.7.8 JSON 解析器 / 203
3.7.9 函數回調信息(Function Callback Info) / 203
3.7.10 函數返回值(Return Value) / 204
3.7.11 隔離實例(Isolate) / 204
3.7.12 小結 / 205
3.7.13 參考資料 / 206
3.8 異常機制. / 206
3.8.1 try-catch / 206
3.8.2 拋出異常 / 209
3.8.3 異常生成類(Exception) / 211
3.8.4 小結 / 211
3.8.5 參考資料 / 211
4 C++ 擴展實戰初探 / 212
4.1 binding.gyp / 212
4.1.1 驚鴻一瞥 / 213
4.1.2 binding.gyp 基礎結構 / 213
4.1.3 GYP 文件 / 214
4.1.4 常用字段 / 221
4.1.5 小結 / 228
4.1.6 參考資料 / 228
4.2 牛刀小試. / 229
4.2.1 又是 Hello World / 229
4.2.2 函數參數 / 232
4.2.3 回調函數 / 234
4.2.4 函數返回 / 238
4.2.5 小結 / 239
4.2.6 參考資料 / 240
4.3 循序漸進 / 240
4.3.1 C++ 與 JavaScript 類封裝 / 240
4.3.2 實例化 C++ 類封裝對象的函數 / 250
4.3.3 將 C++ 類封裝對象傳來傳去 / 253
4.3.4 進程退出鉤子 / 255
4.3.5 小結 / 259
4.3.6 參考資料 / 259
5 Node.js 原生抽象——NAN / 260
5.1 Node.js 原生模塊開發方式的變遷 / 260
5.1.1 以不變應萬變 / 260
5.1.2 時代在召喚 / 261
5.1.3 小結 / 267
5.1.4 參考資料 / 267
5.2 基礎開發 / 267
5.2.1 什么是 NAN / 267
5.2.2 安裝和配置 / 269
5.2.3 先睹為快——搭上NAN 的快車 / 270
5.2.4 基礎幫助函數和宏 / 276
5.2.5 忽略 node_modules / 279
5.2.6 小結 / 279
5.2.7 參考資料 / 280
XXII Node.js:來一打C++ 擴展
5.3 JavaScript 函數 / 280
5.3.1 函數參數類型 / 280
5.3.2 函數聲明 / 282
5.3.3 函數設置 / 288
5.3.4 小結 / 296
5.3.5 參考資料 / 296
5.4 常用幫助類與函數. / 296
5.4.1 句柄相關 / 296
5.4.2 創建數據對象 / 298
5.4.3 與數據對象“玩耍” / 300
5.4.4 封裝一個類 / 314
5.4.5 異常處理 / 315
5.4.6 小結 / 315
5.4.7 參考資料 / 316
5.5 NAN 中的異步機制 / 316
5.5.1 Nan::AsyncQueueWorker / 316
5.5.2 Nan::Callback / 317
5.5.3 Nan::AsyncWorker / 317
5.5.4 Nan::AsyncProgressWorker / 323
5.5.5 小結 / 327
5.5.6 參考資料 . / 327
6 異步之旅——libuv / 328
6.1 基礎概念 / 329
6.1.1 事件循環 / 330
6.1.2 句柄(Handle)與請求(Request) / 333
6.1.3 嘗嘗甜頭 / 335
6.1.4 小結 / 340
6.1.5 參考資料 / 340
6.2 libuv 的跨線程編程基礎 / 341
6.2.1 libuv 的線程 / 342
6.2.2 同步原語(Synchronization Primitive) / 347
6.2.3 工作隊列 / 355
6.2.4 小結 / 356
6.2.5 參考資料 / 357
6.3 跨線程通信 / 357
6.3.1 uv_async_t 句柄 / 357
6.3.2 Watchdog 半成品實戰解析 / 358
6.3.3 Watchdog 試運行 / 367
6.3.4 小結 / 368
6.3.5 參考資料 / 369
7 實戰——文件監視器. / 370
7.1 準備工作 / 370
7.1.1 功能規劃 / 370
7.1.2 文件系統監聽庫——efsw / 373
7.1.3 小結 / 376
7.1.4 參考資料 / 376
7.2 核心設計 / 376
7.2.1 API 設計 . / 377
7.2.2 EFSWCore 的血肉之軀 / 377
7.2.3 EFSWCore 的靈魂 / 381
7.2.4 小結 / 385
7.3 編寫JavaScript 類 / 386
7.3.1 類的設計 / 386
7.3.2 核心邏輯 / 388
7.3.3 簡單容錯 / 391
7.3.4 小結 / 393
7.4 進一步完善 / 393
7.4.1 C++ 代碼的完善 / 393
7.4.2 JavaScript 代碼的完善 / 398
7.4.3 小結 / 400
8 實戰——現有包剖析 / 401
8.1 字符串哈希模塊——Bling Hashes / 401
8.1.1 文件設定 / 402
8.1.2 C++ 源碼剖析 / 403
8.1.3 JavaScript 源碼剖析 / 408
8.1.4 小結 / 409
8.1.5 參考資料 / 410
8.2 類 Proxy 包——Auto Object / 410
8.2.1 Proxy / 410
8.2.2 Auto Object 使用范例 / 412
8.2.3 代碼剖析 / 415
8.2.4 小結 / 424
8.2.5 參考資料 / 424
9 N-API——下一代 Node.js C++ 擴展開發方式 / 425
9.1 淺嘗輒止 / 426
9.1.1 實現一個 Echo 函數 / 426
9.1.2 嘗試運行 N-API 擴展 / 430
9.1.3 向下兼容 / 431
9.1.4 N-API Package——C++ 封裝 / 433
9.1.5 小結 / 433
9.1.6 參考資料 / 433
9.2 基本數據類型與錯誤處理 / 433
9.2.1 基本數據類型 / 433
9.2.2 與作用域及生命周期相關的數據類型 / 435
9.2.3 回調數據類型 / 438
9.2.4 錯誤處理 / 439
9.2.5 模塊注冊 / 441
9.2.6 小結 / . 442
9.2.7 參考資料 / 442
9.3 對象與函數 / 442
9.3.1 對象 / 442
9.3.2 函數 / 448
9.3.3 類的封裝 / 453
9.3.4 小結 / 455
9.3.5 參考資料v455
序: