2024年8月26日

Flow 中的通用函数

Flow从面向对象程序中借鉴的最佳概念之一是泛型的概念。在许多情况下,泛型对于细化类型检查至关重要。 泛型在哪些地方有用? 假设你有一个函数memoize。使用 Flow 类型,它可能看起来像这样: function memoize(func: (key: any) => any): (key: any) => any { const registry = new Map(); return function(key: any): any { let value = registry.get(key); if (typeof value === 'undefined') { value = func(key); registry.set(key, value); } return value; }; } 问题是它会吞噬以下细节func: // Type is (val: number) => bo…
2024年8月26日

流中的参数变化

有时你可能希望函数能够采用不同类型的参数。有点像TypeScript 中的联合类型。让我们看看如何使用Flow来实现。 创建一个接受多种类型参数的函数 这只是列出可能的类型的问题,用|: function capitalize( // `capitalize` can take a string or an array of strings. words: string | Array<string>, // `capitalize` will return an array of strings either way. ): Array<string> { // At this point, Flow does not know if `words` is a string or an array, // so properties or methods specific to those type…
2024年8月26日

流程通用约束

在Flow中,在某些情况下你会想要创建一个通用函数或类,但想要限制可以作为类型参数传递的内容。 通用约束的用途 假设您有一个包装 Map 的类,但在插入之前进行了浅拷贝: class ShallowMap<T> { map: Map<string, T>; constructor() { this.map = new Map(); } get(key: string) { return this.map.get(key); } set(key: string, value: T) { // Make a shallow copy. Flow will give an error on this line. const copy = {...value}; this.map.set(key, copy); } } Flow 不允许您这样做,因为虽然对象可以传播,但其他类型不能: // This…
2024年8月26日

流类型别名

当仅以文字形式书写时,Flow 很快就会变得非常冗长。将重复的类型声明为类型别名通常很有用。 声明类型别名 假设你正在编写函数来操作待办事项列表: // Add a new todo item to `todos` and return the new item. function addTodo( todos: Array<{id: number, name: string, completed: boolean}>, name: string, ): {id: number, name: string, completed: boolean} { // Implementation omitted for brevity. } // Get a todo item from `todos` by `id`. function getTodo( todos: Array<{id: number, na…
2024年8月26日

Flow 中的对象作为地图

尽管Map类型已经出现,但普通对象仍然是表示地图的一种非常常见的方式。为了支持这种模式,Flow 提供了一种非常灵活的方式来表达这一点。 对象映射的用处 假设你想编写一个函数来计算一份购物清单的总价。调用它的方式如下: // This would return 9.5 (4 + 3 + 2.5). getTotalCost({ eggs: 4, fruitSnacks: 3, toothpaste: 2.5, }); 列表可以包含任意数量的项目,因此您无法明确将每个项目声明为属性。此外,您需要确保它只接受数字,因此: getTotalCost({ eggs: 4, toothpaste: 2.5, milk: 'Too much', }); …会出现类型错误。 将类型声明为对象映射 就像 Flow 中的很多东西一样,它非常简单。只需在括号中声明一个类型键并赋予它类型: type Gro…
2024年8月26日

如何使用 Postfix、Dovecot、MySQL 和 SpamAssassin 配置邮件服务器

介绍 在本教程中,我们将在 Ubuntu 12.04 上使用 Postfix、Dovecot、MySQL 和 SpamAssassin 配置邮件服务器。 按照本教程,您将能够添加虚拟域、用户和别名。此外,您的虚拟服务器将免受垃圾邮件中心的侵害。 先决条件 在设置邮件服务器之前,您的 VPS 必须具备以下条件: * 域名正在转发到您的服务器(设置域名) * 安装并配置 MySQL(设置 mysql) * 具有 root 权限的用户(设置新用户- 省略步骤 5) * 配置并识别您的 FQDN(设置 FQDN) 可选:SSL 证书(设置免费签名的 SSL 证书) 可选(以 root 用户身份登录) 以 root 用户身份安装软件包很有用,因为您拥有所有权限。 sudo -i 输入您的用户密码。输入成功后,您将看到该$符号变为#。 步骤 1:安装软件包 apt-get install postfix postfi…
2024年8月26日

如何使用 MySQL 查询分析

介绍 在尝试分析数据库驱动应用程序的整体性能时,MySQL 查询分析是一种有用的技术。在开发中型或大型应用程序时,大型代码库中往往会分布着数百个查询,并且每秒可能会对数据库运行大量查询。如果没有某种查询分析技术,就很难确定瓶颈和应用程序速度变慢的位置和原因。本文将使用 MySQL 服务器内置的工具演示一些有用的查询分析技术。 什么是 MySQL 慢查询日志? MySQL 慢查询日志是 MySQL 发送慢速、可能有问题的查询的日志。此日志记录功能随 MySQL 一起提供,但默认情况下处于关闭状态。记录哪些查询由可自定义的服务器变量决定,这些变量允许根据应用程序的性能要求进行查询分析。通常,记录的查询是执行时间超过指定时间的查询或未正确命中索引的查询。 设置分析变量 设置 MySQL 慢查询日志的主要服务器变量是: slow_query_log G sl…
2024年8月26日

如何设置远程数据库以使用 MySQL 优化站点性能

介绍 随着应用程序或网站的发展,您可能会发现当前的设置已经无法满足您的需要。如果您当前在同一个 VPS 上托管 Web 服务器和数据库后端,那么将这两个功能分开可能是一个好主意,这样每个功能都可以在自己的机器上运行和发展。 在本指南中,我们将讨论如何配置您的 Web 服务器可以连接到的远程数据库服务器以获取动态内容。我们将使用 WordPress 作为示例,以便我们有一些可以使用的东西。我们将在我们的 Web 服务器上配置 Nginx,然后将其连接到远程计算机上的 MySQL 数据库。我们将在 Ubuntu 12.04 VPS 实例上执行所有这些操作以供演示。 在数据库服务器上安装 MySQL 首先,我们将配置一个 VPS 实例作为 MySQL 服务器。当您的单机配置达到上限时,将数据存储在单独的计算机上是一种优雅扩展的好方法。它还提供了负载平衡和以后进一步扩展…
2024年8月26日

如何使用 Mytop 监控 MySQL 性能

介绍 Mytop 是一个开源的命令行工具,用于监控 MySQL 性能。它的灵感来自 Linux 系统监控工具 top,外观和感觉与之相似。Mytop 连接到 MySQL 服务器并定期运行show processlist和show global status命令。然后,它会以有用的格式汇总信息。使用 mytop,我们可以(实时)监控 MySQL 线程、查询和正常运行时间,以及查看哪个用户在哪个数据库上运行查询、哪些是慢速查询等等。所有这些信息都可用于优化 MySQL 服务器性能。 在本教程中,我们将讨论如何安装、配置和使用 mytop。 先决条件 在开始本教程之前,您应该具备以下条件: CentOS 7 64 位 Droplet(也适用于 CentOS 6) 具有 sudo 权限的非 root 用户。要设置此类型的用户,请按照CentOS 7 的初始服务器设置教程进行操作。所有命令都…
2024年8月26日

如何使用 MySQL Workbench 远程连接 MySQL 服务器

介绍 您的数据库服务器包含大量重要数据的表。在本地计算机上以图形方式查询这些数据是与数据库交互的最简单方法。但远程连接到数据库服务器通常需要配置 MySQL 以监听每个接口、3306使用防火墙限制对端口的访问以及配置用户和主机权限以进行身份​​验证。而允许直接连接到 MySQL 可能会带来安全问题。 使用适用于 Windows 的HeidiSQL 、适用于 macOS 的Sequel Pro或跨平台MySQL Workbench等工具,您可以通过 SSH 安全地连接到数据库,从而绕过那些繁琐且可能不安全的步骤。本简短教程将向您展示如何使用 MySQL Workbench 连接到远程数据库。 先决条件 要完成本教程,您需要: 运行 MySQL 的服务器,可通过 SSH 访问。例如,您可以按照教程如何在 Ubuntu 14.04 上安装 MySQL快速启动并运行。 MySQ…