Category : 教程系列

介绍 防止应用程序内存不足错误的一种方法是向服务器添加一些交换空间。在本指南中,我们将介绍如何将交换文件添加到 Ubuntu 20.04 服务器。 警告:虽然通常建议对使用传统旋转硬盘驱动器的系统进行交换,但将交换放置在 SSD 上可能会随着时间的推移导致硬件退化问题。因此,我们不建议在 DigitalOcean 或任何其他使用 SSD 存储的提供商上启用交换。 什么是掉期? 交换是硬盘驱动器存储的一部分,已为操作系统留出,用于临时存储其无法再保存在 RAM 中的数据。这使您可以增加服务器可以保留在其工作内存中的信息量,但有一些注意事项。硬盘驱动器上的交换空间将主要在 RAM 中不再有足够空间来保存正在使用的应用程序数据时使用。 写入磁盘的信息将比保存在 RAM 中的信息慢得多,但操作系统更愿意继续在内存中运行应用程序数据,并为旧数据使用交换。总体而言,当系统 RAM 耗尽时,将交换空间作为后备可能是一个很好的安全网,可以防止在具有非 SSD 存储可用的系统上出现内存不足异常。 步骤 1 – 检查系统的交换信息 在开始之前,我们可以检查系统是否已经有一些可用的交换空间。可以有多个交换文件或交换分区,但通常一个就足够了。 我们可以通过键入以下内容来查看系统是否有任何配置的交换: sudo swapon –show 如果你没有得到任何输出,这意味着你的系统当前没有可用的交换空间。 您可以使用该free实用程序验证没有活动交换: free -h Output total used free shared buff/cache available Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi Swap: 0B 0B ..

Read more

介绍 现代 JavaScript 库(如 React.js 和 Vue.js)的出现使前端 Web 开发变得更好。这些库附带的功能包括 SPA(单页应用程序),它是在网页中动态加载内容,而无需完全重新加载到浏览器。 大多数单页应用程序背后的概念是客户端呈现。在客户端渲染中,大部分内容使用 JavaScript 在浏览器中渲染;在页面加载时,在 JavaScript 完全下载并呈现网站的其余部分之前,内容最初不会加载。 客户端渲染是一个相对较新的概念,它的使用需要权衡。一个显着的负面影响是,由于在使用 JavaScript 更新页面之前不会完全呈现内容,因此网站的 SEO(搜索引擎优化)将受到影响,因为搜索引擎几乎没有任何数据可供抓取。 另一方面,服务器端呈现是在浏览器上呈现 HTML 页面的传统方式。在较旧的服务器端呈现应用程序中,Web 应用程序是使用服务器端语言(例如 PHP)构建的。当浏览器请求网页时,远程服务器会添加(动态)内容并提供填充的 HTML 页面。 正如客户端渲染的缺点一样,服务器端渲染会使浏览器过于频繁地发送服务器请求,并为类似的数据执行重复的整页重新加载。有一些 JavaScript 框架可以最初使用 SSR(服务器端渲染)解决方案加载网页,然后使用框架来处理进一步的动态路由并仅获取必要的数据。生成的应用程序称为通用应用程序。 总之,通用应用程序用于描述可以在客户端和服务器端执行的 JavaScript 代码。在本文中,我们将使用 Nuxt.js 构建一个通用食谱应用程序。 Nuxt.js 是用于开发通用 Vue.js 应用程序的更高级别的框架。它的创建受到 React 的Next.js 的启发,它有助于抽象设置服务器端呈现的 Vue.js 应用程序时出现的困难(服务器配置和客户端代码分发)。Nuxt.js 还附带有助于客户端和服务器端之间开发的功能,例如异步数据、中间件、布局等。 注意:我们可以将我们构建的应用程序称为服务端渲染(SSR),因为在我们创建单页应用程序时,Vue.js 默认已经实现了客户端渲染。该应用程序实际上是一个通用应用程序。 在本文中,我们将看到如何使用 Django 和 Nuxt.js 创建通用应用程序。Django 将处理后端操作并使用 DRF(Django Rest ..

Read more

介绍 FreeBSD是一种安全、高性能的操作系统,适用于各种服务器角色。在本指南中,我们将介绍有关如何开始使用 FreeBSD 服务器的一些基本信息。 本指南旨在为 FreeBSD 服务器提供一般设置,但请注意不同版本的 FreeBSD 可能具有不同的功能。根据您的服务器运行的 FreeBSD 版本,此处提供的说明可能无法按描述工作。 使用 SSH 登录 开始配置 FreeBSD 服务器所需的第一步是登录。 在 DigitalOcean 上,您必须在创建 FreeBSD 服务器时提供公共 SSH 密钥。此密钥已添加到服务器实例,允许您使用关联的私钥从本地计算机安全登录。要了解有关如何在 DigitalOcean 上的 FreeBSD 中使用 SSH 密钥的更多信息,请遵循本指南。 要登录到您的服务器,您需要知道服务器的公共 IP 地址。对于 DigitalOcean Droplets,您可以在控制面板中找到此信息。通过 DigitalOcean 创建的 FreeBSD 服务器上可用的主要用户帐户称为freebsd。此用户帐户配置有sudo权限,允许您完成管理任务。 要登录到您的 FreeBSD 服务器,请使用该ssh命令。您需要指定freebsd用户帐户以及服务器的公共 IP 地址: ssh freebsd@your_server_ip 您应该会自动进行身份验证并登录。您将进入命令行界面。 将默认 Shell 更改为 tcsh(可选) 如果您登录到运行 FreeBSD 11 的 ..

Read more

软件组件是包含一组相互关联的功能的 Web 服务、软件包或模块。组件通常用于前端框架,如 React 和 Svelte。 在基于组件的软件工程中,组件用于分离应用程序中的不同功能,支持这种工程形式的关注点分离和可重用性方法。 要了解有关组件的更多信息,请按照我们的教程在 React 项目中实现组件,如何在 React 中实现模�..

Read more

作为Write for DOnations计划的一部分,作者选择了免费和开源基金来接受捐赠。 介绍 即使云服务越来越流行,运行原生应用程序的需求仍然存在。 通过使用noVNC和TigerVNC,您可以在Docker容器内运行本机应用程序并使用 Web 浏览器远程访问它们。此外,您可以在具有比本地可用资源更多的系统资源的服务器上运行您的应用程序,这可以在运行大型应用程序时提供更高的灵活性。 在本教程中,您将使用 Docker容器化电子邮件客户端Mozilla Thunderbird。之后,您将保护它并使用Caddy Web 服务器提供远程访问。 完成后,您只需使用网络浏览器即可从任何设备访问 Thunderbird。或者,您还可以使用WebDAV从本地访问文件。您还将拥有一个可以在任何地方运行的完全独立的 Docker 映像。 先决条件 在开始本指南之前,您需要具备以下条件: 一台至少有 2GB RAM 和 4GB 磁盘空间的 Debian 10 服务器。 具有sudo特权的非 root 用户。 在您的服务器上设置 Docker。您可以按照如何在 Debian 10 上安装和使用 Docker 进行操作。 第 1 步 – 创建supervisord配置 现在您的服务器正在运行并安装了 Docker,您可以开始配置应用程序的容器了。由于您的容器由多个组件组成,您需要使用进程管理器来启动和监控它们。在这里,您将使用supervisord. supervisord是一个用 Python 编写的进程管理器,通常用于编排复杂的容器。 首先,创建并输入一个thunderbird为您的容器命名的目录: mkdir ~/thunderbird cd ~/thunderbird 现在创建并打开一个名为supervisord.confusingnano或您喜欢的编辑器的文件: nano ..

Read more

作者选择Open Sourcing Mental Illness接受捐赠,作为Write for DOnations计划的一部分。 介绍 使用Vue.js创建 Web 应用程序时,最佳做法是使用小型模块化代码块构建应用程序。这不仅使您的应用程序的各个部分保持专注,而且随着应用程序的复杂性增加,它也使应用程序更容易更新。由于从Vue CLI生成的应用程序需要构建步骤,因此您可以访问单文件组件(SFC) 以将模块化引入您的应用程序。SFC 具有.vue扩展名并包含 HTML <template>、<script>和<style>标签,并且可以在其他组件中实现。 SFC 为开发人员提供了一种方法,可以为他们的每个组件创建自己的HTML标签,然后在他们的应用程序中使用它们。与<p>HTML 标签将在浏览器中呈现段落并保持非呈现功能相同的方式,组件标签将呈现 SFC 放置在 Vue 模板中的任何位置。 在本教程中,您将创建一个 SFC 并用于props向下传递数据并slots在标签之间注入内容。在本教程结束时,您将对 SFC 是什么以及如何实现代码重用有一个大致的了解。 先决条件 14.16.0您的计算机上安装了Node.js版本或更高版本。要在 macOS 或 Ubuntu 20.04 上安装它,请按照如何在 macOS 上安装 Node.js 和创建本地开发环境中的步骤或如何在 Ubuntu 20.04 上安装 Node.js 的使用 PPA部分进行安装 Vue CLI 安装在您的机器上并生成了一个新项目。由于本教程使用 Vue 3 Composition API,因此请确保3.x (Preview)在生成应用程序时选择该选项。此项目的名称将是sfc-project,它将充当根目录。 您还需要具备 JavaScript、HTML 和 ..

Read more

介绍 模式是应用程序中的独立窗口,最常见的是作为对话框。它们是用于提供信息或要求确认的常见用户界面模式。 在本教程中,您将学习如何在 React 项目中实现模态组件。您将创建一个Dashboard组件来管理状态和一个按钮来访问模态。您还将开发一个Modal组件来构建一个模态和一个关闭按钮。单击按钮后,您的项目将显示并关闭模态。 先决条件 要完成本教程,您需要: 在开始本教程之前对 React 有一个基本的了解。您可以通过阅读如何在 React.js系列中编码来了解有关 React 的更多信息。 第 1 步 – 启动Dashboard组件 仪表板是您显示模态的地方。要开始您的仪表板,请将 React 实例和Component对象导入到您的Dashboard.js文件中。声明一个Dashboard组件并设置您的状态: 仪表板.js import React, { Component } from “react”; class Dashboard extends Component { constructor() { super(); this.state = { show: false }; this.showModal = this.showModal.bind(this); this.hideModal = this.hideModal.bind(this); } showModal = () => { ..

Read more

介绍 Redux是 JavaScript 应用程序的可预测状态容器。如果您对 Redux 不熟悉,我们建议您查看我们对 Redux 的介绍。 在本文中,您将学习如何在 React Native 应用程序中使用 Redux 持久化用户数据。该应用程序是一个模拟社交网络,HomeScreen显示已连接好友的数量,并FriendsScreen显示要添加的潜在好友列表。您将使用 Redux 在两个屏幕之间共享状态。 先决条件 要完成本教程,您需要: Node.js 的本地开发环境。遵循如何安装 Node.js 并创建本地开发环境。 熟悉设置环境以创建新的 React Native 项目并使用 iOS 或 Android 模拟器可能会有所帮助。 本教程基于如何在 React Native 中使用带有 React 导航的路由中涵盖的主题。建议您阅读本教程以了解有关该项目如何工作的更多背景信息,但这不是必需的。 本教程已通过 Node v14.7.0、npmv6.14.7、reactv16.13.1、react-nativev0.63.2、@react-navigation/nativev5.7.3、@react-navigation/stackv5.9.0、reduxv4.0.5 和react-reduxv7.2.1 验证。 步骤 1 — 设置项目和安装 Redux 本教程将使用如何在 React Native 中使用带有 React 导航的路由中的代码的修改版本。首先,克隆MySocialNetwork: git clone https://github.com/do-community/MySocialNetwork.git ..

Read more

介绍 在 JavaScript 中,可以使用Base64对字符串进行编码和解码。 在本文中,您将了解现代 Web 浏览器中可用的btoa和atobJavaScript 函数。 先决条件 要阅读本文,您需要: 理解 JavaScript 中的字符串。您可以查阅如何在 JavaScript 中使用字符串以了解更多信息。 了解使用or可用的函数WindowWorkerGlobalScope。 了解开发者控制台。您可以查阅如何使用 JavaScript 开发人员控制台以了解更多信息。 使用 Base64 编码和解码字符串 btoa()和atob()是两个 Base64 辅助函数,它们是 HTML 规范的核心部分,可在所有现代浏览器中使用。 注意:这些函数的命名参考了用于将二进制转换为 ASCII (btoa) 和将 ASCII 转换为二进制 (atob) 的旧 Unix 命令。但是,“这些函数的输入和输出都是Unicode字符串”。 btoa() 接受一个字符串并将其编码为 Base64。 假设您有一个字符串”Hello World!”,并希望将其编码为 Base64。在浏览器的 Web 开发人员控制台中,定义字符串、对其进行编码并显示编码后的字符串: // Define the string var decodedStringBtoA = ‘Hello World!’; // ..

Read more