优化前我们要了解"异次元发卡"采用什么会话控制获取本地终端上的数据。

为什么异次元网站以及API响应速度会较慢,这跟"异次元发卡"所采用的会话控制有很大的关系。

异次元所采用的会话控制为"Session",Session是将数据存储,储存在服务器上来确保安全。

店铺卡顿原因

1.Session产生的文件锁

为了明白这点,我们首先要知道web server不是通过一个单线程运行你的php代码,他是多个工作线程同时运行,然后处理请求。 一般,浏览网页的用户请求是被序列化的,这也是为什么http长连接起到的作用。通过保持給请求页面的所有资源连接的打开,可以避免连接的开销。 浏览器非常聪明,并且总是试图对HTML页面的请求进行序列化。对于页面上的资产(图像、脚本等),还有另一种策略。 浏览器会从它所看到的HTML中所引用的每个唯一的主机名中并行下载多个资源。 它可以通过打开多个TCP连接或管道来实现这一点。 当一个浏览器任务它正在下载资源,它可能并行的下载这些资源给一个单一的浏览用户。 会话锁定避免这种并发性(通过阻塞)在这种情况下提供对会话数据的可靠访问。

2.session锁如何工作

这个非常简单:当你使用session_start(),php就是阻塞(等待)直到上一个请求的脚本通过session_write_close()进行释放。在Linux主机上,它是依靠flock()方法实现。这是一个警告锁机制,直到这个阻塞被释放。 注意:这部分上锁的时间不会计算在php中的max_execution_time配置项,max_execution_time详见set_time_limit()

3.为什么session锁是必须的

session锁防止在用以存储session数据的共享内存出现竞争条件。每一个PHP进程都会读取整个session的储存,并写回数据在它关闭之前。 这意味要可靠地储存一个登录进来的用户信息(通常在会话数据session中完成),你必须确保没有其他进程已经读取这个session数据,不然将在写入后覆盖掉你保存的数据(因为最后一次写入数据为准)

如何解决卡顿?

1.安装Redis

  • 宝塔用户安装方法:打开软件商店,搜索redis然后进行安装,其他面板或没有使用面板的用户请自行在网络寻找安装教程。

2.为php8安装redis扩展

  • 宝塔用户安装方法:打开php8管理界面,找到安装扩展选项,选择安装redis扩展,其他面板或没有使用面板的用户请自行在网络寻找安装教程。

3.修改php8的配置文件

  • 宝塔用户修改方法:打开php8管理界面,找到Session配置,将存储模式改为redis,然后保存即可。
  • 无宝塔面板的修改方法:打开php8的配置文件php.ini,修改下面的配置:
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
;如果你设置了redis密码,则用下面整个配置
;session.save_path = "tcp://127.0.0.1:6379?auth=你的redis密码"

重启php8后,然后访问你的店铺,你会明显感受大于之前没配置之前的流畅度,你的店铺真的提速了!

加速插件

  • Redis-缓存器 (该插件会将您的API数据进行缓存,该插件按照需求使用~不然不会即使更新数据。)
  • [推荐插件]全站静态资源CDN自动优化 (该插件将您的静态文件使用由"异次元官方"提供加速,有效解决小宽带服务器问题。)

发表评论

您的电子邮箱地址不会被公开。