Facebook发布全新JavaScript引擎Hermes:越来越像Java字节码,JS要统一全端?
by newghost keys JS学习 JavaScript 1563509511352
Facebook在Chain React 2019 大会上发布的一个崭新JavaScript引擎: Hermes,比传统JavaScriptJIT,即时运行的方式不同,Hermes需要先将JavaScript编绎成字节码,这一点很像是Java的方式。比测试可观察,Hermes引擎提升性能较为明显,使用预编绎,很容易得知这些提升所产生的原因。

  • 在应用程序可用的时间上,Hermes能提升一倍的时间效率(减少即时执行的语言解释过程)
  • 在安装包下载大小下,Hermes能减少50%的大小(JS被压缩成了字节码)
  • 在内存利用率上,Hermes能节省30%的内存使用(不需要在解释执行时额外产生的临时内存使用)
  • 在嵌入式设备树莓派上编译QuickJS教程:一个C语言编写的极简JavaScript引擎
    by ourjs keys JS学习 JavaScript 1563211266482
    QuickJS 是一个完全由C语言编写的极小型JavaScript引擎,作者是大名鼎鼎的FFmpeg和QEMU的创建者Fabrice Bellard以及C专家Charlie Gordon。QuickJS采用开源MIT协议,不限制商业用途。它是一个“小而完整的JavaScript引擎”,支持最新的ES2019语言规范。
    因为其复杂度要远远低于用C++编写的Google的V8和Mozilla的SpiderMonkey,因此非常适合在嵌入式设备上使用。
    因为完全由C语言编写,可以很方便地集成到一些著名的C语言程序比如,替换掉Redis和Nginx中的Lua脚本。
    由于可以单独将JS编绎成可执行文件,应用场景更加广泛。
    Node.JS的竞争对手?QuickJS入门教程,使用os模块读写文件,并将JavaScript编绎成可执行文件
    by ourjs keys JS学习 Node.JS 1563241334223
    QuickJS 是一个完全由C语言编写的极小型JavaScript引擎,支持跨平台运行,并且有一些Java的特质,可将JS直接编绎成二进制文件。内置的系统模块还可以直接读写文件,动态加载脚本。目前还不支持net模块,不过已经有人在pull request中提交了merge请求。不久将可以直接使用系统Socket或发送http请求,构建web服务器。

    由于非常精简,而且拥有JavaScript的全部功能,可以预见,QuickJS将是Node.JS在嵌入设备,尤其是低端设备上较强的竞争对手。
    树莓派4对比测试:性能提升3倍启动时间反而变慢?TF卡成最大瓶颈
    by ourjs keys 技术前沿 分享 1561438036895
    全新的第四代树莓派(Raspberry Pi 4)发布了,是有史以来最强的树莓派,性能可比主流电脑。但国外某位小哥在做完性能测试对比发现,相比3B,提升最大的是外接USB3.0的读写速度,提升了6倍。但其它性能提升并不是特别明显,启动时间反而变慢了。

    道理很简单,目前RaspberryPi 只能从TF卡启动,TF卡的读写速度目前只有10~30M/s。因而完全无法发挥出树莓派4千兆网卡,USB3.0的速度优势。反而要加载更多的系统驱动,启动时间变慢也不足为奇。
     
    树莓派3B+将原来100M网卡提升到了300M,而不是千兆也是出于这个原因,因为最大只能利用到30M/s的传输速度。未来树莓派要有质的提升,可能还需要更小,更便宜的固态硬盘出现了。不过目前接外一个USB3.0的移动硬盘也是个不错的选择。
    GO有语法缺陷,缺少泛型、public/private、三元运算符?我不喜欢 Go 语言的十个理由
    by ourjs keys 大话编程 分享 1561089850695

    Go 语言有多火爆?国外如 Google、AWS、Cloudflare、CoreOS 等,国内如七牛、阿里、知乎等都已经开始大规模使用 Go 语言开发相关产品,可以说它是近来风头最盛的编程语言之一。但再好的编程语言也不会是完美的编程语言,本文作者 Lawrence 使用了三年 Go 语言,并在这三年间参与了几个大型 Go 语言项目,但三年后他彻底放弃 Go 语言,而且不打算在新项目中使用它。

    Go 语言带给他的总体印象是:“好的方面非常好,不好的方面实在令人无法忍受”。Lawrence 在一篇博客文章中列出了他不再喜欢 Go 语言的十大理由,这篇文章很快在 HackerNews 上引发热议,下面就让我们一起来看看这十个理由到底有哪些。

    使用JavaScript的Proxy监听对象属性变化并进行类public/private的访问控制
    by ourjs keys JS学习 JavaScript 1559991024343
    Proxy是ES6的引入的一个对象监听机制。可视为JavaScript对象的一个代理中间件。用户在访问对象时,会触发自定义行为。
    Proxy最简单的用法是可以监听对象属性的变化,比如下面的,当 obj 的 visit 属性改变时,自动更新页面上相应的 input元素值。

    var obj = {}

    var handler = {
      set: function(target, name, value) {    
        //改变被代理对象的值,使之保持一致
        target[name] = value

        var input = document.querySelector('[name=' + name + ']')
        if (input) {
          input.value = value
        }
      }
    }

    var proxy = new Proxy(obj, handler);
    proxy.visit = 100
    JavaScript求一个字符串的字节长度
    by ourjs keys JS学习 JavaScript 1559174024852
    某些场景可能会对输入内容的字节长度有限制,比如说RSA加密算法。但 String.prototype.length 只会统计字符串的字符个数,并不是字节长度。

    同样的字符数,中文要比英文多占用1倍的空间。此时可以通过chartCodeAt来统计字符长度。
    Node.JS用RSA签名算法公钥加密私钥解密,实现License软件授权验证
    by ourjs keys JS学习 Node.JS 1558965941529
    在Node.JS经常用加密算法对一些敏感用户数据进行加密,比如说用户密码。而且用户密码不需要考虑解密,如果用户遗失密度,重置成新的已经新密码即可。此时用不可逆加密算法即可,对比加密后的字符串即可。

    还有一些应用需要解密出原内容的,比如说HTTPS的传输。使用公钥对HTTP请求进行加密,在服务器用私钥解密。此时需要用到不对称加密算法,在Node.JS中这种机制很容易实现:

    Node.JS借助OS模块获取当前Windows系统用户登录名
    by ourjs keys JS学习 Node.JS 1558340432960

    Node.js os 模块提供了一些基本的系统操作函数。可以借助os对象获取系统基本信息:


    $ node user.js
    { uid: -1,
      gid: -1,
      username: 'Administrator',
      homedir: 'C:\\Users\\Administrator',
      shell: null }
    Node.JS在命令行中检查Chrome浏览器是否安装,并打开指定网址
    by ourjs keys 编程技巧 Node.JS 1558333606904
    使用Windows命令行cmd可以指定浏览器打开网址。在node.js中使用start即可,但是当用户没有安装Chrome时使用start则会报错,并会弹出错误对话框,Chrome默认安装位置为:

    C:\Documents and Settings\{USERNAME}\Local Settings\Application Data\Google\Chrome\Application

    我们还需要借助os获取Windows当前登录的用户名,如果没有安装Chrome的话,则用IE打开,最终代码如下:

     近期热门 - 点击最多
    1. React结合vite使用vue3,在纯typescript的react hooks中使用vue
    2. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
    3. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别
    4. React Native使用fetch发送http登陆验证请求失败:无法读取set-cookie并显示network request failed
    5. 克服Redux的缺点在React/Native中使用消息队列,pubsub-js更加简洁的组件间通信和状态传递方法
    6. Springboot+Gradle+Mysql+Jpa最简单实例教程
    7. SpringBoot+Spring6入门指南: 使用命令行快速搭建restful web api模板
    8. 如何通过 winax 的 ActiveXObject 或 Excel.Application 往 excel 中插入一张图片
    9. node.js用activex/com+自动化读写excel时查询接口、参数的调试方法
    10. TypeScript定义数字范围类型即仅包含【小时:分钟】的时间类型,每天指定时间点执行任务

      全端社区 - 最新回复
    1. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
    2. Windows与Mac通过git ssh和rsync实现文件共享互传
    3. Windows与Mac通过git ssh和scp实现文件共享互传
    4. React结合vite使用vue3,在纯typescript的react hooks中使用vue
    5. 使用PubSub-JS时ReactNative在后台运行一段时间唤醒后,组件无法scribe到publish的事件,typescript实现一个事件订阅发布组件
    6. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别
    7. ReactNative获取Android/iOS的MAC/IP地址: react-native-device-info模块的安装与使用
    8. React Native使用fetch发送http登陆验证请求失败:无法读取set-cookie并显示network request failed
    9. 克服Redux的缺点在React/Native中使用消息队列,pubsub-js更加简洁的组件间通信和状态传递方法
    10. Springboot+Gradle+Mysql+Jpa最简单实例教程

      开源的 OurJS
    OurJS开源博客已经迁移到 OnceOA 平台。

      关注我们
    扫一扫即可关注我们:
    OnceJS

    OnceOA