HTML5之Javascript多线程
Javascript执行机制
在HTML5之前,浏览器中JavaScript的运行都是以单线程的方式工作的,虽然有多种方式实现了对多线程的模拟(例如:Javascript 中的 setinterval 方法,setTimeout 方法等),但是在本质上程序的运行仍然是由 JavaScript 引擎以单线程调度的方式进行的。在 HTML5 中引入的工作线程使得浏览器端的 Javascript 引擎可以并发地执行 Javascript 代码,从而实现了对浏览器端多线程编程的良好支持。
Javascript中的多线程 - WebWorker
HTML5 中的 Web Worker 可以分为两种不同线程类型,一个是专用线程 Dedicated Worker,一个是共享线程 Shared Worker。两种类型的线程各有不同的用途。
专用型web worker
专用型worker与创建它的脚本连接在一起,它可以与其他的worker或是浏览器组件通信,但是他不能与DOM通信。专用的含义,就是这个线程一次只处理一个需求。专用线程在除了IE外的各种主流浏览器中都实现了,可以放心使用。
创建线程
...
Alexa avs-device-sdk Ubuntu Linux快速入门指南/Ubuntu Linux Quick Start Guide
Translate from Ubuntu Linux Quick Start Guide
这些说明将帮助您在运行Ubuntu Linux 16.04 LTS的机器上快速启动和运行。对于所有其他发行版,请检查依赖项、构建选项和为通用Linux创建命令。
配置要求
该教程假定:
您正在使用Ubuntu Linux 16.04 LTS
你有一个麦克风
你的Ubuntu装置可以通过耳机或扬声器进行音频输出
注册一个产品
按照STEP 1 Raspberry Pi原教程 注册一个产品和一个安全配置文件。在这个过程中,你将下载一个“config.json”文件到本地,本文件将用来完成sample app的配置。
提示:如果您已经有了可以用于测试的注册产品,那么您可以使用它,但是必须启用它才能与基于代码的链接(Code Based Linking ,CBL)一起使用。
这里是如何为您的设备启用 CBL的教程。
设置:
a. 第一步是确保您的计算机有最新的包列表,然后安装该列表中每个包的最新版本:
1$ sudo apt-get update && sudo apt-ge ...
C++中的overload重载&&override覆盖&&overwrite隐藏
浅谈C++中对于函数的overload(重载)、override(覆盖)、overwrite(重写,也有翻译为隐藏、重定义、屏蔽、隐藏)的理解。
这三个概念很容易混淆,面试题常见题目,也是本人面试百度过程中被问到的一个题目。但是我认为overload和overwrite是虚假的概念。在Java和Scala中,甚至不存在overwrite的概念。overload可以看作是普通函数,唯一特别的是普通函数具有相同的函数名。所有这些都是在编译时确定的。
而override对于多态性非常有用。被调用的方法是在运行时确定的。我认为overwrite的概念可能来自于c++中关键字virtual的使用。当使用virtual分配基类方法时,override将取得调用后期绑定的效果。或者这些方法将被早期绑定,并且不存在多态行为。
英文定义:
override: subclass method overrides base class method means:
in different range (in derived class and base class)
the same functio ...
Ubuntu16.04仿Mac美化教程
全部替换为Mac风格需要改动的东西太多,大致分为一下几个步骤:
1.分别安装Mac主题,光标,图标,壁纸,Dock,LOGO以及字体。
2.安装支持更改主题的相应软件。
3.配置并启用Mac主题。
STEP1:
添加:
sudo add-apt-repository ppa:noobslab/macbuntu
刷新:
sudo apt-get update
安装图标:
sudo apt-get install macbuntu-os-icons-lts-v7
安装主题:
sudo apt-get install macbuntu-os-ithemes-lts-v7
STEP2
安装Slingscold
sudo add-apt-repository ppa:noobslab/macbuntu
sudo apt-get update
sudo apt-get install slingscold
安装Tweak Tool
sudo apt-get install unity-tweak-tool
sudo apt-get install gnome-tw ...
C++序列式容器(STL序列式容器)是什么
序列容器以线性序列的方式存储元素。它没有对元素进行排序,元素的顺序和存储它们的顺序相同。以下有 5 种标准的序列容器,每种容器都具有不同的特性:
array<T,N>(数组容器)是一个长度固定的序列,有 N 个 T 类型的对象,不能增加或删除元素。
vector(向量容器)是一个长度可变的序列,用来存放 T 类型的对象。必要时,可以自动增加容量,但只能在序列的末尾高效地增加或删除元素。
deque(双向队列容器)是一个长度可变的、可以自动增长的序列,在序列的两端都不能高效地增加或删除元素。
list(链表容器)是一个长度可变的、由 T 类型对象组成的序列,它以双向链表的形式组织元素,在这个序列的任何地方都可以高效地增加或删除元素。访问容器中任意元素的速度要比前三种容器慢,这是因为 list 必须从第一个元素或最后一个元素开始访问,需要沿着链表移动,直到到达想要的元素。
forward list(正向链表容器)是一个长度可变的、由 T 类型对象组成的序列,它以单链表的形式组织元素,是一类比链表容器快、更节省内存的容器,但是它内部的元素只能从第一个元素开始访问。
图 1 说 ...
一篇文章说清浏览器解析和CSS(GPU)动画优化
相信不少人在做移动端动画的时候遇到了卡顿的问题,这篇文章尝试从浏览器渲染的角度;一点一点告诉你动画优化的原理及其技巧,作为你工作中优化动画的参考。文末有优化技巧的总结。
因为GPU合成没有官方规范,每个浏览器的问题和解决方式也不同;所以文章内容仅供参考。
浏览器渲染
提高动画的优化不得不提及浏览器是如何渲染一个页面。在从服务器中拿到数据后,浏览器会先做解析三类东西:
解析html,xhtml,svg这三类文档,形成dom树。
解析css,产生css rule tree。
解析js,js会通过api来操作dom tree和css rule tree。
解析完成之后,浏览器引擎会通过dom tree和css rule tree来构建rendering tree:
rendering tree和dom tree并不完全相同,例如:或display:none的东西就不会放在渲染树中。
css rule tree主要是完成匹配,并把css rule附加给rendering tree的每个element。
在渲染树构建完成后,
浏览器会对这些元素进行定位和布局,这 ...
前端性能优化(CSS动画篇)
最近拜读了一下html5rocks上几位大神写的一篇关于CSS3动画性能优化的文章,学到了很多,在这里记录一下,其中的知识都是来源于这俩篇文章,我只是截取了其中比较关注的内容出来,原文地址High Performance Animations及Accelerated Rendering in Chrome
原理
现代浏览器在使用CSS3动画时,以下四种情形绘制的效率较高,分别是:
* 改变位置
* 改变大小
* 旋转
* 改变透明度
层?重绘?回流和重布局?图层重组?
首先要了解CSS的图层的概念(Chrome浏览器)
浏览器在渲染一个页面时,会将页面分为很多个图层,图层有大有小,每个图层上有一个或多个节点。在渲染DOM的时候,浏览器所做的工作实际上是:
1. 获取DOM后分割为多个图层
2. 对每个图层的节点计算样式结果(Recalculate style–样式重计算)
3. 为每个节点生成图形和位置(Layout–回流和重布局)
4. 将每个节点绘制填充到图层位图中(Paint Setup和Paint–重绘)
5. 图层作为纹理上传至GPU
6. 符合多个图层到页面上生成最终屏 ...
C++ string类成员函数汇总(超全)
在定义 string 类对象时,string 类自身可以管理内存,程序员不必关注内存的分配细节。
string 类提供的各种操作函数大致分为八类:构造器和析构器、大小和容量、元素存取、字 符串比较、字符串修改、字符串接合、I/O 操作以及搜索和查找。
下表列出了 string 类的所有成员函数及它们的功能。
表 1 string 类的所有成员函数
函数名称
功能
构造函数
产生或复制字符串
析构函数
销毁字符串
=,assign
赋以新值
Swap
交换两个字符串的内容
+ =,append( ),push_back()
添加字符
insert ()
插入字符
erase()
删除字符
clear ()
移除全部字符
resize ()
改变字符数量
replace()
替换字符
+
串联字符串
==,! =,<,<=,>,>=,compare()
比较字符串内容
size(),length()
返回字符数量
max_size () ...
fatal: Cannot get https:// gerrit.googlesource.com /git-repo/clone.bundle
在执行如下命令时
123repo init -u ssh://username@*****your address*******
出现如下错误
12345fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundlefatal: error [Errno 101] Network is unreachable
经过排查发现,基于repo的自更新机制,是TG的防火墙限制问题,repo无法访问到https://gerrit.googlesource.com/git-repo/clone.bundle 通过sync更新
解决方案
翻过去,自然就OK了(我采用的方案)。
1234567891011121314Get https://gerrit.googlesource.com/git-repo/clone.bundleGet https://gerrit.googlesource.com ...
websocket断开重连解决方案初探和实现websocket心跳重连
心跳重连缘由
websocket是前后端交互的长连接,前后端也都可能因为一些情况导致连接失效并且相互之间没有反馈提醒。因此为了保证连接的可持续性和稳定性,websocket心跳重连就应运而生。
在使用原生websocket的时候,如果设备网络断开,不会触发websocket的任何事件函数,前端程序无法得知当前连接已经断开。这个时候如果调用websocket.send方法,浏览器就会发现消息发不出去,便会立刻或者一定短时间后(不同浏览器或者浏览器版本可能表现不同)触发onclose函数。
后端websocket服务也可能出现异常,连接断开后前端也并没有收到通知,因此需要前端定时发送心跳消息ping,后端收到ping类型的消息,立马返回pong消息,告知前端连接正常。如果一定时间没收到pong消息,就说明连接不正常,前端便会执行重连。
为了解决以上两个问题,以前端作为主动方,定时发送ping消息,用于检测网络和前后端连接问题。一旦发现异常,前端持续执行重连逻辑,直到重连成功。
如何实现
在websocket实例化的时候,我们会绑定一些事件:
1234567891011121314var ...