JavaScript 来了

 

 

1995年,诞生了JavaScript语言,那一年,我刚刚从大学毕业。在今年RedMonk 推出的2017 年第一季度编程语言排行榜中,JavaScript 排第一,Java 第二,Python 反超 PHP 排第三,PHP 第四,C# 和 C++ 并列第五。RedMonk 排名的主要依旧是各种编程语言在 Stack Overflow 和 GitHub 上的表现,比如编程语言在 Stack Overflow 上的讨论数量,在 GitHub 上的代码量等。尽管有一定的片面性,还是说明了JavaScript 应用的广泛性。从全栈的角度看,Javascript 是必备的一种编程语言。 

ECMAScript 和 JavaScript 的关系

JavaScript 诞生于Netscape,但是在1996年,微软发布了与JavaScript 兼容的JScript,面对兼容和发展的需要,网景公司的先贤们努力加入了 ECMA International 标准化组织,致力于JavaScript 的标准化,命名为ECMAScript。后来,由于历史的原因, JavaScript标准的开发主体变成了Mozila基金会。关于ECMAScript 的最新版本可以参阅 https://tc39.github.io/ecma262/。

简单地,ECMAScript 是JavaScript语言的标准规范,就像C++的标准相对于C++语言那样。

JavaScript 是怎样的语言

在mozilla 开发者网站上是这样描述JavaScript的:

JavaScript (JS) is a lightweight interpreted or JIT-compiled programming language with first-class functions. 

意思是说JavaScript 是一个轻量级解释或即时编译的函数式语言,里面有很多的概念,轻量、解释、编译、即时编译、函数式。在老码农看来,简单起见,理解为扩展语言较为方便。

一般的编程语言都有着自己相对独立的执行环境,但是JavaScript的执行环境依赖在宿主环境中,宿主环境尤其是客户端的宿主环境提供了更多统一的环境变量,比如浏览器中的window,document等。实际上,JavaScript 和DOM 是可分的,对于不同的运行环境,有着不同的内置宿主对象。JavaScript作为扩展语言在内置的宿主环境中运行,全局对象在程序启动前就已经存在了。

JavaScript的时空基础

从空间观的角度看,JavaScript包括数据结构,操作符,语句与表达式,函数;从时间的角度看,包括作用域,处理方式,模块与库。关于技术系统的时空观,可以参见《面向全栈的技术管理》一文。

数据结构

JavaScript 中包含的六种基本类型:

  • Boolean

  • Null

  • Undefined

  • Number

  • String

  • Symbol (ECMAScript 6)

其它全是对象。值是有类型的,变量是没有类型的,类型定义了值的行为特征,变量在没有持有值的时候是undefined。 JavaScript对值和引用的赋值/传递在语法上没有区别,完全根据值的类型来判定。

对于对象的属性和方法而言,全局变量和全局函数是全局对象的属性,全局对象相当于宿主对象的根对象。需要注意是属性的属性中那些不可变对象的实现方式: 

  1. 对象常量: 结合writable和configurable:false 可以创建一个真正的常量属性

  2. 禁止扩张:Object.preventExtensions(..)来禁止一个对象添加新属性并保留已有属性

  3. 密封: 在 Object.seal(..) 后不能增,删,改 该属性

  4. 冻结: Object.freeze(..) 会禁止对于对象本身及任意直接属性的修改

数据类型的判定可以通过 contructor,instanceof, isPrototypeOf等方法实现,对于鸭子类型的判定还可以使用 in 的相关操作。符号并非对象,而是一种简单标量基本类型。

 JavaScript 中的强制类型转换总是返回基本类型值,将对象强制转换为String 是通过ToPrimitive抽象操作完成的,而toJSON()是返回一个能够被字符串化的安全的JSON值。

操作符

操作符是空间元素连接的纽带之一,JavaScript操作符包括算术,连接,相等,比较,逻辑,位,类型判断,条件,new,delete, void,",", ".", "[]"等。

在JavaScript中以操作符进行操作往往都附带着类型转换。

一元运算符+ 是显式强制类型转换,而~是先转换为32位数字,然后按位反转。|| 和&& 更应该算是选择器运算符,其返回值不一定是布尔值,而是两个操作数其中的一个值。一般先对第一个操作数进行toBoolean强制类型转换,然后再执行条件判断。例如:a||b 理解成a?a:b 更通俗。对&& 而言,如果第一个是真值,则把第二个作为返回值,a&&b 理解成a?b:a 。

== 和=== 都会对操作数进行类型检查,并执行隐性类型转换,需要注意的是: 

  • 如果两边的值中有true或false,千万不要使用==

  • 如果两边有[],””或者0,尽量不要使用==

这里是Github上关于各种相等性的矩阵: 

语句与表达式

操作符与变量/常量等连接形成了语句和表达式,例如表达式a+1中的null 被强制转换为0。 语句包括声明与块,控制语句有判断,循环,break,continue,return,异常等。每个语句都有一个结果值,哪怕是undefined。

正则表达式是非常重要的一类表达式,主要使用RegExp类,执行方法test效率高,exec 会得到一个结果对象的数组。

逗号运算符可以把多个独立的表达式串联成一个语句,{ }在不同情况下的意思不尽相同,作为语句块,{ ..} 和for/while循环以及if条件语句中代码块的作用基本相同。{a,b} 实际上是{a:a,b:b}的简化版本。

try..catch..finally 中,如果finally中抛出异常,函数会在此处终止。需要注意的是,如果此前try中已经有return设置了返回值,则该值会被丢弃。finally中的return也会覆盖try和catch中的return的返回值。

函数与作用域

函数就是具有运算逻辑的对象,匿名函数不利于调试,回调函数是一种控制反转。所有的函数(对象)都具有名为prototype的属性,prototype属性引用的对象是prototype对象;所有的对象都含有一个隐式链接,用以指向在对象生成过程中所使用的构造函数的prototype对象。

匿名函数没有name 标识符,具有如下缺陷: 

  1. 代码更难理解

  2. 调试栈更难追踪

  3. 自我引用(递归,事件(解除)绑定,等)更难

如果function是声明的第一个词,那就是函数声明,否则就是函数表达式。立即执行函数表达式形如:(function …)( )

时空密不可分,作用域是时空连接的纽带之一。作用域包括全局,函数,块级作用域。作用域是根据名称查找变量的一套规则,遍历嵌套作用域链的规则简单:引擎从当前执行作用域逐级向上查找。闭包可以理解为具有状态的函数。

函数作用域指属于这个函数的全部变量都可以在整个函数的范围内使用或复用。块作用域形如 with, try/catch, ES6 引入了let,const等。

动态作用域并不关心函数和作用域是如何声明以及在何处声明的,只关心它们从何处调用的。词法作用域是定义在词法分析阶段的作用域,词法作用域查找会在第一个匹配的标识符时停止。作用域链是基于调用栈的,而不是代码中的作用域嵌套。ReferenceError 是与作用域判别失败相关,而TypeError则是作用域判别成功,但是对结果的操作非法或不合理。

this 提供了一种优雅方式来隐式“传递”一个对象引用。 this 即没有指向函数的自身,也没有指向函数的作用域,是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用。如果分析this绑定的话,可以使用调试工具得到调用栈,然后找到栈中的第二个元素,就是真正的调用位置。

this 的绑定规则有:

  1. 默认绑定:独立的函数调用,严格模式不能将全局对象用于默认绑定

  2. 隐式绑定:把函数调用中的this 绑定到函数引用中的上下文对象

  3. 显式绑定:通过call()和apply()方法可以直接指定this的绑定对象。其中,硬绑定是一种显式的强制绑定,ES5中提供了内置方法Function.prototype.bind, API中调用的上下文和bind的作用一样。

  4. new 绑定,构造函数只是一些使用new操作符调用的函, 使用new 来调用函数的操作过程大致如下:

  • 创建一个全新的对象

  • 这个新对象会被执行[[Prototype]]链接

  • 这个新对象会绑定到函数调用的this

  • 如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象

如果同时存在多种绑定,那么绑定的优先级大致如下:

  1. 由new调用绑定到新创建的对象

  2. 由call 或者apply(或bind)调用绑定到指定的对象

  3. 由上下文对象调用绑定到那个上下文对象

  4. 默认在在严格模式下绑定到undefined,否则绑定到全局对象

更安全地使用this 绑定的做法是传入一个特殊的对象,把this 绑定到这个对象。需要注意的是,箭头函数不使用this的4种规则,而是根据外层(函数或全局)作用域来决定this。

还要注意一点,eval 和 with 会导致作用域变化而引起性能下降,尽量不要使用。eval() 函数中的字符串是代码,用来执行动态创建的代码,严格模式有自己的作用域,还存在安全隐患;with 是重复引用一个对象中的多个属性的快捷方式,通过将一个对象的引用当作作用域来处理,会改变作用域范围。

处理和执行方式

JavaScript引擎本身没有时间概念,只是一个按需执行任意代码片段的环境,事件调度总是由包含它的宿主环境来执行。一旦有事件需要运行,事件循环队列就会运行,直到队列清空,用户交互、IO和定时器等事件源会向事件队列加入事件。

由于JavaScript的单线程特性,很多函数的代码具有原子性。

回调函数封装了程序的延续性,常见设计是分离回调(一个用于成功通知,一个用于出错通知)。另一种回调模式是“error-first”,可能受到防御式编程的影响,NodeJS API 采用了此类的风格,如果成功的话,这个参数就会被清空。需要注意的是,回调函数的嵌套往往称为回调地狱。

Deferred是一种将异步处理串联书写并执行的机制,Deferred对象是一种具有unresolved,resolved,rejected 中某一种状态的对象。Deferred内部机制是先注册回调函数,Deferred对象状态发生变化时执行该函数,是一种提高代码可读性的机制。

Deferred对象的状态迁移只能发生一次,以then(),done(),fail(),always(),pipe()指定后续函数的方法,通过when()来并行处理,将Deferred 对象中的一部分方法删除后得到是Promise对象,对状态的管理由最初创建该Deferred对象的所有者来执行。

Promise 封装了依赖于时间的状态,从而使得本身与时间无关,Promise 可以按照可预测的方式进行,而不用关心时序或底层的结果。一旦Promise决议完成,就成为了不变值,可以安全地吧这个值传递给第三方,并确保不会改变。

Promise 是一种在异步任务中作为两个或更多步骤的流程控制机制,时序上的this-then-that。 不仅表达了多步异步序列的流程控制,还是一个从一个步骤到下一个步骤传递消息的消息通道。事件监听对象可以当成是对promise 的一种模拟,对控制反转的恢复实现了更好的关注点分离。

判断是否是Promise 值的示例代码如下:

if(p !==null &&( typeof p ===“object” || typeof p ===“function”) && typeof p.then===“function”){console.log(“thenable”);}
else{console.log(“not thenable”);
}

生成器是一类特殊的函数,可以一次或多次启动和停止,并不非的一定要完成,生成器把while true 带回了Javascript的世界。其中,yield 委托的主要目的是代码组织,以达到与普通函数调用的对称。从生成器yield出一个Promise, 并且让这个Promise 通过一个辅助函数恢复这个生成器,这是通过生成器管理异步的好方法之一。 

需要注意的是,如果在Promise.all([..]) 中传入空数组,会立即完成, 而Promise.race([..]) 则会挂住。 在各种Promise库中,finally ( .. ) 还是会创建并返回一个新Promise的。

模块与库

模块和库是JavaScript 时空中的另一纽带,提高了代码的复用性和开发效率。

模块充分利用了闭包的强大能力,从模块中返回一个实际的对象并不是必须的,也可以直接返回一个内部函数,例如:jQauery 和 $标识符就是jQuery 模块的公共API。

模块有两个必要条件: 

  1. 必须有外部的封闭函数,该函数必须至少被调用一次 

  2. 封闭函数必须返回至少一个内部函数,这样内部函数才能在私有作用域中形成闭包,并且可以访问或修改私有的状态

import 可以将一个模块的一个或多个API导入到当前作用域中,并分别绑定在一个变量上;module 则将整个模块的API 导入并绑定到一个变量上, export 将当前模块的一个标识符导出为公共API。

大多数模块所依赖的加载器/管理器本质上是将这种模块定义封装进一个API。基于函数的模块并不是一个能被静态识别的模式(编译器),API定义只有在运行时考虑进来。但是ES6 模块的API 是静态的,必须被定义在独立的文件中。

JavaScript 中的库浩如烟海,这里仅对JQuery做简要说明。JQuery压缩后大约31k,轻巧灵活,通过链式语法实现逻辑功能,通过CSS3选择器及自定义选择器获取元素,支持插件,可扩展性高。

JQuery中 的特色函数——$ ,可以抽取与选择器匹配的元素,或者创建新的DOM元素,将已有的DOM元素转换为jQuery对象,对DOM构造完成后的事件监听器进行设定等等。JQuery 对DOM,样式,AJAX 均可有效处理。

通过扩展JQuery.fn 就可以创建JQuery的插件,code.google.com/apis/libraries 给出了很多JQuery 的插件信息。

利用JavaScript 的时空观,可以对这一语言有一些基本的梳理。就语言本身而言,关键字是不能回避的,对JavaScript 关键字,在StackOverFlow中有人给出了如下诗一样的总结:

Let this long package float,
Goto private class if short。
While protected with debug case,
Continue volatile interface。
Instanceof super synchronized throw,
Extends final export throws.Try import double enum?
-False, boolean, abstract function.
Implements typeof transient break!
Void static,default do,
Switch int native new,
else, delete null public var,
In return for const, true, char,
…… finally catch byte.

客户端应用

一门语言所被使用的广泛程度取决于使用的场景,正如PHP被广泛采用那样,互联网应用不仅是JavaScript 的家乡,而且是它大展身手的最重要场所,没有JavaScript 的Web应用几乎绝迹了。

web应用中使用JavaScript有拖拽操作,异步读取,键盘访问 和动画效果等基本功能。对于清晰地使用JavaScript实现Web应用而言,理解浏览器网页处理过程是必要的。一般地,浏览器先分析HTML,然后构造DOM树,再载入外部Javascript 文件以及CSS文件,接下来载入图像文件等外部资源,最后在分析Javascript后开始执行至全部完成。

在HTML中加载JavaScript的方式有多种:

  • <script> 标签,在body 结束标签前写

  • 读取外部JavaScript 文件,读取完就开始执行,浏览器可以缓存

  • onload 事件加载

  • DOMContentLoaded是在完成HTML解析后发生的事件,也可以用于加载JavaScript

  • 动态载入,这样JS在载入时不会阻断其他操作,如

    var script = document.createElement(‘script’);

    script.src = ‘my-javascript.js’;

    document.getElementsByTagName(‘head’)[0].appendChild(script)

window对象是JavaScript所能操作的最高层对象,其中的属性包括navigator,location,history,screen,frames,document,parent,top,self 等。

DOM 是一种API,完成对HTML/XML 的树形结构访问,如标签,元素,节点等。节点可以通过ID,标签名,名称和类名进行检索,例如:

var element = document.getElementById(“abel”)
var allelements = document.getElementByTagName(‘*’) 

由于返回的是NodeList对象,性能较差,可以通过 var array = Array.prototye.slice.call(allelements)转换为array 后处理。节点的访问可以通过XPath 进行灵活的访问,当然,Selector API 比XPath更简单且同样灵活,例如:

var a_label = document.querySelector(‘#abel’)
var b_all = document.querySelectorAll(‘div’)

如果先修改DocumentFragment,再对实际的document对象操作,DOM 的操作性能会较高一些。

事件侦听器的设定可以制定HTML元素的属性,也可以指定DOM元素的属性,还可以通过EventTarget.addEventListenser()进行指定。事件的处理包括捕获,目标处理和事件冒泡三个阶段,捕获的过程是:

 window -> document -> html -> body -> div -> button  

然后处理器执行,冒泡向上传播的过程是遍历DOM树,需要注意的是 focus 不会冒泡。

DOM2中的标准事件有HTMLEvent,MouseEvent,UIEvent和MutationEvent。DOM3 中的事件更多:UIEvent,FocusEvent,MouseEvent, WheelEvent, TextEvent,KeyboardEvent 和compositionEvent等,还可以通document.createEvent来自定义事件。

通过JavaScript 对CSS样式变更的方法有通过className 属性变更class名,通过classList属性更改class名(其中classList 是H5对DOM TokenList接口的实现),还可以更改Style 属性或者直接更改样式表。通过JavaScript可以对屏幕位置(screenX,screenY),窗口位置(clientX,clientY),文档坐标(pageX,pageY,由浏览器自行实现的),特定元素内的相对位置(layerX,layerY 或offsetX offsetY)进行修改。通过JavaScript可以对表单中的元素,控件和内容进行验证,可用于验证的事件有submit,focus,blur,change,keydown/up/press,input。使用表单而不产生页面跳转的方式可以是指向到一个 (0,0 )的空iframe。

对于动画而言,css的动画性能一般要更好一些。

AJAX 在Web应用中是不可或缺的,简单地说,是一种不发生页面跳转就能异步载入内容并改写页面内容的技术,主要通过 XMLHttpRequest 对象的创建,实现通/异步通信,处理超时和响应。AJAX有着跨源限制,实现跨源通信的方式有:JSONP,iframe hack,window.postMessage() 以及 XMLHttpRequest Level 2。

HTML5+CSS3+JavaScript的综合使用才可能成就一个Web应用。H5中的 History API 使用了window属性的history对象监听popstate事件,用于恢复页面状态的处理。ApplicationCache 在html标签的manifest 属性中指定了缓存清单文件的路径,必须通过text/cache-manifest 这一MIME type 来发布缓存清单文件,注意清单中的CACHE,NETWORK,和FALLBACK 的区分。

通过navigator.onLine 可以获知网络状态,还可以通过online/offline事件来侦听连接状态的切换时机。online/offline事件是document.body 触发的,并传给document对象和window对象。

<p> network is : <span id = “indicator”> (state unknown) </span> </p>
<script>
{function updateIndicator = document.getElementById(‘indicator’);indicator.textContext = navigator.online?’online’:’offline’;
}
document.body.onload = updateIndicator;
document.body.ononline= updateIndicator;
document.body.onoffline = updateIndicator;
</script>

DataTransfer 是Drag Drop API 的核心,在所有拖拽事件的事件对象中,都有该属性,主要是接收数据。拖拽文件从浏览器保存到桌面:event.dataTransfer.setData(‘DownloadURL’,’MIMETYPE: 文件url’)例如:

    <a href=“http://a.b.c/abel.pdf” data-downloadurl = “application/pdf:abel.pdf:http://a.b.c/abel.pdf”class=“dragout” draggable = “true”>download </a><script>var files = document.querySelectorAll(‘.dragout’);for (var i = 0,file; file =files[i];i++) {file.addEventListener(‘dragstart’,function(event){event.dataTransfer.setData(“DownloadURL”,this.dataset.downloadurl);},false);}</script>

FileAPI 通过FileReader 读取文件,也可以读取dataURL,FileReaderSync 用于同步读取文件内容,可以在Web Worker 中使用。

Web Storage 为所有源共享5M空间,localStorage 和sessionStorage 的区别在于数据的生命周期。cookie 最大4k,发请求时一起发送,保存会话等重要信息。indexedDB 可以归为文档型数据库, 作为客户端存储又一选择。

var indexdb = window.indexDB||window.webkitIndexedDB||window.mozIndexedDB;

Web worker 是H5 的新特性,是宿主环境(浏览器)的功能,JavaScript 本身是不支持多线程的。专用的worker 与创建它的程序之间是一对一的关系。

Web worker 能在另外的线程中创建新的Javascript 运行环境,使JavaScripts可以在后台处理。主线程和工作线程分离,无法使用对方环境的变量。工作线程无法引用document对象,需要通过消息收发完成数据传递。 在主线程创建工作线程,大约向var worker = new Worker(‘work.js’)这样 在主线程中停止worker的方式是worker.terminate(); worker 自身停止的方式是 self.close();worker 中 可以通个 importScripts 方法,在工作线程内读取外部的文件。

了解了这些基础方式和方法,仅仅是Web应用中JavaScript开发的第一步吧。

服务端应用

技术系统总是又着向超系统进化的趋势,JavaScript 也不例外。

JavaScript 应用于服务端的开发源于2009年初出现的CommonJS,后来成为为了服务器端javaScript的规范。基于JavaScript没有模块系统、标准库较少、缺乏包管理工具等现状,CommonJS规范希望JavaScript可以在任何地方运行,以达到Java、C#、PHP这些后台语言具备开发大型应用的能力。CommonJS是一种思想,它的终极目标是使应用程序开发者根据CommonJS API编写的JavaScript应用可以在不同的JavaScript解析器和HOST环境上运行,例如编写服务端应用,命令行工具,基于GUI的桌面应用和混合应用编程等,详情参加 www.commonjs.org 。

NodeJS可以理解成CommonJS规范的一种实现,而且是部分实现。NodeJS以V8作为JavaScript的实现引擎,通用的异步处理事件循环,提供了一系列非阻塞函数库来支持实践循环特性。同时,NodeJS提供了高度优化的应用库,来提高服务器效率,例如其http 模块是为快速非阻塞式http服务而用C语言重写的。另外,NodeJS还有shell的命令行工具,通过包系统实现扩展,扩展列表可以详情参见: GitHub.com/node/wiki/modules。

JavaScript 中的主要实现引擎包括:IE采用的JScript,Firefox采用的SpiderMoneky,Chrome 采用的V8,Safari采用的webkit中的 javacriptcore灯。如果要对引擎有进一步的了解,可以研读一下javascriptcore等相关的源代码。

V8 是NodeJS 中的核心引擎,NodeJS的系统架构大致如下:

与浏览器相对应,Node 中的全局变量可以通过 Object.keys(global); 获得, 看一看NodeJS中的 “hello world” 程序:

var http = require('http');
http.createServer(function (req,res){res.writeHead(200,{'Content-type':'text/plain'});res.end('Hello Node.js \n');
}).listen(1234,"127.0.0.1");
console.log('Server running on http://127.0.0.1:1234/');

几行代码就实现一个简单web server, 使Pythoner 们联想到了 Tornado, 它们都走在单线程异步IO的路上。

NodeJS 提供了对https 的支持,可以通过openssl 生成证书的方式大致是:

openssl req  -new -x509 -keyout key.pen -out cert.perm

使用证书的示例如下:

var fs  =require(‘fs’);
var options = {key: fs.readFileSync(‘key.perm’);cert:fs.readFileSync(‘cert.perm’);
}

NodeJS支持socket 和文件处理,配合系统扩展可以使用各种模版语言。基于NodeJS的实际在业界非常广泛,比如面向websocket的IM系统,各种web应用网站等等。

鉴于微服务架构的兴起,也诞生了基于Node的微服务架构——Seneca,它使用完备的模式匹配接口来连接各个服务,从代码中将数据传输抽象出来,使编写具有高扩展性的软件变得相当容易。Seneca 没有使用依赖注入,但是在处理控制反转上相当灵活,没有关键字和强制的字段,只需一组键值对,用于模式匹配的引擎中。具体参考实现,可以参考《Node.js 微服务》一书。

基于JavaScript的全栈

如果在整个应用系统中主要使用JavaScript编程语言作为技术栈,那么也可以成为基于JavaScript 的全栈,关于全栈的论述可以参加《全栈的技术栈设想》和《再谈< 全栈架构师>》两篇文字。例如MEAN架构,即MongoDB + Express + Angular + Node,MEAN 技术栈代表着一种完全现代的 Web 开发方法:一种语言运行在应用程序的所有层次上,从客户端到服务器,再到持久层。借助JavaScript的测试框架,比如MochaJSJasmineJS 和 KarmaJS,可以为自己的 MEAN 应用程序编写深入而又全面的测试套件,说MEAN有取代LAMP/LNMP的的趋势,但还需保持谨慎。

引擎的差异

正像Java 那样,尽管又着虚拟机规范,但各个JVM的实现还是有着些许的不同,JavaScript 也是如此。JavaScript各引擎中同样存在着少量的限制,例如:

  • 字符串常量中允许的最大字符数

  • 作为参数传递到函数中的数据大小(栈大小)

  • 函数声明中的参数个数

  • 函数调用链的最大长度

  • 以阻塞方式在浏览器中运行的最大时间

  • 变量名的最大长度

尽管如此,JavaScript 在浏览器中的表现还是基本上可信的。

从软件到硬件

实际上,JavaScript已经嵌入到了从机器人到各种家电等各种各样的设备中。这里隆重推荐我非常敬佩的好友——周爱民老师,他在Ruff(南潮信息科技)做的事情就是JavaScript 在物联网上的进一步应用。

Ruff 是一个可以让开发者实现敏捷开发智能硬件的系统平台。它包含了Ruff SDK、Ruff OS,Rap Registry等。从技术上讲,Ruff 是一个 JavaScript 运行时,专为硬件开发而设计。Ruff 对硬件进行了抽象,使用了基于事件驱动、异步 I/O 的模型,使硬件开发变得轻量而且高效。硬件抽象层,使得操作硬件犹如普通程序库,降低了硬件领域进入门槛。

Ruff 为开发者提供了完善的开发服务。从项目生产、软件包管理、应用管理、外设管理到固件管理等一系列现代软件开发方式,PC 端完成开发,无需烧板子,提升开发者的开发效率。Ruff 还提供了完善的测试框架,支持 assert、test、mock 等模块,在开发机上测试逻辑,硬件测试也能 TDD。

官网(ruff.io) 上给出的示例如下:

$.ready(function() {$('#led-0').turnOn();
});

打开电路板上的一个LED 灯,就是如此的简单。目前,一个 Ruff 硬件同时只能运行一款 Ruff 应用,它将拥有自己独立的进程,着可能也受到JavaScript自身的限制吧。

关注性能

性能是全栈关注的一个重要维度,那句“过早优化是万恶之源”实际上是我们对高德纳先生的断章取义,原文是这样的:

我们应该在例如97%的时间里,忘掉小处的效率;
过早优化是万恶之源。
但我们不应该错过关键的3%中的机会。

实际上是非关键路径上的优化是万恶之源,问题在于如何确定我们的代码是否在关键路径上。不论节省的时间多么少,花费在关键路径上的性能优化都是值得的。

对于性能优化工具,用于JavaScript源代码压缩有 google Closure complier,packer,YUI compressor,JSmin等。页面的性能优化工具有YSlow 和Page Speed等。实际上,任何有意义且可靠的性能测试都是基于统计学上的合理实践。 就JavaScript 代码本身的性能而言,benchmarkjs 是一个很好的工具,而jsperf.com 提供了对JavaScript 执行环境的性能测试。

总之,JavaScript 是一个具有强大生命力的语言,前端框架更是日新月异,从Angular,Vue,到React, 乃至React Native,给人以目不暇接的感觉,但是,老码农觉得基础认识还是非常必要的,勿在浮沙筑高塔。

 

原文链接 http://blog.csdn.net/wireless_com/article/details/69055330

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Hexo搭建教程

    Hexo简介 Hexo是一款基于Node.js的静态博客框架,依赖少易于安装使用,可以方便的生成静态网页托管在GitHub和Coding上,是搭建博客的首选框架。大家可以进入hexo官网进行详细查看,因为Hexo的创建者是台湾人,对中文的支持很友好,可以选择中文进行查看。 Hexo搭建步骤安装Git…...

    2024/4/15 4:03:34
  2. JavaScript 学习随笔(一)

    背景1)隔壁项目组一姐妹组织了一个培训,主题是《es6 编程实践 & node.js项目脚手架》。es6 ? es 不是 elasticsearch么?这么快就出 6了,上个月还是 5.2.x 啊 2) 做数据采集这一块不拿下 js 是没法愉快的干活了?直觉告诉我 GrowingIO的‘无埋点’与 神策的‘全埋点’…...

    2024/4/18 18:24:07
  3. 前端资源

    首页新手入门API关于注册登录作者 i5ting积分: 19520“ 狼叔说:少抱怨,多思考,未来更美好 ”作者其它话题Node.js的 Global全局对象Node.js写爬虫系列测试请发到客户端测试专区,违规影响用户的,直接封号2017,我们来聊聊Node.js北京7月29日NodeParty活动总结无人回复的话题…...

    2024/4/18 14:46:18
  4. [ 后端篇 ] 01 - Node 学习之路

    今年的主要目标之一就是从嵌入式底层开发到后端开发的转变,尽快熟悉后端的开发环境,开发环境。其中主要熟悉的有:Node 语言语法运用,结合第三方插件的使用 Express 框架使用 Mongodb 数据库使用现有框架的语言主要以Node.js为主,经过一周时间的琢磨,查阅的不少文章,同时也…...

    2024/4/15 4:03:31
  5. Vue.js 原理与开发概要

    Vue.js 是构建 Web 界面的渐进式 JavaScript 框架,通过简洁的 API 提供高效的数据绑定和灵活的组件系统,可用于开发 SPA(单页面应用) 网站。本文概述了 Vue.js 所依赖的 ECMAScript 概念,Vue.js 相比于同类产品的优势,总结了 Vue.js 的开发方法。 作者:王克锋 出处:http…...

    2024/4/15 4:03:30
  6. 学习vue

    参考教程 总: http://www.open-open.com/lib/view/open1476240930270.html http://www.cnblogs.com/xuange306/p/6092225.htmlroute-link :...

    2024/4/18 17:38:26
  7. 超详细Hexo创建个人博客

    Hexo创建个人博客搭建过程1.git安装2.Node.js安装3.Hexo安装4.GitHub创建仓库5.生成SSH添加到GitHub6.将hexo部署到GitHubHexo常用指令简介 Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。…...

    2024/4/15 4:03:27
  8. 拿不到offer退全款 | 廖雪峰的“Web 全栈架构师”开班了!

    互联网时代已进入后半场,行业环境发生了显著变化。互联网人,尤其是技术人员,如何在加速更迭的技术浪潮中持续充电,提升自身价值,是当下必须面对的挑战。《Web 全栈架构师》课程是和阿里云深度合作,针对想进阶 Web 全栈架构师的前端从业者重磅推出的课程。1. 对接阿里云盾…...

    2024/4/15 4:03:26
  9. 前端漫漫路

    最新更新时间:2018年8月17日17:21:20 《猛戳-查看我的博客地图-总有你意想不到的惊喜》本文内容: 自己在前端知识的积累,以及对前端领域的认识我阅读的书籍《JavaScript权威指南》——淘宝前端团队 翻译,机械工业出版社,第六版,2016.11.23购买,86.2元 《深入浅出Node.js…...

    2024/4/24 13:20:22
  10. JavaScript学习之旅-导言篇

    为什么会学习JavaScript 我的学习方法 目前我所使用的资料 学习所用时间为什么会学习JavaScript?首先,我认为学习任何东西都是为了解决问题。无关语言好坏。而web应用发展的趋势使JavaScript越来越重要,加上node.js的出现使JS可以用于back-end的开发。再加上,前段时间在一家…...

    2024/4/24 13:20:21
  11. JavaScript中的this

    小编推荐:Fundebug专注于JavaScript、微信小程序、微信小游戏,Node.js和Java实时BUG监控。真的是一个很好用的bug监控费服务,众多大佬公司都在使用。本来不想写this的东西,因为实在是头晕啊,讲不清楚,JavaScript中的this真是让人抓狂,好在我们调试的时候发现错误,修改就…...

    2024/4/24 13:20:22
  12. JS学习笔记(慕课网)

    1. confirm(var or "str);点击确认,返回true;点击取消,返回false. 2. prompt(str1,str2)str1显示在消息对话框中的文本,不可修改;str2文本框中的内容,可修改点击确认,返回文本框中的内容即str2;点击取消,返回null 3.window.open("url","打开方式&…...

    2024/4/24 13:20:19
  13. module.exports、exports、export、import、export default区别

    写在前面 这里涉及到CommonJs和Es6的知识,因此,想要充分的认识他们,少年,你需要修炼下CommonJs和Es6了。 进入正题 CommonJs规范:module.exports、exports module.exports和exports 是commonJs的语法,大家熟知的node就是基于CommonJs语法设计的,node将每个文件视为一个拥…...

    2024/4/24 13:20:18
  14. koa写服务器脚本无法读取css文件(待解决)

    最近在跟着廖雪峰的教程学js的时候遇到的,有时无法读取到html 里的css文件 app.js: const Koa = require(koa); const router = require(koa-router)(); const bodyParser = require(koa-bodyparser); const nunjucks = require(nunjucks); const templating = require(./te…...

    2024/4/24 13:20:18
  15. 基于Github的个人博客快速搭建教程

    总算下定决心要把博客搭建起来了,之前一直因为想找工作的原因,没有整。现在清闲下来了,再加上最近心态放松了,不太想学习了,所以想着找点东西玩儿。个人博客的搭建是Hexo与Github配合进行搭建。通过Hexo你可以轻松地通过Markdown编写文章,除了支持Markdown本身的语法之外…...

    2024/4/24 13:20:17
  16. JavaScript笔记(CommonJS规范)

    参考网站:《模块-廖雪峰的官方网站》 《CommonJS规范》 《js模块化编程之彻底弄懂CommonJS和AMD/CMD》为了写可维护的代码,常把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。 在Node环境中,一个.js文件…...

    2024/4/24 13:20:15
  17. JavaScript 笔记一:背景介绍

    一、认识 JavaScript 1.网站开发模式: 设计,前端,后端 2.Web 前段:HTML, CSS, js 3.JavaScript 是一种轻量级的脚本语言;JavaScript一种直译式脚本语言;是一种动态类型、弱类型、基于原型的语言,内置支持类型;是一些简单指令的组合;可以应用于多种环境中,最常见的应用…...

    2024/4/15 4:03:46
  18. Git初级入门

    Git学习教程我最初的目的是在github上搭建个人blog,参考了一些资料, - 通过git如何搭建一个独立博客 - node.js+Hexo+Git搭建个人博客按照这些教程和资料我半懂的安装了nodejs,git,hexo。详细过程参考上面两篇博客。安装过程有些让人奔溃。我不知道是因为网速原因还是翻墙…...

    2024/4/15 4:03:47
  19. 使用hexo,-github,-coding搭建免费博客

    Updated March 6, 2018 准备环境 windows10 x64 node.js v8.9.3 git version 2.16.1.windows.4 Markdown编辑器:http://markdownpad.com/ 熟练掌握git和github的基本操作 参考廖雪峰教程: https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b…...

    2024/4/18 17:40:45
  20. JavaScript学习笔记(1):JavaScript基础语法的组成

    JavaScript学习笔记(1) JavaScript基础语法的组成 前言 我觉得学习一样的东西,就得将这门学问的知识进行分类。所以我的第一篇学习笔记想要将JavaScript的基础语法进行分类。不求尽善尽美,也不求严谨,但求简洁清晰,生动易懂,以尽可能少的类别划分JS的常用语法点。 第一类…...

    2024/4/20 12:22:25

最新文章

  1. pymilvus创建多向量

    pymilvus创建多向量 从 Milvus 2.4 开始&#xff0c;引入了多向量支持和混合搜索框架&#xff0c;单个collection可以支持10个向量字段。不同的向量字段可以表示不同的方面、不同的embedding模型甚至表征同一实体的不同数据模态。该功能在综合搜索场景中特别有用&#xff0c;例…...

    2024/4/27 5:30:20
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 安卓java打包uniapp原生插件 和 uniapp使用安卓android原生插件

    1.uniapp dcloud官方文档 简介 | uni小程序SDK 2.前提&#xff0c;需要有经验的安卓java开发人员&#xff0c;并且同时具备uniapp移动端开发经验。说明&#xff1a;android打包的.aar和uniapp需要的.aar是不一样的&#xff0c;uniapp需要的.aar是需要有一些特定配置的&#x…...

    2024/4/26 10:38:30
  4. 北航2023年考研机试题

    【问题描述】一共6个手机基站&#xff0c;具有记录手机连接基站的能力&#xff0c;6个手机基站分别为ABCDEF&#xff0c;他们具有自己的覆盖范围且任何两个基站的覆盖范围不想交&#xff0c;基站保存的手机登陆日志包括手机号&#xff08;11位&#xff0c;用字符串保存&#xf…...

    2024/4/23 6:26:10
  5. docker进行jenkins接口自动化测试持续集成实战

    文章目录 一、接口功能自动化测试项目源码讲解二、接口功能自动化测试运行环境配置1、下载jdk&#xff0c;maven&#xff0c;git&#xff0c;allure并配置对应的环境变量2、使用docker安装jenkins3、配置接口测试的运行时环境选择对应节点4、jenkins下载插件5、jenkins配置环境…...

    2024/4/21 18:28:02
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/25 18:39:22
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/25 18:39:22
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/25 16:48:44
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/26 16:00:35
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/25 18:38:58
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/25 18:38:57
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57