打造高性能、安全的 JavaScript 应用
// 避免频繁操作 DOM
const element = document.querySelector('.container');
// 坏的做法
for (let i = 0; i < 1000; i++) {
element.innerHTML += `<div>Item ${i}// 创建 Worker
const worker = new Worker('worker.js');
// 发送消息给 Worker
worker.postMessage({
type: 'calculate',
data: 1000000
});
// 接收 Worker 的消息
worker.onmessage = (event) => {
console.log('Result:', event.data);
};
// 错误处理
worker.onerror = (error) => {
console.error(error);
};
// worker.js
// self.onmessage = (event) => {
// const { type, data } = event.data;
// if (type === 'calculate') {
// let result = 0;
// for (let i = 0; i < data; i++) {
// result += i;
// }
// self.postMessage(result);
// }
// };
//// 在 HTTP 响应头中设置 CSP
// Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com;
// 或在 HTML 中设置
<!--
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://trusted-cdn.com">
-->// 避免直接插入 HTML
// 坏的做法
const userInput = '<script>alert("XSS")</script>';
element.innerHTML = userInput; // 危险!
// 好的做法:使用 textContent
element.textContent = userInput; // 安全
// 或使用 DOMPurify
// const clean = DOMPurify.sanitize(userInput);
// element.innerHTML = clean;
// 对 URL 参数进行编码
const safeUrl = encodeURIComponent(userInput);
// 使用 CSP 禁止内联脚本
// Content-Security-Policy: script-src 'self';// 安装 Vite
// npm create vite@latest my-project -- --template vanilla
// vite.config.js
// import { defineConfig } from 'vite'
//
// export default defineConfig({
// build: {
// minify: 'terser',
// rollupOptions: {
// output: {
// manualChunks: {
// vendor: ['react', 'react-dom'],
// common: ['lodash']
// }
// }
// }
// }
// })
//
// 构建命令
// npm run build// 安装 Webpack
// npm install webpack webpack-cli --save-dev
// webpack.config.js
// const path = require('path');
//
// module.exports = {
// entry: './src/index.js',
// output: {
// path: path.resolve(__dirname, 'dist'),
// filename: 'bundle.js'
// },
// mode: 'production'
// };
//
// 构建命令
// npx webpack