Eyas

Results 32 issues of Eyas

最近启动了一个新项目 [eyasliu/electron-startkit](https://github.com/eyasliu/electron-startkit),在打包构建上有一些研究,主要是针对于 windows 程序的打包,其他平台的构建方式没有深入 试过了两个打包工具, * electron-packager * electron-builder 另外对优化打包后的体积优化有一些研究 # [electron-packer](https://github.com/electron-userland/electron-packager) 这个工具做的事情很单一:构建好之后把程序放在一个文件夹下,文件夹的 `[应用名].exe ` 就是应用启动入口,我们写的代码都被放到了 `resource/app[.asar]` 里面。这就是这个工具做的全部事情。 尽管做的事情单一,但是其提供了很多[可选项](https://github.com/electron-userland/electron-packager/blob/master/docs/api.md) 正是因为它的功能比较单一,所以用法也很简单,而且构建好的包很通用,可以配合其他工具一起使用,比如 [electron-winstaller](https://github.com/electron/windows-installer) 或者 [electron-wix-msi](https://github.com/felixrieseberg/electron-wix-msi) 进一步的打包成为 `msi` 安装包, 单个 exe 执行文件等等 ###...

nodejs
electron

# 为什么需要按需加载 在一个前端应用中,将所有的代码都打包进一个或几个文件中,加载的时候,把所有文件都加载进来,然后执行我们的前端代码。只要我们的应用稍微的复杂一点点,包括依赖后,打包后的文件都是挺大的。而我们加载的时候,不管那些代码有没有执行到,都会下载下来。如果说,我们 **只下载我们需要执行的代码的** 话,那么可以节省相当大的流量。也就是我们所说的 **按需加载** # 使用 webpack 的按需加载 [webpack 官方文档](http://webpack.github.io/docs/code-splitting.html) 其实是有介绍的,不过我还是啰嗦的在总结一下 首先我们要看一看一个加载函数 ``` js require.ensure(dependencies, callback, chunkName) ``` 这个方法可以实现js的按需加载,分开打包,webpack 管包叫 `chunk`,为了打包能正常输出,我们先给webpack配置文件配置一下chunk文件输出路径 ``` js // webpack.config.js module.exports = {...

前端
react

在新的项目中,由于必须要使用sqlite数据库,所以引入了 [`go-sqlite3`](https://github.com/mattn/go-sqlite3) 库,而且目标还是安卓开发板,板子是 `aarch64` 架构,也就是说,目的是要把启用了CGO的项目交叉编译到 aarch64 安卓系统。 本篇文章不局限于 aarch64 架构,其他架构同理,只是到时候下载的工具包不太一样 > 本文章使用的操作系统为 ubuntu 名词解释: * 交叉编译:是在一个平台上生成另一个平台上的可执行文件 * 静态编译:在编译可执行文件的时候,将可执行文件需要调用的对应库都集成到可执行文件内部,使得可执行文件不需要其他任何依赖就能运行 ## 无CGO项目的交叉静态编译 在不启用CGO的情况下,交叉编译是非常简单的,因为 golang 本身的交叉编译做的非常好 ```sh CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags...

服务器
go

# 纯函数 [这篇文章](http://eyasweb.com/#/blog/detail/6) 简单的介绍了一下纯函数 现在再来简单的概括一下: > 纯函数就是相同的输入,永远都会有相同的输出,没有任何可观察的副作用 一个函数,如果与外界完全没有任何联系,那么内部的逻辑完全不受外界影响,所以永远会有相同的输出,如: ``` js let addOne = x => x+1 ``` 他的输出永远都是对传入的值 +1 , 如果跟外界有联系,如 ``` js let shouldAdd = false; let addOne =...

前端
react

K3S 官网 :https://k3s.io/ K8S 和 K3S 是什么关系呢,官网原话 > k3s 旨在成为完全兼容的 Kubernetes 发行版,相比 k8s 主要更改如下: > > 1. 旧的、Alpha 版本的、非默认功能都已经删除。 > 2. 删除了大多数内部云提供商和存储插件,可以用插件替换。 > 3. 新增 SQLite3 作为默认存储机制,etcd3 仍然有效,但是不再是默认项。 > 4....

服务器

# 简化 WebSocket, TCP 等长连接的开发 ## 简介 根据之前的项目经验梳理了一下对于服务器端长连接(websocket, tcp)的开发模式,并且总结出了一套解决方案 ### HTTP 开发模式 先看看HTTP的开发模式有哪些爽点 - 协议稳定,无论是http 还是 https,他们的协议都是固定不变的,自己无需处理数据包问题 - 每次请求响应都是一个独立连接(即使因 keep-alive 复用同一个连接,在开发时也是无感知的 ) - 请求的连接状态,虽然http连接本身是无状态的,但是浏览器会自动处理 Cookie,或者往Header 带 Token,就相当于给这个请求赋予了状态 - 根据请求路径做路由映射,指定路由处理函数 -...

# 什么是 CDP Chrome Devtools Protocol, 就是 Chrome 浏览器用于开发调试的协议,Chrome 开发者工具底层就是调用的该协议,所以 chrome 开发者工具能干的事都是基于 CDP 的接口,就能想到 CDP 能干的事有多少了。事实上 CDP 有些功能在 Chrome 开发者工具并没有体现出来,也就是说 CDP 还更强大。 简单来说,CDP 就是用来控制 Chrome 的方方面面。 事实上 CDP 能控制的并不局限于 Chrome...

本文全程无干货,不建议阅读 # 开头 首先,我们写 web 前端的时候,如果要播放一个视频该怎么做呢?想都不用想,肯定是 html 的 video 标签啊。多简单,给video.src 附一个值,它就可以自动播放了。 ### video 标签的局限性 video 标签用起来当然方便,但是呢,他也有很大的局限性。 首先我们想要给视频加滤镜怎么办?我要播放其他格式视频怎么办?那就没办法了,目前的video 标签还没那么多功能。 如果要给视频加滤镜,现在的video标签是没有办法做到的,它没有暴露任何相关滤镜处理视频的API。如果我想要在网页播放 hls, flv, mkv, rmvb. avi 这种格式的视频怎么办,光是靠 video 标签也是没办法做到的,它只支持很有限的那几种格式罢了。 ### 当 Video...

# 字节码编程 字节码,在编程中无处不在,但是在业务层中也许您也用不着,但是了解一下还是有好处的。开发稍微底层一些的逻辑基本都会碰到 ## 常识与基本概念 我们都听过一些概念: * int 类型占用32位 * 一个 ascii 码字符占一个字节 * 一个 utf8 汉字字符占用3个或4个字节(utf8编码字节长度是可变的,占用1-6个字节不等) * `0B00010100` 这是一个二进制数字(2^4 + 2^2),`024` 这是一个8进制的数字(8^1 * 2 + 8^0 * 4), `0X14`...

# 改变 Vuex 的原因 在开始之前,我表明一下自己的观点:**vuex 很优秀,我很认同 vuex 的设计理念,我只是想实现一个用起来更简单的 vuex** 只要用过Vue的前端,基本没有人没接触过 Vuex,vuex的 api 简洁明了,功能简单但强大,上手也是很快的。 vuex 的数据流大致是这样的 ``` state -> vue component -> action -> mutation -> state | ^ |_________or___________| ```...