当前位置: 首页 > news >正文

网站产品标题怎么写西安网站建设设计的好公司排名

网站产品标题怎么写,西安网站建设设计的好公司排名,发来贵州省建设厅网站,网站建站多钱前言 DNS解析过程消耗时间DNS有本地缓存 比如首次访问某站点,会耗费很多时间进行DNS解析,但解析结束后会将ip地址存入本地设备,后续再访问此域名时就会直接从缓存中取。 首次访问页面时,本页面的DNS解析是无法优化的&#xff0…

前言

  • DNS解析过程消耗时间
  • DNS有本地缓存

比如首次访问某站点,会耗费很多时间进行DNS解析,但解析结束后会将ip地址存入本地设备,后续再访问此域名时就会直接从缓存中取。

首次访问页面时,本页面的DNS解析是无法优化的,但是页面中可能用到其他域名下的资源,如css、图片、js等,可以通知浏览器提前对这些资源进行异步DNS解析。

在这里插入图片描述

实现

以下代码引入了其他域名下的资源,需要在head中添加link进行dns预解析,格式如下:

<link rel="dns-prefetch" href="https://www.xxx.com">
<!DOCTYPE html>
<html lang="en"><head><link rel="dns-prefetch" href="https://www.abc.com"><link rel="dns-prefetch" href="https://www.aaa.com"><link rel="dns-prefetch" href="https://www.tes.com"><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.container {background: url('https://www.abc.com/imgs/main-bg');}</style>
</head><body><div class="container"><img src="https://www.aaa.com/img/32fd.jpg" alt=""></div><script src="https://www.tes.com/sss.js"></script>
</body></html>

框架内实现

但是合作开发模式下,站外资源的引用会分散到很多组件中,难以集中控制且由于是手动写死的地址,也会提高维护成本

本文提供两种方式,分别为手写js实现以及vite插件,如果想将js插件发布到npm可以看另一篇文章:如何将自己的插件发布到npm上。

方式一:手写js实现

标准的做法应该是根据构建工具写一个插件,如vite用的rollup,就要写一个rollup插件,但是本文通过node实现

首先需要实现分析打包结果中的js,取出站外资源对应域名,并动态添加link标签到html的head中。

在这里插入图片描述

新建js用于动态插入link

项目中新建scripts目录,

确保项目中有如下插件

npm install node-html-parser
npm install glob
npm install url-regex

dns-prefetch.cjs代码内容如下:

// 该node文件:识别打包结果中的站外资源地址并动态插入index.html中link实现dns-prefetch,提高渲染速度
// 调用方式:node ./scripts/dns-prefetch.jsconst fs = require("fs")
const path = require("path")
const { parse } = require("node-html-parser") // 可以脱离浏览器环境将html字符串解析成HTML节点
const { glob } = require("glob")
const urlRegex = require("url-regex") // 可以分析文件中所包含的url
const { strict } = require("assert")const urlPattern = /(https?:\/\/[^/]*)/i // 获取外部链接
const urls = new Set() // url集合// 遍历dist目录中的所有 HTML 文件
async function searchDomain() {const files = await glob("dist/**/*.{html,css,js}")for (const file of files) {const source = fs.readFileSync(file, "utf-8")const matches = source.match(urlRegex({ strict: true }))if (matches) {matches.forEach((url) => {const match = url.match(urlPattern)if (match && match[1]) {urls.add(match[1]) // 将域名加到Set中}})}}
}// 将遍历好的所有域名生成link预解析标签并插入到index.html中
async function insertLinks() {const files = await glob("dist/**/*.html")const links = [...urls].map((url) => `<link rel="dns-prefetch" href="${url}">`).join("\n")for (const file of files) {const html = fs.readFileSync(file, "utf-8")const root = parse(html)const head = root.querySelector("head")head.insertAdjacentHTML("afterbegin", links)fs.writeFileSync(file, root.toString(), "utf-8")}
}async function main() {await searchDomain()await insertLinks()
}main()

package.json中在打包处理后执行该js

"scripts": {"dev": "vite","build": "vite build && node ./scripts/dns-prefetch.cjs","preview": "vite preview"
},

&&的意义:如 vite+ts 项目默认打包为:"build": "tsc && vite build",意为先进行ts语法检查,再打包,如果语法检查错误则立即停止。所以此处将自定义js放到打包后执行。

查看dist中index.html,发现link已经插入。

在这里插入图片描述

方式二:vite-plugin-prefetch-dns插件

npm install vite-plugin-prefetch-dns
import { defineConfig } from 'vite';
import prefetchDns from 'vite-plugin-prefetch-dns';export default defineConfig({plugins: [...其他插件prefetchDns()]
});

执行npm run build,打包完毕后看到正确插入link标签。

http://www.bjxfkj.com.cn/article/108749.html

相关文章:

  • .net网站程序seo技能培训课程
  • 微信建站官网免费注册网站 提示建设中
  • 简单手机网站如何制作wordpress用户组
  • 思明区建设局官网站wordpress eshop 教程
  • 网站建设解决方徐州关键字优化咨询
  • 平台网站开发的税率电子表格做网站框架
  • 婚礼设计方案网站php网站开发几技术难点
  • 制作网站 优帮云顾问式营销
  • 网站建设 技术wordpress评论滑动
  • 网站开发 绩效考核南宁模板网页制作
  • 阿里巴巴新网站怎么做运营爱站网长尾关键词挖掘工具福利片
  • 如何做好网站建设内容的策划重庆市住房和城乡建设厅官方网站
  • 下载网站的软件wordpress最新发布模块
  • 网站建设 东方网景廊坊百度网站排名
  • 长春专业做网站的公司排名wordpress运行
  • 平面广告作品分析昆明seo网站排名优化
  • 网站平台建设工作汇报伊春网络运营推广
  • 定制开发 商城网站 最快天翼云wordpress插件
  • 电子商务公司网站设计凡客科技
  • 流程网站广东队对阵广州队
  • 网站的页面布局福建省文明建设办公室网站
  • 生物科技企业网站做的比较好的免费建设手机网站
  • 做地方的门户网站wordprees可以做棋类网站吗
  • 做响应式网站的常用尺寸园区网络建设方案
  • 全屏式网站花店网页制作素材
  • 来年做那个网站能致富网站支付功能建设
  • 济南市莱芜区网站应用市场华为
  • 做电影网站涉及的侵权问题重庆网站推广运营
  • 网站前端设计与实现设计本接单大厅
  • 沈阳营销网站建设做电销要在哪个网站上找资源