知识分享:使用web写UI, 使用js对接C++项目, 提高开发效 率。

Slides:



Advertisements
Similar presentations
六大類食物 五穀根莖類 六大類食物 油脂類 蛋魚肉豆類 奶類 蔬菜類 水果類. 五穀根莖類 : 提供熱量 : 部份蛋白質,維生素,礦物質,及膳食纖維 包含麵 ( 及麵包饅頭 ) ,飯類,蕃薯等食物 也就是一般所稱的 " 主食 " ( 蘿蔔不是這一類,是屬於蔬菜類喔! ) 飲食建議吃三到六碗 並推薦攝取全穀類食品.
Advertisements

揮別電腦族疲勞症候群 主講人 : 陳潮宗 中醫師. 常有症狀一 起因&症狀: 起因&症狀: 坐姿不正最易引起腰酸背痛、 過度看螢幕則眼睛疲勞酸痛。 治療重點: 治療重點:補固腰腎、明目保睛。
引言 高血壓自我健康管理包含飲食、 運動、 及健康生活型態三大方向。 飲食 是改善高血壓的重要部分, 並提 供飲食方式來改善高血壓。
●公司簡介. ●公司組織 行銷 企劃部 行銷 企劃部 研發 設計部 研發 設計部 視覺 設計部 視覺 設計部 媒體 製作部 媒體 製作部 行動 裝置部 行動 裝置部 執行長 總經理 管理部 本公司組織人力配置除董事長、執行長、總經理外,共 有六大部門,分別為研發部 6 人、管理部 4 人、視覺設計部.
人事室專題計畫業務報告 人事室 謝明峯 轉 一、專任助理注意事項 計畫案如有聘任專任助理者, 請依據「南 華大學專案助理報到程序單」內容, 將資 料繳交至人事室 ( 請於聘任到職日前繳交, 以免影響到本身權利 ) 。 離職儲金或勞工退休金 依勞工退休金條例相關規定,
教师成绩录入步骤 1. 登录教务系统 2. 进入教师成绩管理界面 3. 选择相应的教学班,点击 “ 课程成绩录 入 ” 进入成绩录入界面 4. 点击 “ 设置 ” 按钮设置 “ 成绩分项 ” 5. 录入成绩, “ 保存成绩 ” 按钮可以保存成 绩但不提交(提交后不能再修改成绩) 6. “ 提交成绩 ”
7.2 图示化记忆 记忆的概述 图示化记忆 联想记忆法 奇特联想记忆法 用手记忆.
醫學美學之我見ー肉毒桿菌 班級:應日三乙 姓名:蔡雅卉 學號: 497E0076. 前言 現在的人,已經把 整型看做是微不足 道的事情了。即使 只是戴牙套、局部 雷射、割雙眼皮、 打美白針、肉毒桿 菌等等,都可以在 身體上做不同的改 變,而讓自己更滿 意自己的外表。
山伯與英台在健康書院修業完 成後,一行人逗陣開開心心的 回自己的家鄉 …… 於是開啟了另一段 ~ 新梁祝的故事 ~ 在下 梁山伯 小女子 祝英台 我是 阿成 我是 阿香.
第八章 膳食與營養 第一節 均衡營養與膳食 年 7 月公布新版「每日飲食指南」, 依食物營養特性,分為六大類: 全榖根莖類 蔬菜類水果類 低脂乳品類 油脂與堅果種子類 豆魚肉蛋類 食全十美.
中醫臨床常見養生藥膳 臺 北 市 立 聯 合 醫 院中醫院區 院長 鄭振鴻. 壹、前言 在臺灣地處亞熱帶的氣候,冬季溫暖,夏 季炎熱,雨量多的特性。吃補的概念源自 中國大陸,但生活習性與食物亦有其地域 性,因此針對臺灣常用藥膳的食物與藥物 的性能作用,解析其效用、功能,了解食 物與人的關係,利用食物特性,藥物的效.
第一章 餐饮服务程序 学习目的: 掌握餐饮服务四个基本环节的内容 正确表述和运用各种餐饮形式的服务程序 熟悉并利用所学知识灵活机动地为不同需求的 客人提供服务.
青春期 女生可以早在八、九歲, 或晚到十三、四歲才進入 青春期。 男生早的在十、十一歲, 晚到十四、五歲,甚至更 遲才進入青春期。
一、老师申请题目,以下指导老 师操作。 1. 登录教务系统 web 端. 2. 点击 “ 毕业设计 ” 工具栏下拉菜单中的 “ 论文 _ 教师申请题目 ”
LOGO 《静态网页设计》课程整体设计 电子信息工程系 计算机专业 李超燕. LOGO 2 课程在专业课程体系中的定位 3 岗位分析 目 录 1 课程的基本信息 6 本课程的特色和效果 4 教学整体设计 5 教学基本条件.
第八課 路 *課前預習 一 二 三 *題解 *作者介紹 *課文內容 一 、 、 、 *修辭回顧
熟悉 Dreamweaver 的工作區與基本操作
E時代盛宴 健康123年菜發表會 新春新氣象,處於資訊蓬勃E時代的您,是否已構思好如何為自己及家人準備一桌健康、豐盛的年菜?隨著國人健康意識的提升,對年菜訴求也有別於傳統年菜四大特點-高油、高鹽、高糖、低纖,加上其繁瑣的製備過程,對講求速度及效率的E時代族群而言,已不符現今年菜簡單製備、健康需求性。在這距離農曆春節只剩短短二個星期,豐原醫院營養室關心您的健康、滿足您的胃蕾,推出「E時代盛宴-健康123-年菜發表會」,以「一高、二少、三低」的健康原則,利用家中減少烹調油量的鍋具,如:烤箱、電鍋、不沾鍋等,製
生活常規.
时间与我们的世界 Pb 段心蕊.
移动校园Hybrid应用开发介绍 2015年11月.
讲故事训练 授课人:田轶.
第十一課 菜園 6-11.
校本选修课 第三专题 西藏问题 北京师大二附中 李文燕.
速收简历 速收简历移动APP项目 速收简历团队.
JavaScript中常用的互動方式 認識簡單的交談與基本的運算.
石家庄迅步网络科技有限公司 联系人:张会耀 电话:
第八章 网络课程的设计与开发.
P303 HTML/DHTML/CSS/JavaScript 專業HTML網頁設計 陳錦輝.
正修科技大學教學發展中心 教師教學觀摩與經驗分享 電子工程系 張法憲副教授.
102學年度預算編製說明會 主辦單位:會計室 102/02/22.
上課囉 職場甘苦談 小資男孩向錢衝 育碁數位科技 呂宗益/副理.
网页设计师职位需求.
第一讲 JavaScript编程基础 信息学院 周宝刚.
第4章 JavaScript脚本语言基础 4.1 JavaScript简介 4.2 JavaScript语法基础
《网页设计与制作》 教学课件 主讲人:湖南铁道职业技术学院 陈承欢
14 JavaScript语言基础 JavaScript是一种轻量级、解释型的Web开发语言。所谓轻量级,就是语言的体系结构不是很庞杂,例如,没有C、Java等语言中的类、内存管理、系统管理等高深的知识范畴;所谓解释型,就是语言在浏览器或服务器等环境中直接被解释执行,不需要对源代码进行编译操作。
§2-9 节点分析法 节点分析法(node-analysis method)的基本指导思想 何谓节点电压(node voltage)?
互联网时代班主任的挑战 万玮 2014年9月20日.
蘇軾詞的賞析
柯奕宏(06) 王予亨(13) 郭秉逸(15) 楊雯凈(23) 顏佑瑩(32)
第十五章 传播学调查研究方法.
自然與生活科技領域 認識太陽能 蘇紋琪、石明玉.
Selenium 一个用于Web应用程序测试的工具 Robin Ren
 全能的天才畫家- 李奧納多‧達文西 (西元1452年-1519年) 指導老師:袁淑芬老師 製作人:饒佩芯.
第9课 北美大陆上的新体制 导入新课 新课教学 课堂小结 知识结构 巩固练习
网站设计 前端 入门学习.
Ajax编程技术 第一章 Ajax简介.
鄉村尋根-農具篇.
复习 JavaScript && ES6 专题 (1) 2017/3/10 – Payne
認識我的故鄉_台中市.
前终端一体化开发解决方案 腾讯 lucaspei(裴伟).
WEB统一检索本地整合技术 中国农业大学图书馆 康实.
前端技术开发 高莺.
十 三.使用模板和库.
JavaScript Sunxiaoshen.
香港傳統的農村生活.
精忠报国  演唱:屠洪纲 作词:陈涛 作曲:张宏光  狼烟起 江山北望  龙起卷 马长嘶 剑气如霜  心似黄河水茫茫  二十年 纵横间 谁能相抗  恨欲狂 长刀所向  多少手足忠魂埋骨它乡  何惜百死报家国  忍叹惜 更无语 血泪满眶  马蹄南去 人北望  人北望 草青黄 尘飞扬  我愿守土复开疆  堂堂中国要让四方来贺.
网页设计与制作 Jiangxi Engineering Vocational College 信息工程系 徐卫红.
网 站 设 计 与 建 设 Website design and developments
樂樂請假了 尊重的故事 資料來源:臺北縣國民小學品德教育手冊 故事來源:臺北縣國民小學品德教育手冊 網路小故事
聽聽那冷雨---重點摘要 二愛 王煜榕.
第2章 JavaScript语言基础 2.1 数据类型、常量及变量.
“修身成材” 班级干部培训班 黑龙江大学党委学工部.
憲政與民主 應化3A 邱泓明.
React.js.
所得稅法第14條、第126條修正條文 薪資所得計算方式二擇一 定額減除 特定費用減除 維持現行薪資所得特別扣除額20萬元減除方式
古蹟知性之旅 我和新港奉天宮有個約 報告人:陳 映 竹 傅 湘 甯.
JavaScript 教师:魏小迪
電子表單 簡介 高雄市鳳山區新甲國小 陳信宏.
Presentation transcript:

知识分享:使用web写UI, 使用js对接C++项目, 提高开发效 率。 webui nodejs 解放C++ 知识分享:使用web写UI, 使用js对接C++项目, 提高开发效 率。

C++ 一些短板 UI不友好, 做复杂的UI, 耗费太大 入门门槛高, 很少能做到开箱即用

webui 基于浏览器, 使用html, css, js等做的网页 浏览器原理: webkit: 渲染引擎 V8: js执行引擎

node Javascript: 浏览器脚本, 不具有原生能力, 只能在浏览器里面执行。 nodejs: 由V8引擎以及C++扩展提供原生能力, 单纯的v8是没有原生能力的, 原生能力主要来源node(我们可以认为它是C++扩展) 基于v8引擎的, 具有原生能力的javascript deps目录 nodejs源码 /src: 由C/C++写的核心模块

Electron Electron 基于chromium和nodejs, 让我们可以使用html, css和javascript 构建我们的应用

历史行情服务器数据客户端

代码结构 Socket: Protobuf: socket + protobuf var self = this; this.socket = new this.net.Socket(); this.socket.connect({port:port, host:ip}, callback); Protobuf: this.path = require('path'); this.protobuf = require('protobufjs'); this.bytebuffer = require('bytebuffer'); this.long = require('long'); this.builder = this.protobuf.loadProtoFile(this.path.join(__dirname, '..', 'proto', 'common.proto')); this.hisrpc = this.builder.build('HISRPC'); socket + protobuf C++服务端只需要提供pb的socket接口, 无需为javascript做任何改变.

send(msg) { let msgArrayBuffer = msg send(msg) { let msgArrayBuffer = msg.toArrayBuffer(); let length = msgArrayBuffer.byteLength; let sendBuffer = new this.bytebuffer(4 + length, true); sendBuffer.writeUint32(length).append(msg).flip(); return this.socket.write(sendBuffer.toBuffer(true)); } ondata(data) { // 先把原始的buffer转成bytebuffer let buf = new this.bytebuffer(data.length, true); buf.append(data.buffer); this.buffer.buffer.append(buf); // 处理队列 while (this.buffer.remaining() >= this.need) { // 头 if (this.ishead) { // 获得新的长度 this.need = this.buffer.readInt(); this.ishead = false; } else { // 获得buf let subbuf = this.buffer.copy(this.buffer.offset, this.need); this.buffer.offset += this.need; // 反射回去 if (this.datacb != undefined) { this.datacb(subbuf); } this.ishead = true; this.need = 4; } } } 解析socket 封包解包

解析protobuf protobufjs bytebuffer // 生成pbotobuf get_login_rpc(data, cbSuccess, cbFailed) { let method = this.hisrpc.enum_method_type.server_login_req; let serverLoginReq = new this.hisrpc.server_login_req_msg(); let seq = this.get_seq(); serverLoginReq.name = data.username; serverLoginReq.pass = data.password; let rootRpc = this.get_root_prc(method, serverLoginReq, seq, cbSuccess, cbFailed); return rootRpc; } 解析protobuf protobufjs bytebuffer // 解析pbotobuf ondata(data) { //let rootMsg = this.hisrpc.decode(data); let rootMsg = new this.hisrpc.rpc_root_msg.decode(data); let repMsg = undefined; let seq = rootMsg.seq; if (rootMsg.method == this.hisrpc.enum_method_type.server_login_rep) { repMsg = this.hisrpc.server_login_rep_msg.decode(rootMsg.body); } else if (rootMsg.method == this.hisrpc.enum_method_type.server_pong_rep) { repMsg = this.hisrpc.server_heart_rep_msg.decode(rootMsg.body); } }

pbjs 好处:独立于electron, 作为一个类似C++的静态lib存在, 可以在任何地方被nodejs调用。 一个独立的nodejs库, 封装了nodejs与C++服务器接口。 作用:自动化测试, 可以用来测试接口, 可以用来测试数据, 自动化上传等。 打开了整个nodejs的格局, 想象一下, 我们可以用node连接任何一个地方的数据, 比较数据测试数据, 上传数据。

合适 不适合 合适: 各种浏览器脚本 各种工具 不合适: 高性能后端 原理: 合适 不适合 不合适: 高性能后端 原理: nodejs的执行效率取决于v8, v8取决于libuv, libuv取决于epoll, 单进程node, 底层只有一个epoll, 无法利用多核性能。 参考:http://rango.swoole.com/archives/311