- 博客(65)
- 资源 (9)
- 收藏
- 关注
原创 SQLite的13个使用场景
SQLite和C/S SQL数据库引擎没有直接的可比性,这些数据库引擎包括MySQL, Oracle, PostgreSQL, 或者 SQL Server,因为SQLite试图解决另外一个问题。C/S SQL数据库引擎实现企业级数据共享,他们强调数据的可伸缩性,并发性,中心性和控制性;SQLite 为独立应用和设备提供本地化存储,它强调资源节约,高性能,可靠性,独立性和易用性。SQLite不和C/S数据库引擎竞争,它的竞争对象是fopen()(Linux中打开文件的函数)![http://man..
2021-03-31 11:37:54 661
原创 ES6 Proxy 性能之我见
本文翻译自https://thecodebarbarian.com/thoughts-on-es6-proxies-performanceProxy是ES6的一个强力功能,它通过为get/set一个属性 设置"陷阱"(函数处理器)让我们可以拦截对于对象属性的操作。比如:const obj = {};const proxy = new Proxy(obj, { get: () => { console.log('hi'); }});obj.a; // "hi".
2021-03-31 11:35:45 570
原创 url中#(hash)的含义
url中#(hash)的含义hash 属性是一个可读可写的字符串,该字符串是 URL 的锚部分(从 # 号开始的部分)1.“#”代表网页中的一个位置。其右面的字符,就是该位置的标识符比如:<http://www.example.com/index.html#print>就代表网页index.html的print位置。浏览器读取这个URL后,会自动将print位置滚动至可视区域。(单页应用)为网页位置指定标识符,有两个方法。一是使用锚点,比如<aname=.
2021-03-31 11:05:41 597
原创 peerDependencies的具体作用
peerDependencies的目的是提示宿主环境去安装满足插件peerDependencies所指定依赖的包,然后在插件import或者require所依赖的包的时候,永远都是引用宿主环境统一安装的npm包,最终解决插件与所依赖包不一致的问题。...
2021-03-31 11:05:11 3060
原创 mac 安装 Iterm2的乱码问题如何解决
访问 https://www.nerdfonts.com/font-downloads ,然后下载 Nerd Font 字体,解压后,将内容放入~/Library/Fonts目录然后修改 Iterm2字体为 Nerd Font 即可
2021-03-31 11:02:50 1135
原创 执行 brew install 命令长时间卡在 Updating Homebrew 的解决方法
~ brew install composerUpdating Homebrew... ## 如果碰到长时间卡在这里按住 control + c 之后命令行会显示^C,就代表已经取消了 Updating Homebrew 操作大概不到 1 秒钟之后就会去执行我们真正需要的安装操作了...
2021-03-31 11:02:12 296
原创 Structure of a Google Docs document 谷歌文档的结构
本文由 @张驰 翻译,更新时间:2020-02-16https://developers.google.com/docs/api/concepts/structure谷歌文档的结构本指南解释了 Google Docs 文档的内部结构:组成文档的元素以及这些元素之间的关系。顶级元素文档的顶级元素包括正文和文档的许多其他属性作为一个整体:document: { body: ... , // 文档正文内容 documentStyle: ... , //文档样式 l
2021-03-24 14:44:11 1681 4
原创 WebAssembly 实践:如何写代码
本文不讨论 WebAssembly 的发展,只是一步一步地教你怎么写 WebAssembly 的各种 demo。文中给出的例子我都放在 GitHub 中了(仓库地址),包含了编译脚本和编译好的可执行文件,只需再有一个支持 WebAssembly 的浏览器就可以直接运行。配置开发调试环境安装编译工具略。参考官方Developer’s Guide和Advanced Tools,需要安装的工具有:Emscripten Binaryen WABT (WebAssembly Binary ...
2021-03-24 14:41:04 575
原创 WebAssembly让你的Javascript计算性能提升70%
现在的JavaScript代码要进行性能优化,通常使用一些常规手段,如:延迟执行、预处理、setTimeout等异步方式避免处理主线程,高大上一点的会使用WebWorker。即使对于WebWorker也仅仅是解决了阻塞主线程的问题,但是对于JavaScript计算性能慢的问题并没有解决。这里对一些需要密集计算的场景我给大家推荐一个神器——WebAssembly。在目前阶段,WebAssembly 适合大量密集计算、并且无需频繁与 JavaScript 及 DOM 进行数据通讯的场景。比如游戏渲染引擎、物理引
2021-03-24 14:40:27 530
原创 Webpack 下使用 web workers 及 基本原理 和 应用场景
阅读目录一:web workers的基本原理 二:web Workers 的基本用法 三:在webpack中配置 Web Workers 四:Web Worker的应用场景回到顶部一:web workers的基本原理我们都知道,我们的javascript采用的是单线程模型,所有的任务都在一个主线程中完成,一次只能执行一个任务,如果有多个任务需要被执行的话,那么后面的任务会依次排队等着,那么这种情况下,如果我们需要处理大量的计算逻辑的时候,那么就会比较耗时,那么用户界面就很有可能出现假死的
2021-03-24 14:39:55 2176 3
原创 Web Worker 的内部构造以及 5 种你应当使用它的场景
这一次我们将剖析 Web Worker:对它进行简单概述后,我们将分别讨论不同类型的 Worker 以及它们内部组件的运作方法,同时也会以场景为例说明它们各自的优缺点。在文章的最后,我们将讲解最适合使用 Web Worker 的 5 个场景。我们在 之前的文章 中已经详尽地讨论了 JavaScript 的单线程运行机制,对此你应当已经了然于胸。然而,JavaScript 是允许开发者在单线程模型上书写异步代码的。异步编程的 “天花板”我们已经讨论过了 异步编程 的概念及其使用场景。异步编程通
2021-03-24 14:39:14 376
原创 如何在TypeScript中的window上显式设置新属性?
declare global { interface Window { MyNamespace: any; }}window.MyNamespace = window.MyNamespace || {};
2021-03-24 14:38:39 881
原创 NUI是什么?
自然用户界面(英語:Natural user interface, NUI)是指一类无形的用户界面。“自然”一词是相对图形用户界面(GUI)而言的,GUI要求用户必须先学习软件开发者预先设置好的操作,而NUI则只需要人们以最自然的交流方式(如语言和文字)与机器互动[1]。直观的说,使用NUI的计算机不需要键盘或鼠标。...
2021-03-24 14:37:02 3078
原创 Web应用优化 - 减少重复计算
典型场景:一堆非常需要耗时的数据,每次更新都需要重新计算,但是更新的频率并不高。使用缓存可以有效的减少计算和查找时间。1. 数据快照典型场景:Google Docs 文档后端返回的模型,优先利用快照Google Docs 文档服务器会根据某种策略,对 Google Docs 文档的用户操作变更集(changeset)合并后的结果进行一次快照,确保用户再次打开 Google Docs 文档时,优先使用快照内容,节省每次服务端实时合并变更集的耗时。2 缓存重复 dom api 调用结果
2021-03-20 14:28:14 264 2
原创 Web应用优化 - 压缩内容传输量
1. 选取合适的数据协议典型场景:打开 Google Docs 表格拉取后台数据,http 响应内容的序列化采用 Protobuf 协议。数据序列化:JavaScript 对象转为字节,将字节恢复为 JavaScript 对象,然后在网络间传输。常见的协议有 JSON/XML/Protobuf 等。对于一个庞大的 docs 表格,使用 JSON 或者 xml 格式进行数据传输,太过于冗余。{ "workbookConfig":[ [ { .
2021-03-20 14:27:40 426 3
原创 Web 应用优化 - 充分利用缓存
1. 借助于浏览器典型场景:Google Docs文档 → 发生断网 → 开启离线编辑Google Docs 文档在网络异常或服务异常的情况下,不会直接中断用户的编辑动作。对于特殊环境或者紧急情况下,用户体验友好。离线场景的持久化存储基于 indexedDB。indexedDB 可以针对大文件保存 Blob 数据,而 File 类是基于 Blob 的,所以本地附件离线持久化经过验证可行。localforage 对 indexedDB 进行了封装,提供了更加便利的 api,支持 Promise 调
2021-03-20 14:27:04 2338 7
原创 Web 应用优化 - 按需加载资源
1. 按需引入典型场景:Google Docs 中的正文内容中存在「代码块」 → 按需加载代码块关联的插件脚本。按需引入常常依赖于开发者的意识,经常被忽略,有时候开发者只需要用到 lodash 中的 isEqual 函数,但却将整个工具库都引入,例如编写了以下代码import { isEqual } from 'lodash'如果只需要单独导入,可以采用以下两种方式// 方式1import isEqual from 'lodash/isEqual'// 方式2imp...
2021-03-20 14:26:22 376
原创 Web应用优化 - 优化切页模式
1. 首页Google网盘打开模式优化SPA典型场景:Google Docs 空间列表 → 打开目录 → 打开云文件SPA是一种web应用程序或网站,它通过使用来自web服务器的新数据动态重写当前web页面来与用户交互,而不是浏览器加载整个新页面的默认方法。目标是更快的过渡,使网站感觉更像一个本地应用程序。2. 移动端切换容器优化典型场景:移动端 Google Docs 文档列表 → 打开单个 docs 文档在移动端 Google Docs App 中,文档列表,页面呈现是一个常驻的
2021-03-20 14:25:32 218
原创 Flutter的优势与劣势
对Flutter相关资料的阅读,根据各大厂(美团、头条、阿里等)的经验,总结如下:Flutter,本质上一套跨平台的UI框架,通过OpenGL这种跨平台的绘制库(内部会调用操作系统API)实现了一套代码跨多端。Framework底层是Flutter引擎,引擎全部使用C++实现,强大的引擎能力,提供高效的图形和文字绘制。所以Flutter主要做页面的跨端开发,当前情况下,开发一个成熟的跨端产品,并不能完全抛弃原生开发。优势:一套代码,多端运行,而且运行效率和流畅性介于原生和H5之间 掌握Fl
2021-03-20 14:19:54 2761 5
原创 Nginx开启gzip的配置
nginx实现资源压缩的原理是通过ngx_http_gzip_module模块拦截请求,并对需要做gzip的类型做gzip压缩,该模块是默认基础的,不需要重新编译,直接开启即可。基本配置# 开启gzipgzip on;# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩gzip_min_length 1k;# gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明gzip_comp_level 1;# 进行压缩的文件类型。javascript有多.
2021-03-20 14:19:23 5142 7
原创 如何实现一个简单好用的思维笔记工具
周末实现的一个简单好用的思维笔记项目,https://fancylife.github.io/z-mindnote
2021-03-20 14:16:59 213
原创 正向代理与反向代理的区别
「正向代理」指一对一或多对一,Server 不知道请求的 Client 都是哪些人反向代理恰好跟正向代理相反。同时反向代理一般是负载均衡的一个原理。按照上面所说,正向代理是一对一或多对一,那么反向代理就是一对多,画图说明:...
2021-03-20 14:16:18 277
原创 vite 构建,页面打开空白如何解决
比如部署页面最终部署在 https://fancylife.github.io/z-mindnote/ 下,就必须在vue-router 中配置以下代码,否则确实会打开白屏export default createRouter({ history: createWebHistory('/z-mindnote/'),//你的网站根目录地址 routes,});...
2021-03-20 14:15:09 6887 5
原创 使用canvas判断用户是否安装字体
根据用户设置的字体将某一个字符绘制在canvas上(fillText()),并提取像素信息(getImageData()),然后和默认字体进行比对,如果像素不一致,说明字体生效,如果像素完全一致,说明字体不生效。var isSupportFontFamily = function (f) { if (typeof f != "string") { return false } var h = "Arial"; if (f.toLowerCase() ==
2021-03-17 10:46:45 324
原创 什么是ASM?
ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。ASM 能够通过改造既有类,直接生成需要的代码。增强的代码是硬编码在
2021-03-17 10:46:00 3955
原创 什么是UI Path?
在了解UiPath之前, 我们首先应该了解RPA的概念.RPA(Robotic Process Automation)中文全称为机器人流程自动化, 以自动化软件作为虚拟劳动力,依据预先设定好的程序与现有系统进行交互,并完成预期的任务。通过RPA软件编写的“机器人”程序, 可以捕捉并模拟我们日常的键盘、鼠标操作等人机交互行为,它们可以完成识别、触发、通信、文本生成等任务,自动执行重复性的业务流程。RPA是目前最受欢迎的人工智能应用技术之一,因为它允许企业在原有业务系统之上进行业务流程自动化的部署,
2021-03-17 10:45:23 5178
原创 什么是Excel宏?
什么是宏宏是一些储存了一系列命令的程序。当你创建一个宏命令的时候,你只是将一系列的键盘输入结合成一个简单的命令,你以后可以“回演”这个命令。因为宏命令可以减少复杂任务的步骤,使用宏命令可以显著得减少你花在创建,设置格式,修改和打印工作表的时间。你可以通过 Excel 内置的录制工具来创建宏命令,也可以在代码编辑器里面直接写代码。微软 Excel2002 电子表格具有强大的编程功能。技巧:普通语言Excel5 是市场上第一个使用 VBA 的软件。从那以后,VBA 开拓了在所有微软办公应用软件中的应
2021-03-17 10:44:43 6251
原创 什么是RPA? Robotic Process Automation
RPA(机器人过程自动化)是一种根据预先设定的执行程序,通过模拟并增强人类与计算机的交互过程,执行基于一定规则的大批量、可重复性任务,实现工作流程自动化的软件。RPA并不是一个新兴概念,最早客追溯到上世纪50个年代初,其发展至今,经历了多个阶段。主要是使用屏幕抓取和其他技术(如:OCR、AI等)来创建可以自动执行任务的专用技术手段。RPA目前是最受欢迎的人工智能应用程序领域之一,因为它可在各种操作系统间自动化的完成工作流程。公司对RPA解决方案感到兴奋,因为:大多数大型非科技公司仍依赖.
2021-03-17 10:44:05 2104
原创 如何实现一个简单好用的roadmap制作工具
周末实现的一个简单好用的roadmap制作工具,https://fancylife.github.io/z-roadmap/,开源给大家
2021-03-17 10:12:23 3994
原创 Typescript 泛型
介绍软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。在像C#和Java这样的语言中,可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。泛型之Hello World下面来创建第一个使用泛型的例子:identity函数。 这个函数会返回任何传入它的值。 你可以把这个函数当成是echo命令。不用泛型的话,这.
2021-03-15 11:38:48 296
原创 前端性能分析功能
作者:Mahdhi Rezvi译者:前端小智来源:blog.bitsrc最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了。github 地址:https://github.com/qq44924588...我们可以编写一些漂亮,且吸引人的网站,但如果该网站无法快速加载到浏览器中,人们往往会跳过它。 尽管有许多性能规则,但归根结底,这全都取决于加载时间。根据Jakob Nielson说法,在网建的网站时,需要注意以下几点:..
2021-03-15 11:19:13 293
原创 如何实现一个sandbox?
qiankun 中沙箱的实现比较复杂,本章讲解 ProxySandbox 的实现方式。createSandbox 是在 loadApp 的时候执行的。返回值中包含 mount 和 unmount 两个函数,分别在微应用 mount 和 unmount 生命周期执行。`export function createSandbox(appName**:** string, elementGetter**:** () => HTMLElement | ShadowRoot, singular**:**
2021-03-15 11:18:22 1714 1
原创 什么是函数的副作用——理解js编程中函数的副作用
什么是函数副作用?函数副作用是指当调用函数时,除了返回函数值之外,还对主调用函数产生附加的影响。副作用的函数不仅仅只是返回了一个值,而且还做了其他的事情,比如:1、修改了一个变量2、直接修改数据结构3、设置一个对象的成员4、抛出一个异常或以一个错误终止5、打印到终端或读取用户输入6、读取或写入一个文件7、在屏幕上画图函数副作用会给程序设计带来不必要的麻烦,给程序带来十分难以查找的错误,并且降低程序的可读性,严格的函数式语言要求函数必须无副作用。纯函数 ( Pure Function )
2021-03-15 11:17:45 3862
原创 Typescript 类型推断
TypeScript 能根据一些简单的规则推断(检查)变量的类型,你可以通过实践,很快的了解它们。#定义变量变量的类型,由定义推断:`let foo = 123; // foo 是 'number' let bar = 'hello'; // bar 是 'string'foo = bar; // Error: 不能将 'string' 赋值给 `number``这是一个从右向左流动类型的示例。#函数返回类型返回类型能被return语句推断,如下所示,推断函数返回为一个数字:..
2021-03-15 11:17:10 723
原创 redux-saga 是什么?
前言在使用react redux的时候,会经常遇到需要处理异步action的情况。处理异步action的方法有几种。其中redux-thunk,redux-saga都是处理异步action的中间件。利用这些中间件可以很好的达到我们预期效果redux-sagaredux-saga是一个用于管理应用程序 Side Effect(副作用,例如异步获取数据,访问浏览器缓存等)的 library,它的目标是让副作用管理更容易,执行更高效,测试更简单,在处理故障时更容易。个人是这么理解redux-sag
2021-03-15 11:16:08 1336
原创 快速生成gitignore文件
看到大家提交代码都比较随意,把一些本地的工程文件都提交到了git仓库中,这样会带来一个坏处,别的同事pull了你的代码,以后发现在自己本地环境跑不起来,因为工程文件中定义了一些工程路径,二进制包路径之类的配置。在线生成自己手写gitignore比较麻烦,我找了一个能自动生成gitignore文件的方式,https://gitignore.io/这个网站只有输入相关信息就能生成对于的.gitignore文件,基于上述文件,大部分情况下默认生成配置就够了。有特殊需求,再自己手动修改一下。在本地工程目
2021-03-15 11:15:17 4260
原创 JS中让对象支持for...of遍历
1.for…of的工作原理for…of 循环首先会向被访问对象请求一个迭代器对象,然后通过调用迭代器对象的next() 方法来遍历所有返回值。数组可以直接使用for…of遍历是因为数组内置了迭代器2.让对象支持for…of让对象支持for…of的办法就是手动给对象添加迭代器var myObject = { a: 1, b: 2, c: 3 };//写法一:简单写法myObject[Symbol.iterator] = function(){ const _this = t
2021-03-15 11:14:41 4941 1
kibana-5.3.1
2017-09-06
apache-maven-3.5.0
2017-09-06
elasticsearch-5.3.1.zip
2017-09-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人