Python 处理 JSON 必要时我选择 ujson 和 orjson

在 Python 使用用  json.dumps(data) 时突然发现特别慢,data 本身不大,但是一个包含很多元素的列表,所以促使本人寻找一个替代的 JSON 处理库。大概对比了一个 ujson(UtltraJSON), python-rapidjson(RapidJSON) 和 Python 自带的 json 库。还有一个 simplejson 是为兼容 Python 2.6 以前用的(json 是 Python 2.6 新加入的 API),性能有些差。

基本上姜还是老的辣,想要收获更好的性能,还得仰赖传统的 C/C++ 语言,ujson 是用纯 C 写的,RapidJSON 是 C++ 写的,后者还是十美分的开源产品。json, ujson, rapidjson 三者 loads() 方法的性能差别不太明显,但 dumps() 大对象时 Python 自带的 json 库就要考验用户的耐心了。

注:最开始本来认定了 ujson 为最佳选择, 所以先从 usjon 和 rapidjson 切入的,后来写作本文的过程中,从 usjon 的自我介绍中发现了 Rust 写的 orjson 很显眼,才加入了 orjson 的测试,看来 orjson 更值得拥有。

阅读全文 >>

解决 jvisualvm 启动后长时间 Computing description... 的问题

Java 虚拟机分析工具用 JDK 自带的 jconsole, jvisualvm, 和  jmc(Java Mission Control) 就已经非常好了,还真极少情况下(甚至没有)非得用商业的 Profiler 工具如 YourKit Java Profiler 或 JProfiler 的情况。用于实时观察 JVM 的内存, CPU, 线程等运行状况,对比 Heap 快照,发现线程死锁的应用情景,我比较喜欢用 jvisualvm(VisualVM)。

有很长一段时间,因为在家办公司,只要连接到公司的 VPN 后再执行 jvisualvm 来打开 VisualVM 时,会有很长的时间(可能长达 10 几分钟)卡在窗口右下角状态栏的 Computing description...,要等到它消失后才能开始连接 JVM,这时候我的 Java 应用可能早就退出了。要是本地不连 VPN 的话就正常,启动 VisualVM 是正常的,但调试有些工作项目又必须连接公司的 VPN。

这种使用 VisualVM 的体验有如恶梦一般,还是有经常要用到 VisualVM 的需求,所以再也不能忍受这种无谓的等待。依然是 Google + StackOverflow 的模式,找到原来罪魁祸首是 /etc/hosts 中的 127.0.0.1 这个条目。 阅读全文 >>

用一个例子理解 ES6 的 export/import 用法

使用了一段时间的 Vue.js 以后,其中有大量的 ES6 的 export/import 用法,如

import axios from 'axios';
import Home from '../views/Home.vue';
export default {
  data() { .... }

因为目前对 ES6 的 export/import 用法是一知半解的,所以基本上都是基于 vue-cli 创建的项目上依葫芦画瓢,更是不太理解 vue 的项目是如何由 main.js -> App.vue 把所有的 router, views, 和 components 串联起来的。为了进一步理清 Vue.js 项目的初步运行机制,现在开始着手试图通过一个例子来尽可能多的理解 ES6 的 export/import 用法。

我不是标题党,所以不可能命名如:理解 export/import 一篇就够了,全网最全诸如此类的。且本人博客主要是记录自己学习过程的,而非为了招人眼球。所以尽力吧,在一个代码例子中尽可能多的展示 export/import 的用法,为不增加代码的复杂性,有些技巧在代码后进行解释。 阅读全文 >>

Vue.js 项目使用 vue-prism-editor 语法高亮与编辑器

记录一下在 Vue.js 项目中使用 vue-prism-editor 进行语法高亮显示代码,并兼具代码编辑功能。JavaScript 中有几个比较典型的语法高亮显示的代码库,例如 SHJS, SyntaxHighlighter, Rainbow,   highlight.js。本博客曾经使用过 SyntaxHighlighter 来显示日志中的示例代码,现今所采用的是基于 PHP 的 Crayon Syntax Highlighter。除了只为了高亮显示代码外,有时候还需处理在线编辑代码,许多年前试用过 CodeMirror, 而今天要上手 Prism.js 也能够支持代码编辑。 

官方 Demo: prism-editor.netlify.com
Codesandbox:  https://codesandbox.io/s/61yrlnlnmn

为了给 Vue.js 项目提供方便,有人专门做了一个 Vue.js 的插件 vue-prism-editor,本文直接使用该插件,而非直接使用 Prism.js。并且项目蓝本用 @vue/cli 4.4.6 的命令

$ vue create vue-prism-editor-demo

创建的,创建过程可参考 Flask 和 Vue.js 开发及整合部署实例创建 Vue 项目一节,此文简单些,就只选择 default (babel, eslint) 默认项来创建 阅读全文 >>