Joyber 发布的文章

Brotli是一种开源的压缩算法,可以让数据在互联网上以更快的速度传输。

现代的网页通常包含了由大量的HTML, CSS和JavaScript代码编写的图片、视频或其他大型文件数据,导致了网页打开的速度很慢。如果能有一种好的压缩算法将这些内容和数据进行压缩后传输,那么用户只需要等待很短时间就可以完全加载整个页面上的内容。

2015年9月谷歌发布了Brotli压缩算法,直到现在才开始被大多数的浏览器所兼容。

现在最新的HTTP服务器程序Apache和nginx也支持了Brotli压缩算法,谷歌和一些商业公司也开始对Brotli提供支持服务。和谷歌的gzip解压缩格式比起来,Brotli能在此基础上将数据在压缩20~25%。它通过一本英语、西班牙语、汉语、印地语、俄语、阿拉伯语的常用字、词汇字典,结合机器语言,特别是HTML和JavaScript的常用术语,能够将数据比gzip, bzip2, LZMA等压缩算法的基础上进一步进行压缩,减少了数据内容的容量大小,使得网页在加载时速度更快。

Cloudflare公司的工程师们为了验证Brotli压缩算法比其他压缩算法更好,还特意做了实验来说明。还有http://Discouse.org的联合创始人Sam Saffron给各种压缩算法的文件压缩大小和压缩速度打分,事后证明Brotli不仅全面吊打其他压缩算法,还能支持HTTPS网络加密下的压缩。

有些网络服务运营商已经开始部署Brotli压缩服务,例如DreamHost公司在2016年12 月就发布了DreamPress插件,可以在使用nginx来TLS连接时,直接调用谷歌在Brotli内置的ngx模块来部署Brotli。

当然目前还有一些浏览器并不支持这种压缩算法,比如苹果的safari浏览器,微软也只有Edge浏览器才支持,老旧的IE并不支持,而且微软自家的web server套件IIS目前还没有免费的插件可以支持Brotli压缩,这就意味着使用IIS作为web server的网站也不无法支持Brotli压缩传输。

用户如果想要检查网站是否使用了Brotli压缩进行传输,可以在浏览器的页面解码的头部分,会看到br:

最早使用的是“bro”缩写,但是由于在美式英语中,这个缩写还有其他的含义,因此最后改为了“br”,这样还能节省字节。

虽然在日常使用中,普通的用户对Brotli压缩传输的内容不会有特别的感受,但只要是能加快网络数据内容的传输又有什么不好呢?

附录[1] – OpenCore 支持的内核驱动 (Kext) 及其用途
参考 https://github.com/acidanthera/OpenCorePkg/blob/master/Docs/Kexts.md

GitHub 项目的下载地址位于 Release 下, 驱动具体支持的设备请进入项目地址查看

有线网卡
驱动及项目地址 备注
AppleRTL8169Ethernet Realtek RTL8169 官方驱动
AtherosE2200Ethernet.kext 高通 Atheros Killer E2200 系列驱动
AtherosL1cEthernet.kext 高通 Atheros AR813x/815x 驱动
IntelMausi.kext 英特尔有线网卡 Acidanthera 分支
IntelMausiEthernet.kext 英特尔有线网卡原作者
NullEthernetInjector.kext 仿冒内建网卡 (没有可用的内建网卡时使用)
RealtekR1000SL.kext Realtek 8111B/C/D/E/EP/F/G/GU/8411B 系列驱动
RealtekRTL8100.kext Realtek RTL810X 系列驱动
RealtekRTL8111.kext Realtek RTL8111/8168 系列驱动
Wi-Fi 和蓝牙
驱动及项目地址 备注
AirPortAtheros40.kext 高通 Atheros AR92xx/AR93xx 驱动, 仅用于 10.14+
AirportBrcmFixup.kext 非苹果官方博通网卡修复
ATH9KFixup.kext 高通 Atheros AR9xxx 无线网卡修复
BrcmPatchRAM.kext 博通网卡蓝牙固件上传
BT4LEContinuityFixup.kext IOBluetoothFamily 修补
MT7610 联发科 MT7610
RT5370 联发科 RT5370
RTL8192CU Realtek RTL8192CU 驱动 (链接为谷歌云盘)
键盘, 鼠标和触摸设备
驱动及项目地址 备注
ApplePS2SmartTouchPad.kext 触摸板和键盘
AsusSMC.kext 华硕 Fn 键, 键盘背光灯和环境光传感器 驱动
NoTouchID.kext 禁用 Touch ID 检测, 修复输密码时卡顿
SerialMouse.kext 使用 Microsoft 串行鼠标协议的串行鼠标驱动
VoodooI2C.kext I2C 触摸板/屏 驱动
VoodooPS2Controller.kext PS2 键盘/触摸板 驱动
显卡和声卡
驱动及项目地址 备注
AppleALC.kext 定制万能声卡驱动
NVIDIA CUDA drivers NVIDIA CUDA 驱动
NVIDIA Web-drivers NVIDIA 显卡驱动
SNBGraphicsMojaveInstaller 二代酷睿核显驱动, 仅用于 10.14+
VoodooHDA.kext 万能声卡驱动
WhateverGreen.kext 显卡补丁驱动
Polaris22Fixup.kext Polaris22/VegaM 显卡修复
CPU 和 SMC
驱动及项目地址 备注
CPUFriend.kext CPU 变频管理
FakeSMC.kext and sensors Clover 官方 FakeSMC
HWPEnabler.kext 启用 HWP
NullCPUPowerManagement.kext AMD 和虚拟机专用版本
OpcodeEmulator.kext Opcode 模拟驱动
TSCAdjustReset.kext TSC 频率同步驱动
VirtualSMC.kext 及传感器 Acidanthera 的 SMC 和传感器驱动
VoodooTSCSync.kext TSC 频率同步驱动
USB 和 其它接口
驱动及项目地址 备注
IOElectrify.kext 在雷电 3 设备上启用常开电源
USBWakeFixup.kext 修复 Skylake 平台 USB 唤醒黑屏
SASMegaRAID.kext LSI MegaRAID SAS 系列 RAID 控制器驱动
Sinetek-rtsx.kext Realtek RTSX SDHC 读卡器驱动
VoodooSDHC.kext SDHC 读卡器驱动
其它驱动
驱动及项目地址 备注
AppleIntelInfo.kext CPU / 核显 变频测试
HibernationFixup.kext 修复因 RTC 变量和 NVRAM 造成的睡眠问题
Lilu.kext SDK & Library
LiluFriend.kext 用于确保 Lilu 在 L/E 下正常加载
RTCMemoryFixup.kext 修复 BIOS CMOS (RTC) 内存和 AppleRTC 之间的冲突问题
NightShiftUnlocker.kext 解锁 NightShift
WebCamera.kext 某些旧设备的摄像头驱动
附录[2] – UEFI 驱动 (.efi) 及其用途
OpenCore 支持的 UEFI 驱动
ApfsDriverLoader
APFS 文件系统引导驱动
AudioDxe
OpenCore 用于在 UEFI 环境播放音频的驱动
CrScreenshotDxe
增加 OpenCore UI 内截屏功能, 快捷键为 LCtrl + LAlt + F12 ( 左Ctrl + 左Alt + F12)
FwRuntimeServices
通过支持只读和只写 NVRAM 变量来提高 OpenCore 和 Lilu 的安全性。有些设置项, 例如 RequestBootVarRouting, 需要此驱动程序才能正常运行
HFSPlus
苹果自带的闭源 HFS 驱动, 不具有 Bless 和其它功能, 但是启动速度比它的等效驱动 VBoxHfs 快 3 倍
HiiDatabase.efi
用于给 Ivy Bridge (3 代酷睿) 或更老代主板上支持 UEFI 字体渲染, UEFI Shell 中文字渲染异常时使用, 新主板不需要
NvmExpressDxe
从 Broadwell 开始的大多数固件中都包含此驱动程序。对于 Haswell 及更早的固件, 如果安装了 NVMe SSD 就需要使用
MemoryAllocation.efi
为 Z390/X99 等主板预留第一组 512MB 内存, 帮助引导工具注入内核以及内核缓存至第一组 512MB 内存, 需要配合 FwRuntimeServices 和引导标识符 slide=1
AppleUsbKbDxe
添加了对 AppleKeyMapAggregator 协议支持的 USB 键盘驱动, 这是 AppleGenericInput 的等效驱动, 根据固件的不同, 实际效果会更好或更坏
VariableRuntimeDxe
EDK II 的 NVRAM 驱动, OpenCore 中用于模拟 NVRAM, 需要配合 FwRuntimeServices(.efi) 和 DisableVariableWrite(Quirk)
VBoxHfs
具有 bless 支持的 HFS 文件系统驱动程序。该驱动程序可以等效替代 Apple 固件中常见的闭源 HFSPlus 驱动。此驱动虽然功能更加完善, 但启动速度相比大约慢 3 倍,并且尚未经过安全审核
XhciDxe
来自 MdeModulePkg 的 XHCI USB 控制器支持驱动程序。从 Sandy Bridge 开始的大多数固件中都包含此驱动程序。在较旧的固件上可以用于支持 USB 3.0 PCI 卡
部分网上无法找到的 UEFI 驱动可以在这里下载

Download

OpenCore 不兼容的 UEFI 驱动
AppleGenericInput
添加了对 AppleKeyMapAggregator 协议支持的用户输入驱动。此外, 还解决了某些固件上的鼠标输入问题, 这是 AppleUsbKbDxe 的等效驱动, 根据固件的不同, 实际效果会更好或更坏
已合并入 OpenCore
AppleImageCodec
为 Clover 启动 FileVault 2 解码 PNG 和 BMP, OpenCore 已集成
AppleKeyAggregator
为 Clover 支持 FileVault 2 启动 UI 的驱动, OpenCore 已集成
AppleKeyFeeder
为 Clover 支持 FileVault 2 内 PS/2 键盘输入的驱动, OpenCore 已集成
AppleUITheme
为 Clover 支持 FileVault 2 启动 UI 主题的驱动, OpenCore 已集成
AptioInputFix & AppleGenericInput
用于解决 UEFI 固件输入问题的驱动, 已与 OpenCore 合并
AptioMemoryFix
NVRAM 和内存驱动, 用于修复 UEFI 固件上的内存问题, 已与 OpenCore 合并为 FwRuntimeServices
CsmVideoDxe
用于 Clover GUI 的显卡驱动, 允许使用更多分辨率, 基于 UEFI BIOS 中的 CSM 兼容模块, 并将启用所需的 CSM, OpenCore 不兼容
DataHubDxe
macOS 必需的 DataHub 协议, OpenCore 自带且提供了这个 Quirk
EmuVariableUefi
Clover 的模拟 NVRAM 驱动, OpenCore 不兼容, 替代品为 VariableRuntimeDxe
EnglishDxe
在 UEFI Shell 中支持 UnicodeCollation 协议, OpenCore 自带且提供了这个 Quirk
EnhancedFatDxe
这个驱动已存在于所有 UEFI 固件中, 无法从 OpenCore 直接使用。由于很多固件的 FAT 支持都有问题, 导致在尝试写入时会损坏文件系统。如果在引导过程中写入 EFI 分区出现问题, 则需要将此驱动用 UEFITool 刷入固件中
FirmwareVolume
为 Clover 启动 FileVault 2 创建 FirmwareVolume 光标的驱动, OpenCore 已集成
FSInject
Clover 用于注入内核驱动 (Kext) 的驱动, OpenCore 自带且使用更先进的方法
HashServiceFix
修复 UEFI BIOS 中的哈希支持, OpenCore 自带且提供了这个 Quirk
OsxAptioFixDrv
旧的 Clover NVRAM 和内存驱动, 用于修复 UEFI 固件上的内存问题, 与 FwRuntimeServices 和 OpenCore 不兼容
OSXAptioFix2Drv-Free2000.efi
Clover 的内存驱动, 用于修复 UEFI 固件上的内存问题, 作者已经声明会损坏硬件
OsxAptioFix3Drv
Clover NVRAM 和内存驱动, 用于修复 UEFI 固件上的内存问题, 与 FwRuntimeServices 和 OpenCore 不兼容
OsxFatBinaryDrv
Clover 用于支持 OS X 10.9 和更早版本的 FAT Binary 可执行文件的驱动, 与 FwRuntimeServices 和 OpenCore 不兼容
OsxLowMemFixDrv
精简版的 OsxAptioFixDrv, 用于修复 UEFI 固件上的内存问题, 与 FwRuntimeServices 和 OpenCore 不兼容
PartitionDxe
用于支持非常规分区图的驱动, 如: 混合 GPT/MBR 或 Apple 分区图, OpenCore 兼容性未知
Ps2MouseDxe
PS/2 鼠标驱动, 这个驱动已存在于所有 UEFI 固件中
SMCHelper
UEFI 层面的 SMC 驱动, 用于与 FakeSMC 配合。与 OpenCore 不兼容
VirtualSmc
UEFI 层面的 SMC 驱动, 已与 OpenCore 合并
其它未在本文中提到的 UEFI 驱动一律不兼容
附录[3] – 常用内核引导标识符合集
引导标识符 作用
-amd_no_dgpu_accel 关闭 AMD 显卡硬件加速
cpus=# 启用 # 个 CPU 核心
darkwake=0 禁用 Power Nap
dart=0 禁用 VT-d
debug=0x100 发生 KP 时不自动重启
keepsyms=1 发生 KP 时保留 Debug Symbols, 用于给开发者反馈问题
kext-dev-mode=1 启用 Kext 开发模式, 非开发者请勿使用
-no_compat_check 关闭兼容性检查
npci=0x2000 在旧设备上禁用 kIOPCIConfiguratorPFM64
nvda_drv=1 启用 N 卡驱动的老方法, 在 10.12 及以后失效
nv_disable=1 关闭 N 卡硬件加速
-s 单用户模式
slide=# 手动设置 KASLR slide 值为 #
-v verbose 跑码模式
-x 安全模式
内核驱动提供的引导标识符请去对应驱动的 Readme 查看

https://blog.csdn.net/m_nanle_xiaobudiu/article/details/105649294

推荐使用的是docker方式,运营lnmp容器来实现快速搭建
镜像名称:haveyb/lnmp

主要命令摘要:

cd ~
cd .docker
vi daemon.json
 
#将文件内容替换为下面内容
 
{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
 


docker pull haveyb/lnmp

docker run -itd --name lnmp --privileged -p 6379:6379 -p 80:80 -p 3307:3306 -v /Users/SH-Server:/data haveyb/lnmp /usr/sbin/init


docker exec -it lnmp bash

#exit回到MAC系统中,添加域名绑定到本机
sudo vi /etc/hosts

# 先从mac进入容器内部
docker exec -it lnmp bash

#然后到 /usr/local/nginx/cond.d 目录下创建一个名为 ttt.haveyb.com.conf 的文件,内容如下:
    server {
           listen       80;
           server_name  ttt.haveyb.com;
       
           client_max_body_size 128M;
       
           charset utf-8;
           error_log    /usr/local/nginx/logs/error/ttt.haveyb.com.log error;
           access_log  /usr/local/nginx/logs/access/ttt.haveyb.com.log main;
     
           root   /data/ttt;
           index  index.html index.htm index.php;
       
           location / {
               try_files $uri $uri/ /index.php?$query_string;
           }
       
           location ~ ^/assets/.*\.php$ {
               deny all;
           }
       
           location /favicon.ico {
               log_not_found off;
               access_log off;
           }
       
           error_page  404 403 500 502 503 504  /404.html;
       
           location = /404.html {
               root   /data/errorPage;
            }
        
            location ~ \.php$ {
                fastcgi_pass   unix:/dev/shm/php-cgi.sock;
                fastcgi_index  index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
            }
        
            location ~ /\.ht {
                deny  all;
            }
                
        }
 
#编写测试文件,到定义的网站目录下编写一个测试的PHP文件,这里就是上面指定的 /data/ttt 目录

cd /data
mkdir ttt
vi index.php
 
<?php
phpinfo();

程序管理(在docker 容器中操作)

systemctl status/start/stop/restart/reload nginx
 
# 站点的配置文件放在 /usr/local/nginx/conf.d 目录下

systemctl status/start/stop/restart/reload php-fpm
 
# php.ini 文件位于/usr/local/php/etc/php.ini
 
# phpize全局可用

systemctl status/start/stop/restart/reload mysql
 
# MySQL 数据文件、慢查询日志、错误日志位于 /usr/local/mysql/data 目录下
 
# 配置文件位于 /etc/my.cnf  可以通过设置mysql错误日志级别 log_error_verbosity 来减少mysql错误日志的记录,默认是都记录,建议添加 log_error_verbosity = 1,即只记录error
 
# 初始密码:123456

systemctl status/start/stop/restart/reload redis
 
# conf 配置文件位于 /etc/redis.conf,哨兵sentinel配置文件位于 /etc/redis-sentinel.conf
 
# 初始密码:haveyb


systemctl status/start/stop/restart/reload memcached 

四、Docker 使用过程中可能遇到的问题及解决方案
1、Docker创建容器后并映射端口号后,navicat 远程连接mysql

2、Docker中使用git clone 报错 Could not resolve host: github.com; Unknown error

3、进入容器后,没有clear指令

yum install ncurses

使用 mac 开发过程中,建议使用的软件
1、开发idea 还是使用 PHPStorm
2、连接本地、远程SSH 使用 Termius
3、虚拟机:vmware fusion,只放一些MAC中无法被代替的,否则就没必要了吧
4、连接数据库:navicat Premium
5、接口测试 postman