Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于网页优化这档事

关于网页优化这档事

作者头像
陨石坠灭
发布于 2020-01-21 08:03:33
发布于 2020-01-21 08:03:33
79500
代码可运行
举报
文章被收录于专栏:全栈之路全栈之路
运行总次数:0
代码可运行

关于网页优化这件事,有以下几点我要说。这几点要做到其实很容易,但是很容易被忽略,所以整理出来,方便以后查看。

1. 控制台

不知道大家有没有打开过浏览器的控制台,只需要 右键->检查/审查元素 就可以打开控制台,其中就能可以打印如下消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
console.log("hello world !");

比如百度首页,可以在控制台看到招聘信息,还有一些网站会留QQ群号或者邮箱,这些都是只有业内人士才会注意到的,还有一些网站,会打印出警告信息,提示用户这样做是犯规的。

屏蔽控制台输出

一般,我们做网站或者网页游戏时,总会打印一些信息输出到控制台。刚开始的时候,信息并不多,可随着网站越做越大,可能会有很多信息打印出来。这时候,可以选择将打印到控制台的代码给注释掉。但如果代码太多,而且之后也会用到的话,屏蔽控制台输出是一种不错的选择。

一行代码即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
window.console.log = ()=>{}

这时候,console.errorconsole.info仍然能够输出,但是console.debug打印不出任何信息

当然,错误信息还是有必要暴露出来的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try{
  //todo
}catch( e ){
  console.error(e);
}

那么,有没有办法设置一个屏蔽开关呢?比如,在调试的时候,我就想输出信息,正式环境下,我就屏蔽掉控制台输出。

答案,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var flag = false;

(function disbleLog(dev) {
	var log = console.log;
	console.log = function (message, ...optionalParams) {
          var flag = dev;
		(message && (typeof message == "string") && message.startsWith("$_printInfo_$:")) && ((message = message.replace("$_printInfo_$:", "")) && (flag = true));
		flag && log && log.apply(window, message ? [message].concat(optionalParams) : []);
	}
})(flag);

function printInfo(str){
  console.log("$_printInfo_$:" + str);
}

代码解释:

flag为屏蔽开关,为true时代表可以输出信息,为false时,只输出带$_printInfo_$:前缀的消息

printInfo方法里面的消息,无论在什么时候都可以输出

彩蛋

其实上面提到的:控制台输出招聘信息、QQ群号和邮箱,就可以理解为一种彩蛋。同时,也可以开发一个自己的小游戏,将链接放上去,等待有心人发现,当你打开控制台,发现里面竟然隐藏着一个游戏地址,会不会有些惊喜呢。

当然,彩蛋的话,肯定是让人惊喜的事情,这需要有心人去设计,这得好好琢磨。

曾经就遇到过这样一个博客文章,当切换标签到另外的网站是,该博客网站的标签文本就会变成:“哎呀,网页崩溃了”,当切换回该网站的页面时,它首先提示“咦!又好了”,然后正常显示出原来的标题,感觉这样好有趣啊。

好了,重点还是介绍一个有趣的知识点,即:控制台如何输出带样式的文字呢?

有些人肯定会说:可能吗?

有图有真相:

参考: Chrome 控制台新玩法-console显示图片以及为文字加样式:https://www.cnblogs.com/Wayou/p/chrome_dev_tool_style_console.html

让我们来改造一下printInfo方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function printInfo(str, css){
  css ? setTimeout(console.log.bind(console, '$_printInfo_$:%c ' + str, css), 0) : console.log("$_printInfo_$:" + str);
}

然后方法的使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
printInfo("hello world");
printInfo("hello world","color:red;font-size:50px;");

printInfo("hello world","background: rgba(252,234,187,1);background: -moz-linear-gradient(left, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%,rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);background: -webkit-gradient(left top, right top, color-stop(0%, rgba(252,234,187,1)), color-stop(12%, rgba(175,250,77,1)), color-stop(28%, rgba(0,247,49,1)), color-stop(39%, rgba(0,210,247,1)), color-stop(51%, rgba(0,189,247,1)), color-stop(64%, rgba(133,108,217,1)), color-stop(78%, rgba(177,0,247,1)), color-stop(87%, rgba(247,0,189,1)), color-stop(100%, rgba(245,22,52,1)));background: -webkit-linear-gradient(left, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%, rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);background: -o-linear-gradient(left, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%, rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);background: -ms-linear-gradient(left, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%, rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);background: linear-gradient(to right, rgba(252,234,187,1) 0%, rgba(175,250,77,1) 12%, rgba(0,247,49,1) 28%, rgba(0,210,247,1) 39%, rgba(0,189,247,1) 51%, rgba(133,108,217,1) 64%, rgba(177,0,247,1) 78%, rgba(247,0,189,1) 87%, rgba(245,22,52,1) 100%);filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fceabb', endColorstr='#f51634', GradientType=1 );font-size:5em");
2. 资源压缩

这里不得不提到的就是编写脚本了,因为资源可能需要不断地更换,这时候如果是手动去修改,不仅费时费力,而且还很容易出错。因此,对于这些重复性的工作就脚本来做就行了。

人和动物最大的区别就是人会使用工具,但是其实这句话是错的,人也是一种动物,很多动物都会使用工具,比如蚂蚁、猩猩,而作为高等动物的我们,就更加应该使用工具了。当然,脚本就是我们编写出来的工具。

最常用的脚本语言就是shellpython了,现如今nodejs用起来也很方便,尤其是对于熟悉javascript的人来说,当然能够达到目的就行。不管黑猫白猫,抓到老鼠就是好猫。

接下来,介绍一下资源压缩的几个方面:

图片压缩

使用pngquant压缩图片,下载地址:https://pngquant.org/

命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pngquant <图片> -o <输出路径> --force # --quality <压缩质量>;
``` 

例子:

list_img=$(find ./ -name “*.png”) for img in ${list_img}; do path=“${img}/out/” pngquant $l -o $path –force # –quality 80; echo “compressed png $l $sv du -sh ${l} |awk '{print $1}' -> du -sh ${path} |awk '{print $1}'” done

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
对于一般的大图,这样就可以了,但是对于一些小图标,或者较小的图片,则可以将多张图片合并成一张图片,合成的图片宽高不要超过1024

如果使用`egret`, 则可以用它的一款软件 - `TextureMerger`进行打包。

![TextureMerger软件界面](/images/201812040151368081.png)


参考教材:[Egret TextureMerger 简单使用:https://www.jianshu.com/p/a30102891f39](https://www.jianshu.com/p/a30102891f39)

当然,类似的工具和方法有很多,能达到效果即可

**音频资源压缩**

这里介绍`ffmpeg``ffmpeg`是一个强大的音视频处理工具,很多视频播放器都有用到它,真的非常强大。

这里介绍它的一个命令:

ffmpeg -i <音频文件> -vn -ar 22050 -ac 1 -ab 128 -f mp3 <输出路径>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
**js压缩与合并**

这里用`nodejs``uglifyjs`即可

首先得全局安装:

npm install uglify-js -g

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
使用:

uglifyjs -o <输出文件>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
地址: https://www.npmjs.com/package/uglify-js

另外,js文件如果太多的话,可以考虑合并:

f01=$(find js -name “main.min*”) f02=$(find js -name “index.min*”) f00=“tmp.js”

cat $f01 $f02 > $f00 cat $f00 > $f02 rm -f $f01 $f00

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
合并的时候一定要注意顺序问题,js文件合并需按照文件加载的顺序来,否则的话,有可能报错,尤其是在网络延时较高的环境下


**html页面压缩**

关于html页面压缩,这里介绍一个nodejs库:https://www.npmjs.com/package/html-minifier

接下来就用`html-minifier`写一端`nodejs`脚本:

首先执行`npm init`进行初始化,然后:

npm install fs npm install path npm install node-getopt npm install html-minifier

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
创建脚本`uglyhtml.js`

const fs = require(‘fs’); const path = require(“path”)

var minify = require(‘html-minifier’).minify;

var opt = require(‘node-getopt’).create([ [‘i’, ‘input=ARG’, ‘input-file Path’], ]) .bindHelp() .parseSystem();

var curPath = process.cwd(); var i = opt.options[‘i’];

var htmlFile = path.join(curPath, i); var distFile = htmlFile;

fs.readFile(htmlFile, ‘utf8’, function (error, html) { if (html) { var result = minify(html, { // removeAttributeQuotes: true removeComments: true, //去掉注释 minifyCSS: true, minifyJS: true, collapseWhitespace: true }); fs.writeFileSync(distFile, result); console.log(“compress html: ” + htmlFile); } });

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
调用:

node uglyhtml.js -i

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> 另外关于资源加载的问题,由于资源加载有缓存,有时候我们修改了图片,页面上显示的还是旧的图片。一般情况下,我们会在图片url后面加上一个随机参数,但是更好地做法应该是加上图片的md5码,这样图片只有在修改过后才会及时刷新,而不是每次重新或者没有及时刷新

md5获取摘要也是一个很简单的命令:

tm=$(md5 “<文件>” | awk -F “ ” ‘{print $4}’)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#### 3. 搜索简单优化

搜索优化的话,展开来讲,内容应该挺多的,这里只记录最基本的一点

**关键字和描述**

可以添加作者、关键字以及描述,同时网页的标题也要做出相应的修改

https://analytics.google.com/analytics/web/

Facebook统计

参考:https://www.facebook.com/business/help/402791146561655

关于网页优化这档事。。。连一只史莱姆都可以建立一个王国,我们有什么理由不把网页优化做好呢。。。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/12/04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Chrome 控制台新玩法console显示图片以及为文字加样式
在正常模式下,一般只能向console 控制台输出简单的文字信息。但为了把信息输出得更优雅更便于阅读,除了cosole.log()方法外还可以调用 cosole.warn() 来输出警告信息,在控制台中出来的效果如下:
用户1065635
2019/03/21
1.7K0
console.log新玩法
console.log支持多样化玩法,这里以console.log的css内容输出为例,也就是console.log()输入多样化内容
十月梦想
2018/08/29
7120
console.log新玩法
console.log的炫酷用法
今天使用 chrome 浏览器打开百度首页(https://www.baidu.com),打开开发者工具,windows 下的快捷键是 F12,MAC 上的快捷键通常是option+cmd+i,接着点击 console tab,看到了下面一幕。
猿哥
2019/07/25
1.7K0
个性的Console输出
现在的浏览器都有开发者工具,想必F12是我们常按的键,其中有一个相当重要的面板——Console,用它可以实现查看错误信息、打印调试信息、调试js代码等功能,但我们也可以用Console备注一些特殊信
qiangzai
2021/12/21
1.3K0
个性的Console输出
图像字典加密
{154: 0, 46: 1, 13: 2, 161: 3, 100: 4, 197: 5, 24: 6, 255: 7, 201: 8, 202: 9, 177: 10, 182: 11, 103: 12, 236: 13, 32: 14, 204: 15, 119: 16, 165: 17, 228: 18, 152: 19, 214: 20, 125: 21, 105: 22, 70: 23, 74: 24, 242: 25, 162: 26, 245: 27, 241: 28, 134: 29, 66: 30, 223: 31, 188: 32, 203: 33, 254: 34, 151: 35, 167: 36, 3: 37, 186: 38, 145: 39, 65: 40, 31: 41, 56: 42, 153: 43, 143: 44, 221: 45, 27: 46, 142: 47, 76: 48, 18: 49, 77: 50, 96: 51, 149: 52, 115: 53, 122: 54, 98: 55, 99: 56, 218: 57, 159: 58, 50: 59, 183: 60, 1: 61, 86: 62, 235: 63, 194: 64, 157: 65, 12: 66, 212: 67, 53: 68, 113: 69, 19: 70, 30: 71, 137: 72, 95: 73, 84: 74, 59: 75, 184: 76, 240: 77, 208: 78, 248: 79, 51: 80, 158: 81, 195: 82, 58: 83, 78: 84, 215: 85, 243: 86, 217: 87, 61: 88, 106: 89, 37: 90, 198: 91, 144: 92, 168: 93, 199: 94, 181: 95, 166: 96, 21: 97, 110: 98, 222: 99, 227: 100, 225: 101, 244: 102, 114: 103, 111: 104, 91: 105, 75: 106, 207: 107, 253: 108, 128: 109, 25: 110, 55: 111, 57: 112, 141: 113, 133: 114, 126: 115, 135: 116, 63: 117, 48: 118, 20: 119, 60: 120, 180: 121, 4: 122, 174: 123, 7: 124, 230: 125, 6: 126, 233: 127, 35: 128, 226: 129, 42: 130, 250: 131, 88: 132, 120: 133, 132: 134, 193: 135, 173: 136, 36: 137, 252: 138, 34: 139, 49: 140, 164: 141, 150: 142, 210: 143, 23: 144, 67: 145, 116: 146, 9: 147, 29: 148, 123: 149, 109: 150, 79: 151, 129: 152, 219: 153, 43: 154, 117: 155, 178: 156, 97: 157, 0: 158, 90: 159, 54: 160, 39: 161, 220: 162, 64: 163, 213: 164, 71: 165, 102: 166, 45: 167, 160: 168, 189: 169, 163: 170, 52: 171, 26: 172, 191: 173, 251: 174, 41: 175, 238: 176, 108: 177, 209: 178, 249: 179, 247: 180, 234: 181, 80: 182, 33: 183, 216: 184, 138: 185, 224: 186, 16: 187, 171: 188, 94: 189, 172: 190, 232: 191, 175: 192, 121: 193, 89: 194, 196: 195, 11: 196, 190: 197, 17: 198, 87: 199, 5: 200, 246: 201, 156: 202, 81: 203, 104: 204, 155: 205, 139: 206, 148: 207, 239: 208, 146: 209, 192: 210, 73: 211, 107: 212, 136: 213, 124: 214, 176: 215, 206: 216, 205: 217, 14: 218, 44: 219, 112: 220, 85: 221, 92: 222, 62: 223, 10: 224, 2
裴来凡
2022/05/29
3910
图像字典加密
java 多线程暂停与恢复:suspend,resume
这边做了一个小测试: 实现了runnable接口,在方法中打印count的值: int count =0; @Override public void run() { while(true){ System.out.println(count++); } } 下面将试图唤醒: public static void main(String[] args) throws InterruptedException { MyThread t = new MyThread(); Thr
用户1215919
2018/02/27
1.4K0
Exchange ProxyShell 远程代码执行漏洞复现
今年的Blackhat演讲中,Orange Tsai对其在上一阶段对Microsoft Exchange Server进行的安全研究进行了分享,除了前一段时间已经公开的proxylogon,还带来了ProxyShell等漏洞的有关具体细节。
Timeline Sec
2021/09/14
2.4K0
一款css3很美的iphone注册表单样式
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/120773.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/15
3920
休闲娱乐|手把手教你在Python中使用turtle模块实现二次元少女(一)
小假期悄然走去,选题的任务还未完成,趁着年轻活力的余热好好找找资料来梳理下。今天想要学习的Python语言中的 turtle模块 工具。
六月暴雪飞梨花
2024/04/07
1.1K5
休闲娱乐|手把手教你在Python中使用turtle模块实现二次元少女(一)
休闲娱乐|手把手教你在Python中使用turtle模块实现二次元少女(一)代码部分2
六月暴雪飞梨花
2024/04/07
4830
休闲娱乐|手把手教你在Python中使用turtle模块实现二次元少女(一)代码部分2
Cobalt Strike Powershell 过360+Defender等杀软上线
前几天看了Y4er大佬免杀思路文章,我按照他的思路扩展了下总结的方法给大家参考,如有问题请大佬执教。
黑白天安全
2020/11/03
3.1K0
Cobalt Strike Powershell 过360+Defender等杀软上线
JavaScript 二进制转文件
首先, 我们需要得到二进制的数据以及相应的文件格式,没有相应的格式也可以,可以通过二进制来判断,但相对会麻烦很多,所以建议可以要求后端提供文件的名字来得到相应的文件格式。
菜的黑人牙膏
2019/01/21
4.1K0
休闲娱乐|手把手教你在Python中使用turtle模块实现二次元少女(二)代码部分1
六月暴雪飞梨花
2024/04/07
5520
休闲娱乐|手把手教你在Python中使用turtle模块实现二次元少女(二)代码部分1
深入理解字符串和字节数组转换
      前文中,论及字符串和字节数组的转换,虽然能够找到某个代码页,保证转换的可逆,但是在实际处理中,仍然还有一些细节问题需要注意.       最重要的,就是转换得到的字符串,每个字符的编码和原来的编码可能并不相同,以代码页437为例,127以下的,转换后的字符和转换前的一样,而后面的就完全不同了。下面是437代码页的转换字符和原来内码的对照表。 -             c     {维数:[256]} int[]               [0]   0     int           
用户1075292
2018/01/23
1K0
工具推荐:BadAssMacros免杀宏生成器
在众多的攻击方式中,钓鱼文档攻击仍然扮演者重要的地位,而随着各类安全防护设备的成熟,宏免杀一直是我们所讨论的问题,之前有MacroPack(收费版仍然好用)可以生成免杀宏文档,但特征已被标记,今天介绍的这款工具则仍然效果很好。
鸿鹄实验室
2021/08/25
1.7K0
装逼必备:开平方的七种算法
sqrt()函数,是绝大部分语言支持的常用函数,它实现的是开方运算;开方运算最早是在我国魏晋时数学家刘徽所著的《九章算术》被提及。今天写了几个函数加上国外大神的几个神级程序带大家领略sqrt的神奇之处。
帅地
2019/11/05
3.3K0
装逼必备:开平方的七种算法
CTF逆向--.NET与Python篇
题目(来源:Jarvis-OJ): Classical Crackme Classical CrackMe2 FindKey Login Classical Crackme 首先查壳 没有壳,不过发现
安恒网络空间安全讲武堂
2018/02/23
2.8K0
CTF逆向--.NET与Python篇
【记】2021年第十二届极客大挑战
F12就行,SYC{Welcome_to_Geek_challenge2021};  
sidiot
2023/08/31
3770
【记】2021年第十二届极客大挑战
HTML转义字符对照表
HTML转义字符对照表 小贴士:Ctrl+F 快速查找 十进制字符 以及 转义字符
很酷的站长
2022/12/02
1.5K0
论文配色方案(可以借鉴!)
0780cf - 765005 - fa6d1d - 0e2c82 - b6b51f - da1f18 - 701866 - f47a75 - 009db2 - 024b51 - 0780cf - 765005
自学气象人
2023/06/21
7870
论文配色方案(可以借鉴!)
相关推荐
Chrome 控制台新玩法console显示图片以及为文字加样式
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验