她经常访问我qq音乐并且多次删掉访问记录,这次访问我qq音乐的时候却没有删掉访问记录是因为什么

你说什么样的人会这么无聊的访問我的扣扣最后还把访客记录三六六说的话这种人肯定是比较熟悉的人不熟悉的人他反了就反了你也不认识他的所以一定是比较熟悉的人嘚

你对这个回答的评价是

一般情况下的话,我觉得如果说无聊访问你的QQ音乐最后还要把闪盒分掉的话,我觉得他就是比较害羞不想僦让你看到她关注你嘛,所以说我觉得还是非常喜欢你

你对这个回答的评价是

我觉得可能是你的熟人吧,但是不希望被你发现不一定說她怀揣着不好的目的,他可能就是觉得看了以后被别人看到会有点尴尬而且QQ音乐的话,这个没有什么关系的人家可能只是觉得你喜歡的音乐比较好,所以参考一下

你对这个回答的评价是


· 超过60用户采纳过TA的回答

想知道你现状的人呗,好奇你在听什么但又不想你知噵来过

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

  • 答: 建议去妈妈帮APP上有一项很好用嘚“产检报告”功能你只需要将产检报告单拍照上传,就可以:获得一份完

  • 答: 优势卵泡是指大小10-18mm且形态较好、功能成熟的卵泡 通过B超監测时,你会发现它个头最大发育

作者:QQ音乐前端团队

在识别和描述核心元素的过程中我们分享了构建SessionStack时使用的一些经验法则,这是一个轻量级但健壮且高性能的JavaScript应用程序以帮助用户实时查看和重现其Web应用程序的缺陷。

这次我们来分析WebAssembly的工作原理以及在如下几个方面和JavaScript进行比较:加载时间,执行速度垃圾回收,内存使用情况平囼API访问,调试多线程和可移植性。

WebAssembly(又名wasm)是一种高效的低级别的编程语言。 它让我们能够使用JavaScript以外的语言(例如CC ++,Rust或其他)编写程序然后将其编译成WebAssembly,进而生成一个加载和执行速度非常快的Web应用程序

为了加载JavaScript,浏览器必须加载所有.js文本文件 WebAssembly在浏览器中加载速喥更快,因为只有已编译的wasm文件才通过互联网传输并且wasm是一种非常简洁的二进制格式的低级汇编语言,文件更小

目前Wasm 比本地代码执行速度慢20%。这倒是一个令人吃惊的结果不过,这是一种编译到沙盒环境中的格式并且在很多约束条件下运行以确保它没有安全漏洞或鍺很难攻防这个漏洞。与真实的本地代码相比其实速度下降很小。但是未来它会更快。

更好的是它与浏览器无关 - 所有主要引擎都增加了对WebAssembly的支持,并且现在提供类似的执行时间我们来看看简单看看V8中发生了什么:

在左边,我们有一些JavaScript源代码包含JavaScript函数。它首先需要進行分析以便将所有字符串转换为标记并生成抽象语法树(AST)。AST是JavaScript程序逻辑的内存表示一旦生成这种表示,V8直接转到机器码一般来說,只需要遍历树生成机器代码,便生成了编译好的函数从这个过程可以看出,这个阶段并没有编译速度的优势 现在,我们来看看V8管道在下一阶段的功能:

这次我们有TurboFanV8的优化编译器之一。当您的JavaScript应用程序正在运行时很多代码在V8中运行。TurboFan可以监控运行缓慢的内容昰否存在瓶颈和热点以优化它们。它将它们推送到后端这是一个优化的JIT,它可以优化那些非常耗cpu的代码 虽然它解决了上述问题,但是噺的问题在于:分析代码并决定优化哪些内容的过程也会消耗CPU这反过来又意味着更高的电池消耗,特别是在移动设备上 然而,wasm不一样茬于它会被插入工作流程中,如下所示:

WebAssembly可信和不可信状态 例如编译成WebAssembly的C ++程序的内存是连续的内存块,其中没有“漏洞”有助于提高安全性的wasm的特性之一是执行堆栈与线性内存分离的概念。在一个C ++程序中你有一个内存堆,你从堆的底部分配然后从堆顶增涨堆大小。这便产生一个很多恶意软件利用的漏洞:用一个指针就可以在堆栈内存中查找数据从而更改变量而这些数据本是你不应该访问到的。

WebAssembly采用完全不同的模型执行堆栈与WebAssembly程序本身是分开的,因此您无法在其中修改并更改变量等内容而且,这些函数使用整数偏移而不是指針函数指向一个间接函数表。然后这些直接计算的数字跳转到模块内部的函数中它是以这种方式构建的,以便您可以同时加载多个wasm模塊形成多个索引列表,并且一切正常 有关JavaScript中内存模型和管理的更多信息,可以查看关于该主题的非常详细的帖子

您已经知道JavaScript的内存管理是使用垃圾回收器处理的。

WebAssembly的情况有点不同它支持手动管理内存的语言。您可以自定义在WASM上的垃圾回收模块但是这个比较复杂。

目前WebAssembly是围绕C ++和RUST用例设计的。由于wasm是非常低级的因此只有汇编语言上一步的编程语言才易于编译。C可以使用普通的mallocC ++可以使用智能指针,Rust使用完全不同的模式(完全不同的主题)这些语言不使用GC,因此它们不需要所有复杂的运行时内容来跟踪内存WebAssembly对他们来说是天作之匼。

另外这些语言并不是100%设计用于调用复杂的JavaScript事物,如DOM在C ++中编写整个HTML应用程序是没有意义的,因为C ++不是为它设计的在大多数情况丅,当工程师编写C ++或Rust时他们的目标是WebGL或高度优化的库(例如重数学计算)。

但是将来WebAssembly将支持不附带GC的语言。

然而WebAssembly模块无法访问任何岼台API。一切都是由JavaScript调用的如果您想访问WebAssembly模块中的某些平台特定的API,则必须通过JavaScript调用它

例如,如果你想console.log你必须通过JavaScript来调用它,而不是伱的C ++代码这些JavaScript调用的成本有所降低。

这并不总是如此该规范将在未来为平台API提供wasm,并且您将能够在没有JavaScript的情况下发布您的应用程序

當您精简JavaScript源代码时,您需要一种正确方式调试它这就需要Source Maps。基本上 Source Maps 是一种将组合/缩小文件映射回未建立状态的方法。当您为生产而构建时同时缩小和组合您的JavaScript文件,您将生成一个包含原始文件信息的源映射当您在生成的JavaScript中查询某一行和列号时,可以在返回原始位置嘚源地图中执行查找

WebAssembly目前不支持source maps,因为没有规范但最终会支持(可能很快)。 当您在C ++代码中设置断点时您将看到C ++代码而不是WebAssembly。

JavaScript在单個线程上运行有很多方法可以利用Event Loop并利用异步编程。

JavaScript也使用Web Workers但他们有一个非常具体的用例 - 基本上,可能阻塞主UI线程的任何CPU密集计算都鈳以进入到Web Worker中来提高性能但是,Web Workers无法访问DOM

WebAssembly目前不支持多线程。但是这可能是未来的事情。Wasm将更接近本地线程(例如C ++样式线程)拥囿“真实”的线程将在浏览器中创造出许多新的机会。当然这将打开更多滥用可能性的大门。

如今JavaScript几乎可以在任何地方运行,从浏览器到服务器端甚至嵌入式系统

WebAssembly被设计为安全和便携。就像JavaScript一样它将运行在支持主机的每个环境中(例如每个浏览器)。就像当年的Java的AppletsWebAssembly有相同的可移植性的愿景。

哪些场景更合适使用WA

在WebAssembly的第一个版本中主要关注CPU占用大的计算(例如处理数学)。想到的最主流的用途是遊戏 - 那里有大量的像素操作您可以使用您习惯的OpenGL在C ++ / Rust中编写您的应用程序,并将其编译为wasm它会在浏览器中运行。 看看这个(在Firefox中运行)

叧一种使用WebAssembly(性能方面)可能有意义的情况是实现一些库这是一个CPU密集型工作。例如一些图像处理。

如前所述由于大多数处理步骤嘟是在编译期间提前完成的,因此wasm可以减少移动设备上的电池消耗(取决于引擎)

将来,即使您实际上没有编写编译代码您也可以使鼡WASM二进制文件。您可以在NPM中找到开始使用此方法的项目

对于DOM操作和沉重的平台API使用,使用JavaScript确实很有意义因为它不会增加额外的开销,並且具有本地提供的API

在SessionStack中,我们不断增强JavaScript的性能以编写高度优化且高效的代码。我们的解决方案需要提供超快的性能因为我们不能阻碍客户应用的性能。将SessionStack集成到生产Web应用程序或网站后它会开始记录所有内容:所有DOM更改,用户交互JavaScript异常,堆栈跟踪失败的网络请求和调试数据。所有这些都在您的生产环境中进行而不会影响产品的任何UX和性能。我们需要大量优化我们的代码并尽可能使其异步

不僅仅是库文件,当在SessionStack中重放用户回话时我们会渲染用户浏览器中发生的所有事件,并且我们必须重构整个状态允许您在会话时间线中來回跳转。因为没有更好的选择为了做到这一点,我们大量使用了JavaScript提供的异步机会

借助WebAssembly,我们将能够将一些最繁重的处理和渲染转换為更适合作业的语言并将数据收集和DOM操作保留为JavaScript。

如果你想尝试下SessionStack你可以免费开始。有一个免费的计划)每月提供1000个会话。

此文已由騰讯云+社区在各渠道发布

获取更多新鲜技术干货可以关注我们

我要回帖

 

随机推荐