PhpStorm 性能调优

一、减少索引耗时

PHPStorm 不索引被排除的目录。在项目文件/文件夹上右键可排除、取消排除目录,更方便的是在 Settings > Directories 可查看和管理以标记的目录。

两个索引大户是 vendornode_modules 目录。

添加 php

vendor 目录排除,再到 Setting > PHP 把需要用到的包目录加入到 Include path

有时候把 Setting > PHP > Include path 的很多 vendor 中的目录去掉后,重启 PHPStorm 又自己加进去了。
解决:Setting > PHP > composer 设置的 作为库添加软件包 前的勾去掉。

node_modules

PHPStorm 默认已经把 node_modules 排除掉,在 Settings > Languages & Frameworks > JavaScript > Libraries 中自动把 package.json 中依赖的库加入到名为 ${project-name}/node_modules 的库。

我们可以用 pnpm 代替 npm 管理包来减少 IDE 的卡顿。pnpm 极大优化性能,速度更快、占空间更少。pnpm 管理的 node_modules 使用树状结构而不是扁平结构,IDE 打开 node_modules 目录不卡。

Laravel 排除目录

Laravel 项目还可以把 publicstorage 目录排除。

二、加大允许使用内存

可在 help > 更改内存设置 修改最大堆大小,也可在 help > Edit Custom VM Options 中设置如 -Xmx2048m

三、可去掉一些平时用不到的插件

四、不建议的优化

禁掉一些很好用的功能达到提速的目的是来搞笑的。如有人建议禁掉 Language injection 插件,完全禁掉这个插件是不可取的,可以到 Settings > Editor > Language Injections 把一些用不到的插入语言去掉。

Vite缩小打包体积:使用 visualizer 分析文件依赖关系与文件大小

Vite 中用 manualChunks 分割打包时,找文件依赖很麻烦,用 rollup-plugin-visualizer 可以帮我们找出依赖关系、分析依赖包的大小。

安装插件 rollup-plugin-visualizer

pnpm i -D rollup-plugin-visualizer

使用插件

vite.config.js 中添加:

1
2
3
4
5
import { visualizer } from 'rollup-plugin-visualizer';

plugins:[
visualizer({ open: true }) // 使用依赖分析,open: true 开启编译完成后自动弹出分析结果 html 页面
]

分析结果

执行 pnpm build,编译完成后,会在浏览器中自动打开下面的页面:

visualizer

ElementPlus 开发 SPA 应用 dev 模式加载太慢的原因及解决办法

问题复现

开发 SPA 应用用到 ElementPlus,官方推荐用 自动导入 方式来引用。

如果你用笔记本开发,那么预览时 js 的加载速度会极慢,node 占 CPU 超过100%,非常影响开发体验,恨不得换到 MPA 模式开发。

原因

因为自动自动导入方式预览时,要加载一百多个js文件。如果你用的是强劲的台式机,用这个方式没发现有明细的卡。笔记本 CPU 顶不住。

解决办法

完整引入按需导入 就没这个问题。

建议使用 完整引入 方式,ElementPlus 相关 js 就只引入了一个 /node_modules/.vite/deps/element-plus.js,而不是自动导入的上百的js文件。

编译后 element-plus 后的 js gz 后需要多传输 100k 左右,如果你受不了,可以另外加一个自动加载的 vite 配置,在增加一个创建不用全局引入 ElementPlus 的入口文件给 vite 引用。

如:build 时使用 vite.build.js 配置,在 vite.build.js 中引用使用 自动导入 的js入口文件。再把 package.jsonscripts.build 改为 vite build --config vite.build.js,这样就可以实现 dev 时使用完整引入ElementPlus,build 时使用自动导入减少编译文件的大小。

Linux 常用命令: 权限管理

  • 每个文件和文件夹有三种用户许可类型:
    • u 所有者(user)
    • g 所有者群组(group),代表组中的所有成员;
    • o 其他(other)。
  • 三种基本权限类型可组合:
    • r 读取(read);
    • w 写(write);
    • x 执行(eXecute)。
  • 三个控制文件许可权限的命令:
    • chown user file 命令更改文件的所有者;
    • chgrp group file 改变所有群组;
    • chmod rights file 改变文件许可权限。
阅读更多

Linux 创建交换分区提供虚拟内存,解决运行时出现提示内存不足问题

如果服务器内存不够用,可以创建交换区提供虚拟内存,支持要求较大内存程序的执行。

创建交换分区命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建分区路径
sudo mkdir -p /var/cache/swap/

# 设置分区的大小
sudo fallocate -l 4G /var/cache/swap/swap0
# 如果没有 fallocate,则可以用下面的创建方式
# bs=64M是块大小,count=64是块数量,所以swap空间大小是bs*count=4096MB=4GB
#sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=64M count=64

# 设置该目录权限
sudo chmod 0600 /var/cache/swap/swap0
# 创建SWAP文件
sudo mkswap /var/cache/swap/swap0
# 激活SWAP文件
sudo swapon /var/cache/swap/swap0
# 查看SWAP信息是否正确
sudo swapon -s

删除交换分区的命令

1
2
3
sudo swapoff /var/cache/swap/swap0
# sudo swapoff -a # 停用全部分区
sudo rm /var/cache/swap/swap0

  • 一台服务器可创建多个 swap。

Debian 系统源码编译安装 PHP8.2

1
2
groupadd www
useradd www -r -g www -s /bin/false
  • yum 安装相关库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
sudo apt update
sudo apt -y install cmake git wget mtr vim gcc autoconf make bison automake \
bzip2 ncurses-dev curl e2fsprogs openssl build-essential \
libtool libxml2-dev libssl-dev libcurl4-openssl-dev libpng-dev \
libjpeg-dev libonig-dev libzip-dev libsodium-dev libevent-dev \
libgd-dev libpng-dev libjpeg-dev libwebp-dev libgif-dev \


# sqlite3,如果不用 SQLite 就不需要这一步
wget https://sqlite.org/2023/sqlite-autoconf-3420000.tar.gz
tar zxf sqlite-autoconf-3420000.tar.gz
cd sqlite-autoconf-3420000/
./configure
make && make install

cd ~
wget https://www.php.net/distributions/php-8.2.8.tar.gz
tar zxf php-8.2.8.tar.gz

cd ~/php-8.2.8/

export LD_LIBRARY_PATH=/lib/:/usr/lib/:/usr/local/lib

./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-mysqlnd \
--with-pdo-mysql \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock \
--with-iconv \
--enable-bcmath \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mbstring \
--enable-gd \
--enable-phpdbg \
--enable-shmop \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-zip \
--with-zlib \
--with-curl \
--with-openssl \
--enable-pcntl \
--enable-simplexml \
--with-sodium \
--enable-exif \
--enable-intl \
--with-webp \
--with-jpeg \
--enable-opcache \
--with-pear

make && make install

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

# CentOS
chkconfig --add php-fpm
chkconfig php-fpm on
chkconfig --list php-fpm # 查看服务器设置

# Debian
# 设置开机启动
# sysv-rc-conf --level 2345 php-fpm on
sysv-rc-conf php-fpm on # 也可以用 sysv-rc-conf 命令图形化设置服务
sysv-rc-conf --list php-fpm

# Debian 还需添加服务 才能用 service php-fpm xxx 命令
vim /lib/systemd/system/php-fpm.service
# 加入以下内容
[Unit]
Description=php-fpm service
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/php-fpm start
ExecStop=/etc/init.d/php-fpm stop
ExecReload=/etc/init.d/php-fpm reload
ExecRestart=/etc/init.d/php-fpm restart
ExecStatus=/etc/init.d/php-fpm status
ExecForceQuit=/etc/init.d/php-fpm force-quit
ExecConfigtest=/etc/init.d/php-fpm configtest
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# END -----

# 启动 php-fpm
service php-fpm start

# 安装 MariaDB(可代替 MySQL)
apt install mariadb-server
mysql_secure_installation
service mariadb start
  • 编译 fileinfo 扩展需要较多内存,报虚拟内存用尽可增加虚拟内存。
  • libgd-dev 包含了 freetype 库
  • SQLite3 扩展默认启用。 允许在编译时使用 –without-sqlite3 禁用之。
  • iconv 系统自带,不需要 apt 或源码安装
  • 加 –with-pear 才会生成 bin/pecl 文件

Linux 常用命令:用户和组管理

用户&组数据文件

用户清单通常保存在 /etc/passwd 文件内,把哈希编码后的密码保存在 /etc/shadow 文件内。这两个文件都是纯文本档,以简单的格式保存,可以用文本编辑器读取与修改。每个用户占一行,其字段以冒号分隔 (“:”)。

  • /etc/passwd 用户清单,按固定顺序记录字段,并以 : 隔开,如:admin:x:1000:1000::/home/admin:/bin/bash,字段清单:
    • 用户名,例如 admin;
    • 密码: 用 DES, MD5, SHA-256 或 SHA-512 加密过的密码,特殊值 x 表示密码保存在 /etc/shadow 文件;
    • uid:用于辨识用户的不重复数字;
    • gid:用户主要群组 (Debian 的默认值系为每个用户创建一个群组) 的不重复号码;
    • GECOS:用户常规信息,类似于备注,例如其真实姓名和电话号码等;
    • 登入目录,登录后进入该目录,用于保存用户的个人文件 (环境变量 $HOME 通常指向此处);
    • 登录时运行的程序。通常是命令解译器 (shell),若指定为 /bin/false (不做任何事并立即回到控制),则用户无法进入系统;若指定为 /usr/sbin/nologin 则是禁止登录。
  • /etc/shadow 保存用户密码,含以下的字段:
    • 用户名;
    • 加密的密码;
    • 管理密码期限的字段。
  • /etc/group 用户组信息,包括以下的字段:
    • 群组名称;
    • 密码 (可选):只在加入群组时会用到 (使用 newgrp 或 sg 命令,见专栏 基本知识 在多个群组工作);
    • gid:不重复的群组识别码;
    • 成员清单:属于此群组的用户名清单,以逗号分隔。
阅读更多

在 Mac 上用一个命令使用 SSH 做代理科学上网

作为一个开发人员,翻墙是必备本领。
一些常用的参考代码和开发文档官方网站,要么很慢,要么被墙,你懂的,这需要科学上网。
你只要有一个墙外的 Linux 服务器,就能在 Mac 上用一个命令使用 ssh 做代理科学上网。

创建 SSH 秘钥

先创建名称为 pxy_rsa 的本地秘钥(你也可以使用已有的秘钥,怎样创建 ssh 秘钥如果不会自行网上搜索)。

服务器端添加账号

服务器端 ssh 禁用密码登录,配置 key 登录,
添加用户名为 pxy 的账号,只允许作为代理,不允许做其它操作。

使用 root 权限操作,执行以下命令

阅读更多

将 hexo 博客从 Github 搬迁到 Vercel,提高访问速度,效果非常满意

我的「全栈程序员伊爸」博客用 hexo 构建,之前用 GitHub Pages 托管,绑上了自己的 coderpan.com 域名,国内访问极慢,很多时候都不可用,因此搬迁到到 Vercel。搬迁耗时极少,如果熟练的话,几分钟就能完成。

Vercel 提供网站托管服务,个人或非商业站点免费,可以从 github/gitlab/bitbucket 自动部署站点。
就比如我的博客用 hexo 构建,把 hexo 站点源码保存在 GitHub 的一个私有仓库,我用 Vercel 来托管网站,Github 仓库源码每次提交,Vercel 就会自发布博客网站。
原理是 Vercel 同步 GitHub 仓库,通过 package.json 安装依赖包,执行 package.json 里的 scripts 命令来生成静态内容,保存静态内容的目录作为网站根目录提供给网络访问。其中安装依赖包、生成静态内容的命令和静态内容目录都是可以自定义的。

Vercel 托管 hexo 博客比用 GitHub Pages 托管更方便。

  • GitHub Pages: 博客源码存一个代码库,发布的静态内容存一个代码库。用 hexo 发布插件把生成的静态内容提交到 Github 仓库,实现发布博客。
  • Vercel: 只需要一个保存博客源码的 GitHub 代码库,博客源码变更提交后,Vercel 就会自动发布网站。

实操流程:

step 1、把 hexo 应用提交到一个 GitHub repository

源码内容为我们用 hexo 创建的应用的源。
GitHub repository 私有公有都可以。

step 2、把代码库授权给 Vercel

打开 https://vercel.com/new

用 github 账号授权登录后,点击 “Import Git Repository” 下拉菜单,点击 ”Add Github Account“ ,选择你的 hexo 博客代码仓库后,按提示操作就可以。如下图

添加代码库

step 3、绑定域名

在域名管理里面添加自己的域名,然后按提示到你的域名管理后台添加 A/CNAME 记录就可以。

注: Vercel 给你分配的 xxx.vercel.app 子域名被墙,需翻墙后才能访问,绑上你自己的独立域名后,用你的域名浏览不需翻墙。

step 4、Production Deployment

点击 Production Deployment 按钮把项目发布后,他人可访问你的网站。

这样 hexo 博客部署到 Vercel 就完成了,每次博客内容修改,把代码 pushGitHub 仓库后,Vercel 就会自动生成静态页面。

测试用 Octane 加速 Laravel10,并发达到4倍左右,同时对比Hyperf3压力测试

Laravel 开发爽,但性能完全无法忍受。刚完成一个项目,有点时间,试试看用 octane 加持后是否能摆脱 Laravel 的性能魔咒。
Laravel 应用基本可可无缝迁移到 Hyperf,因此同时测试 Hyperf,看看 Swoole 协程异步加持的 Hyperf 是不是比 Laravel 快很多。

测试环境

1
2
3
4
5
6
7
8
9
服务器: 阿里轻量云服务器
CPU: 2核
内存: 2G
OS: CentOS 8.5
PHP: 8.2.5
MySQL: 8.0
Swoole: 5.0.3
Laravel: 10.8
Hyperf: 3.0
阅读更多