Web
网站上线检查清单:
域名 A/AAAA/HTTPS 解析检测,IPv4和IPv6均应双栈正常访问,或不要勾上网络适配器IPv4的IPv6单网络协议栈情况。
服务器ping延迟控制在200ms,国内则40ms;丢包率应低于3%。
中国大陆备案过的域名,云平台会稽查扫描带www的域名,故直接不解析或放个静态首页,挂个备案号应付下。
引用的 JavaScript 脚本,部分 CDN 或域名被墙,应改为:单文件无引用的直接本地拷贝,有引用的则用墙内源。
图片或静态文件资源应放至二级域名,避免顶级域名总是携带Cookie的负担。
动图首选APNG格式,次选WebP和AVIF。
ICO图标尺寸定为 256x256 像素,浏览器支持favicon.ico图标重定向。
上传大小限制 - Nginx默认1MiB,需显式设置较大值,至少测试下低于1MiB和超出1MiB这两种情况。
检查 CORS 跨域情况,比如前端API网关(Nginx等)或 GCS 的 bucket.toBuilder().setCors(ImmutableList.of(cors)).build().update();
检查 WebSocket和SSE长连接超时配置。
必须转义HTML标签value="含双引号"等属性。
a链接颜色要跟普通内容有所区分,提高用户点击的几率。
a链接添加rel="noreferrer"来禁止传递document.referrer,也可避免(target="_blank")新开页控制原页面: window.opener.location.href ="恶意域名.com"
标签的文件后缀限制会被绕过,故应通过JS事件onchange或后端再次检查下:<input type="file" id="file" accept=".wav,.flac,.webm,.ogg,.mp3" onchange="checkAndPreview(this)" />
浏览器
Chrome 设置页网址为 chrome://settings 手机模式和真机观察下,或长内容不换行看会不会破坏布局。
实验性功能 - 可通过 chrome://flags 进入。
Safari 设置页无进入网址,可在“设置”->App->Safari浏览器 中找到。
功能开关 - 检查新特性支持情况,可在“高级”-> 功能开关 找到。
页面元素载入完成后触发(早于onload事件):
<script> document.addEventListener("DOMContentLoaded", (evt) => { console.log(evt); }); </script>
不存在 onDOMContentLoaded 属性,但有 ononline 等;可省略 event 入参: (/* evt */) => { };
DOMContentLoaded 触发后,保证函数只执行第一次(默认多处多次执行):
// Web Workers 中无法访问,故只会在主线程中进行原子性判断。
if (document.readyState === "loading") { // 此时文档加载尚未完成
document.addEventListener("DOMContentLoaded", once);
} else { once(); } // 已错过注册时机,故直接执行。
// 函数会在JS解析时自动提升至作用域顶部,即允许先调用再定义。
function once(evt) { console.log(evt.currentTarget); }
循环执行:
var cbNumber; var cbTimeout = 1000;
var cb = () => { // 不可见时循环执行空任务。
if (document.visibilityState === 'visible') {
console.log("interval callback - " + new Date());
}
};
cbNumber = setInterval(cb, cbTimeout); // 参3为callback入参。
window.addEventListener('beforeunload', () => {
if (cbNumber) { clearInterval(cbNumber); } // 关闭页面清除循环任务;无法遍历。
});
富媒体结构化数据:
注 - Google Search 已废弃搜索页嵌入站内搜索框:由 potentialAction 子项 SearchAction 定义。
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"url": "https://nav.congci.com/",
"name": "从此搜索",
"alternateName": ["Congci", "congci.com", "从此网"]
}
</script>