之前我写过一篇Pjax相关的文章,但是特别水,基本上只讲了简单的调用方法,所以有站右私信我说,想给他自己网站安排上,但是我出的教程又太水了问网能不能详细点,于是我就写了这篇文章,详细讲解一下Pjax页面无刷新加载的原理,当然也算自己的一点学习了想水文章就直接说

之前写的文章看这里:https://www.mengze2.cn/post/6/

什么是Pjax

Pjax(PushState + Ajax)是一种前端技术,旨在提高网页的加载速度与用户体验。它通过结合 AJAX 和浏览器的历史管理功能(PushState),实现局部更新页面内容,而无需整个页面的刷新,这也就几乎完全实现了“沉浸式阅读”,还能提高页面加载速度。

Pjax最初是由 GitHub 的工程师 Dave Ward 开发的,首次发布于 2011年。它的主要目的是为了解决传统页面加载带来的性能问题,提供一种无刷新更新页面内容的方式。

目前,Pjax的维护和开发已经转移到开源社区,GitHub上有多个相关的实现和版本。最常用的Pjax库是 “jquery-pjax”,这个库在GitHub上仍然有活跃的贡献者和维护者,用户可以根据需要对其进行使用和修改。

它的原理

Pjax允许在用户点击链接时拦截默认的页面加载行为,通过异步请求获取新的内容并更新页面,同时使用history.pushState()更新浏览器地址栏的URL,从而实现无刷新地更新网页内容,提升用户体验并保持浏览器的历史记录功能,使得用户能够顺畅地在不同内容之间导航而无需重新加载整个页面。

思维导图

Pjax有两个核心组件,分别是AJAX和PushState

实际上,Pjax的工作流程非常简单
3669477-c5b735a7f2818133.webp

拦截链接点击事件
使用JavaScript拦截用户点击的链接(<a>标签)。
检查链接是否支持Pjax(例如,是否有特定的类名或属性)。

发送Ajax请求
通过Ajax请求获取目标页面的内容。
请求通常是一个HTTP GET请求,URL为用户点击的链接的URL。

更新页面内容
在Ajax请求成功后,获取返回的HTML内容。
提取需要更新的部分(一般是一个特定的容器,如<div id="content">)。
将提取的内容替换当前页面中的相应部分。

更新浏览器历史记录
使用history.pushStatehistory.replaceState API更新浏览器的地址栏URL,确保用户可以使用浏览器的后退和前进按钮。

原理知道了还不知道怎么调用Pjax和给全站安排上吗?

这里推荐用CDN引入,因为快

1
2
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.pjax/2.0.1/jquery.pjax.min.js"></script>

然后JavaScript中加上

1
$(document).pjax('a.pjax', '#content');

就完成了。