之前我写过一篇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的工作流程非常简单
拦截链接点击事件:
使用JavaScript拦截用户点击的链接(<a>
标签)。
检查链接是否支持Pjax(例如,是否有特定的类名或属性)。
发送Ajax请求:
通过Ajax请求获取目标页面的内容。
请求通常是一个HTTP GET请求,URL为用户点击的链接的URL。
更新页面内容:
在Ajax请求成功后,获取返回的HTML内容。
提取需要更新的部分(一般是一个特定的容器,如<div id="content">
)。
将提取的内容替换当前页面中的相应部分。
更新浏览器历史记录:
使用history.pushState
或history.replaceState
API更新浏览器的地址栏URL,确保用户可以使用浏览器的后退和前进按钮。
原理知道了还不知道怎么调用Pjax和给全站安排上吗?
这里推荐用CDN引入,因为快
1 | <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> |
然后JavaScript中加上
1 | $(document).pjax('a.pjax', '#content'); |
就完成了。