原文:Node.js Architecture Pitfalls to Avoid

构建高可维护、可读和可靠的代码库不仅对后来维护你的代码的人很重要,而且也是为了您自己的心智负担。

我已经处理了数十个生产 Node.js 后端服务,并将分享我的经验,构建您的架构陷阱时应该避免什么。

本文中的示例是为 JavaScript 和 TypeScript 量身定制的,以及一些问题(如依赖管理)需要在 Node.js 项目比其他语言中应该更得到更多关注。但是,其中许多原则也适用于其他语言。

让我们开始吧!

阅读全文 »

记录一下安装 python 的两个安装方法

apt 安装

  1. 以 root 用户或具有 sudo 访问权限的用户身份运行以下命令,以更新软件包列表并安装必备组件:
1
2
sudo apt update
sudo apt install software-properties-common
  1. 将 Deadsnakes PPA 添加到系统的来源列表中:
1
sudo add-apt-repository ppa:deadsnakes/ppa
  1. 启用存储库后,请使用以下命令安装 Python 3.8:
1
sudo apt install python3.8

源码安装

  1. 更新软件包列表并安装构建 Python 所需的软件包:
1
2
sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
  1. 找个位置存放源码包

3.10

1
2
3
wget https://www.python.org/ftp/python/3.10.9/Python-3.10.9.tar.xz
sudo tar xvJf Python-3.10.9.tar.xz
cd Python-3.10.9

3.11

1
2
3
wget https://www.python.org/ftp/python/3.10.9/Python-3.11.1.tar.xz
sudo tar xvJf Python-3.11.1.tar.xz
cd Python-3.11.1
  1. 开始生成 makefile 并且编译安装
1
2
3
./configure --enable-optimizations
make -j 2
sudo make install

–enable-optimizations 选项通过运行多个测试来优化 Python 二进制文件,这会使构建过程变慢。2 代表用两个线程进行 make。

文章源地址:Optimizing A Vue App

在构建我们的 Web 应用程序时优先考虑性能可以改善用户体验,有助于确保尽可能多的人可以使用它们。在本文中,Michelle Barker 将向您介绍一些前端优化技巧,以保持我们的 Vue 应用程序尽可能高效。

阅读全文 »

过早调用 context 报错

在 initState 里像下面这样使用 context:

1
2
3
4
5
6
@override
void initState() {
super.initState();
final args = ModalRoute.of(context)?.settings.arguments;
// 使用args...
}

可能会导致下面报错:

1
dependOnInheritedWidgetOfExactType<_LocalizationsScope>() or dependOnInheritedElement() was called before XxxXxx.initState() completed.

因为 context 在 initState 调用过程中只是创建了,但是属于不可用状态,需要在 initState 执行完成之后才能正常使用,所以需要延后context的使用时间,如果只需要调用一次的话应该使用Future.delayed或者addPostFrameCallback进行调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@override
void initState() {
super.initState();
Future.delayed(Duration.zero, () {
// 这时候context已经可用
final args = ModalRoute.of(context)?.settings.arguments;
// ...
});
// 又或者这样---------------
WidgetsBinding.instance.addPostFrameCallback((_) {
final args = ModalRoute.of(context)?.settings.arguments;
// ...
});
}

onGenerateRoute和routes冲突

如果在MaterialApp传入routes,那么onGenerateRoute将不会被调用

单元测试是软件质量的重要保证。单元测试之所以非常重要,有以下三方面原因:

  • 保证并且展示开发质量;
  • 提高重构的信心;
  • 团队合作的基石。
阅读全文 »
0%