前端工程打开速度优化的循序渐进总结
前端工程打开速度优化的循序渐进总结
转载自:http://www.cnblogs.com/zhengyun_ustc/archive/2013/05/09/frontendoptimize.html https://www.jianshu.com/p/d9c20eafa67e
优化的重要指标:
页面打开速度(Fully Loaded)
网站首页(或列表页)之 First View :打开速度应在 3秒+0.5秒 内;
对 Repeat View 时的各项指标暂不作要求;
首屏打开时间(Start Render)
网站首页(或列表页) 之 First View :首屏渲染速度应在 1秒+0.5秒 内;
文档解析完毕时间(Document Complete):
对此指标暂不作要求。
指标测试方法参考附录A。
提纲:
遵循常规优化建议
外联内联js/css的位置摆放建议
combo handler的引入
图片无损压缩的优化
减少 dom elements 的数量
引入 textarea/script 元素做延迟解析异步渲染
优化第一阶段:遵循常规优化建议
本阶段所使用工具参考附录B。
常规优化建议:
javascript 外联文件引用放在 html 文档底部 :具体如何摆放内联JS/CSS和外联JS/CSS,请参考 优化第二阶段;
css 外联文件引用在 html 文档头部 :位于 header 内;
http 静态资源尽量用多个子域名 :充分利用现代浏览器的多线程并发下载能力。浏览器的多线程下载能力,参考 附录C;
服务器端提供 html 文档和 http 静态资源时,尽量开启 gzip 压缩 ;
json/xml 等格式的文本响应,也建议开启 gzip ;
jepg/png 等图片,可以选择不开启 gzip,因为可能服务器端图片无损压缩算法已经很强悍了,不需要依赖于 gzip;
在 js、css、image 等资源响应的 http headers 里,设置 expires、last-modified ;
尽量减少 HTTP Requests 的数量 ;
通过 combo handler 合并 js 和 css 的下载,参考 优化第三阶段;
本阶段请尽量减少外联 js/css 文件数,尽量减少 ajax 调用;
js/css 的 minify :可统一通过 combo handler 做到压缩加合并;
减少不必要的 301/302 跳转 :别让页面打开时间浪费在302多次跳转上(每次可能几十毫秒);
请大量使用 CSS Sprites :这样做可以大大地减少CSS背景图片的HTTP请求次数;
首屏不需要展示的较大尺寸图片,请使用 LazyLoad ;
避免404错误 :请求一个外联 js 失败时获得的404错误,不但会堵塞并行的下载,而且浏览器会尝试分析404响应的内容,来辨识它是否是有用的Javascript代码;
减少 cookies 的大小 :尽量减少 cookies 的体积对减少用户获得响应的时间十分重要;
去除不必要的 cookie ;
尽量减少 cookie 的大小;
留心将 cookie 设置在适当的域名下,避免影响到其他网站;
设置适当的过期时间。一个较早的过期时间或者不设置过期时间会更快地删除 cookie,从而减少响应时间。
使用无 cookies 的域 :
当浏览其请求一个静态图片并一同发送 cookie 时,服务器并不需要这些 cookies 。这样只是毫无益处地创建了多余的网络流量。应当保证静态资源在请求时没有携带 cookies,所以需要把你的静态资源放在另一个子域名下。
如果你的域名是 www.example.org,你可以将你的静态资源放在 static.example.org 中。如果你把 cookie 设置在顶级域名 example.org 上而不是 www.example.org,那么所有发送至 static.example.org 的请求会包括那些 cookies。在 这种情况下,你可以用一个全新的没有 cookie 的域名来放置你的静态资源。
避免使用 javascript 来定位布局 ;
优化第二阶段:外联内联js/css的位置摆放建议
玉伯定义的加载和阻塞三定律如下:
定律一:资源是否下载依赖 JS 执行结果——****JS 有可能会修改 DOM。 典型的,可能会有 document.write
。这意味着,在当前 JS 加载和执行完成前,后续所有资源的下载有可能是没必要的。这是 JS 阻塞后续资源下载的根本原因。
定律二:JS 执行依赖 CSS 最新渲染——****JS 的执行有可能依赖最新样式。 比如,可能会有 var width = $('#id').width()
. 这意味着,JS 代码在执行前,浏览器必须保证在此 JS 之前的所有 css(无论外链还是内嵌)都已下载和解析完成。这是 CSS 阻塞后续 JS 执行的根本原因。
定律三:现代浏览器存在 prefetch 优化—— 现代浏览器在竞争中,在 UI update 线程之外,还会开启另一个线程,对后续 JS 和 CSS 提前下载(注意,仅提前下载,并不执行)。有了 prefetch 优化,这意味着,在不存在任何阻塞的情况下,理论上 JS 和 CSS 的下载时机都非常优先,和位置无关。
根据三定律,郑昀认为:
一,如果真的需要把外联js和css放在head里,那也需要从下面这种排序
外联js
2. ****外联css
外联js
统一为:
1. ****外联css
外联js
外联js
不要script****和css****交替混编。
原因是,据有人称:『
从Firefox 4+开始,对prefetch的策略有些许调整,调整在于 head 中 css 与 js 的位置。
css 在外联 js 后面时,可能会在 script 后面的 css 加载好之前,提前进行首次渲染。
然后等后面的 css 加载好后,再次更新 Render Tree 并进行渲染,造成页面闪烁现象。
即,各种优化策略,似乎随着浏览器版本不同,头可能发生细微差异。
』
所以郑昀认为,保守做法是,js ****和 css ****不要在 head ****里交替混编,统一为先外联css****再外联js****!
二,但只有万不得已时,才会在 head 里放外联js,否则请把外联js放置到
前。
原因是张克军的《js和css的顺序关系》指出:
只要 head 里出现外联js,无论如何放,css文件都不能和body里的请求并行。
body 里 dom 渲染取决于 head 里的js执行完。
外联js放在页面最后,高级浏览器会自动做优化(prefetch),你不用担心,它也可能会提前下载。
优化第三阶段:combo handler 的引入
背景
Combo Handler 是 Yahoo! 开发的一个 Apache 模块,它实现了开发人员简单方便地通过URL来合并JavaScript和CSS文件,从而大大减少文件请求数。
目的
它满足 Yahoo! 前端优化第一条原则:Minimize HTTP Requests,来减少三路握手和HTTP请求的发送次数。
国内实例
淘宝网首页meta里多个js合并的声明:
js之间用英文逗号或&符号分隔。此src的Response是多个js文件的内容拼装。
国内的 Combo Script 支持
淘宝李晶-拔赤在 https://github.com/jayli/combo 下发布了combo.php和minfy.php,能够做到合并文件(不压缩),以及合并且压缩。
文件列表:
combo.php 合并文件,不压缩
minify.php 合并压缩文件
cssmin.php 压缩css
jsmin.php 压缩js
cb.php 淘宝CDN合并文件策略的模拟
脚本使用:
要求php5及以上版本
程序在找不到本地文件的情况下,会去指定的cdn上找同名文件
程序会自动转义-min文件为源文件,因此要约定-min文件和原文件要成对出现
需要定义combo.php和minify.php中的$YOUR_CDN变量
如果只是合并压缩local文件,则不必重置$YOUR_CDN变量
这里提供cb.php,用来实现tbcdn的开发环境的模拟,apache的配置在cb.php中
CDN上的 Combo Handler支持
1)2008年7月YUI Team宣布在YAHOO! CDN上对YUI JavaScript组件提供Combo Handler服务。
2)淘宝CDN支持Combo Handler,用逗号分隔js/css,用两个问号来触发combo特性:
http://a.tbcdn.cn/??1.js,2.js
http://a.tbcdn.cn/subdir/??1/js,2.js
用一个问号来添加时间戳,如:
http://a.tbcdn.cn/??fp/directpromo.js?t=2012062320120712
为了避免 CDN 缓存错误的版本,combo上线的访问策略是:
1)静态文件传到服务器端;
2)部署人员使用线上静态文件服务器的IP地址直接请求combo服务,挨个儿combo请求一次;
3)部署人员确认上面的请求都成功、内容无误后,再换成CDN地址再次请求,确保CDN缓存正确的文件内容。
优化第四阶段:图片无损压缩的优化
页面上的各种图片是否有优化的余地,推荐使用 PageSpeed 检测一下。
下面的建议来自于冯凯。
由于专卖店等各种业务上传的图片有 jpeg、png 和 gif 等格式,因此三种格式都需要优化:
1)jpegtran和jpegoptim的压缩效果几乎完全相同。
但jpegtran有progressive编码(渐进式的展示,先显示模糊的,再逐步清晰),而且通常(84%的概率)对于大图片(10k+)压缩比更高。
虽然我们的大部分页面已经改成延迟加载了,但对于非延迟加载的页面,效果明显更好。
经测试,pagespeed 并没有按照 progressive 方式提供建议。
2)测试了png的几种压缩方式,压缩效果各异。测试的一张图片 optipng 只压缩了约5%,但其他几种达到了20%+
经测试,pagespeed上给出的可压缩比例是按照optipng给出的。
pngout据说采用了不同的编码,因此对小图片压缩效果更好。用imageoptim测试确实略优,但命令行上还没找到合适的调用参数。
目前决定采用pngcrush。
对于采用png8,以大幅压缩的方法,我们不做技术处理。
3)gif就采用gifsicle做压缩。
大部分情况下,我们不建议采用gif图片。对于单帧gif更应该用png格式替代。
这里我们暂不考虑通过技术处理来吧单帧gif转换成png。
4)采用php的exec调用shell脚本的方式来执行这些bin文件。
参考资料:
stoyan,image-optimization-for-the-web-at-phpworks-presentation,幻灯片;
老王,优化图片,2009;
优化第五阶段:减少 DOM Elements 的数量
据玉伯说,对于典型的淘宝商品详情页,经测试发现,每增加一个 DOM 节点,会导致首屏渲染时间延迟约 0.5ms 。
2011年时,我们首页一个商品节点包含了21 个DOM节点,充满了大量的em、strong、span。
所以前端开发部门必须与产品部交互设计人员积极沟通,而不仅仅是在她们提供的交互设计稿件上切图,必须在简化视觉元素和精简DOM节点上表达自己的意见。
2012年,简化设计后,首页一个商品节点包含13 个节点。
优化第六阶段:引入 textarea/script 元素做延迟解析异步渲染
textarea 延迟渲染原理
据玉伯介绍,HTML 元素中有一种 RCDATA elements,含 textarea 和 title 。
RCDATA指的是,Replaceable Character Data。
如果用隐藏的 textarea 来存放 html 代码,textarea 中的内容会按照 RCDATA 规则来解析:
遇到 & 时,会尽可能得到实体字符。
遇到 ) 时,会结束解析。
其他都直接作为 textarea 的内容。
http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_clipboard03.png
获取也非常简单:
http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_clipboard04.png
据yiminghe介绍,对于屏幕外延迟渲染的 html 存放在隐藏(visibility:hidden)的 textarea 中,并且该 textarea 占据本该渲染的位置,监控窗体滚动,当textarea进入可见区域,将该 textarea 内的 value, 插入到 textarea 之前,并删除掉 textarea 。
这样,把大量不需要在首屏展示的html代码分模块放入一个一个的 textarea 里,大大减少了DOM节点数 ,从而给浏览器合理的喘息(UI Update)时间,等首屏真正在显示器上绘制出来后 ,再得到 textarea.value ,填充回 DOM Tree。
textarea+datalazyload,相对于其他延迟加载异步渲染解决方案,最大好处,还是减少首屏绘制时的DOM节点总数。
参考资料:
玉伯(王保平,id@lifesinger)《淘宝详情页的 BigRender 优化与存放大块 HTML 内容的最佳方式》(需FQ)
BigRender所依赖的“数据延迟加载组件”datalazyload
yiminghe《数据延迟加载组件》
script 延迟渲染原理
玉伯在《淘宝详情页的 BigRender 优化与存放大块 HTML 内容的最佳方式》中提到,
与前面说的 textarea 存放 html 代码一样,你也可以用 script 来存放,目的都是减少 DOM 节点数。
浏览器在拿到 html 代码时,首次 Tokenization — Tree Construction 的速度就会大大加快。
http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_clipboard026.png
某网是怎么实践的
在某网商品详情页上,HTML 文档底部遍布着这样的代码:
http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_clipboard027.png
注意这些 script 的 type 是 text/x-template , 这是YUI类库自己定义的元素type。
你可以注意到,LABjs 也玩过这个小技巧,也是自己定义了一个元素 type“text/cache”, 由于浏览器不认识这种 type,就会主动忽略这个 HTML元素。
什么时候取出这些隐藏HTML代码呢?
那就要用到这些 script 的 id 了。
YUI的教程上是这么获得 HTML 代码:
template: Y.one('#todo-item-template').**getHTML**(),
某网的做法是:
比如id=search-path-markup的script,
也是用Y.one来拿:
http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_clipboard028.png
然后用_6e.getContent()方法:
http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_clipboard029.png
某网由于走的是 YUI3.0 体系,所以可以利用 script 存放html代码技巧,让商品详情页首屏更快地渲染出来。
我们的实践
在商品详情页上,我们把很多不需要首屏渲染的 html 代码放入了类似于
的隐藏 textarea 里了。
然后在 html 文档底部,放内联 js 来读取:
$(function(){
var area = document.getElementById("goodsAll_info").value;
document.getElementById("goodsAll_info_div").innerHTML = area;
});
附录A:页面打开速度和首屏打开时间的测量
推荐工具:
推荐使用 http://www.webpagetest.org/ 评测,由于它受限于并发测试和带宽,所以资源下载速度较差,只能作为与竞争对手对比测试的依据;
Test Location 请选择亚洲的中国江苏节点;
Browser 请选择 Firefox、IE9、Chrome等现代浏览器;
如下图所示:
郑昀
运维部的每周博睿检测数据报告,我们以博睿的数据为准 ;
博睿从它的各地监测节点以及不同电信链路访问,得到一个响应速度的平均值;
Google PageSpeed https://developers.google.com/speed/pagespeed/insights 的 Critical Path Explorer;
附录B:能提出常规优化建议的工具
推荐工具:
Firefox插件 YSlow! ;
Google PageSpeed https://developers.google.com/speed/pagespeed/insights ;
附录C:浏览器多线程下载能力一览
参考怪飞的文章《各浏览器的并行连接数(同域名) 》:
| Browser | HTTP/1.1 | HTTP/1.0 | | IE 6,7 | 2 | 4 | | IE 8 | 6 | 6 | | Firefox 3+ | 6 | 6 | | Safari 3+ | 4 | 4 | | Chrome 3+ | 4 | 4 | | Chrome 11+ | 6 | ? | | Opera 10+ | 4 | 4 | | Opera 11+ | 16 | ? |
附录D:expires和last-modified概念
1)Expires
给出的日期/时间后,被响应认为是过时。如Expires: Thu, 02 Apr 2009 05:14:08 GMT
需和Last-Modified结合使用。用于控制请求文件的有效时间,当请求数据在有效期内时客户端浏览器从缓存请求数据而不是服务器端. 当缓存中数据失效或过期,才决定从服务器更新数据。
2)Last-Modified和Expires
Last-Modified标识能够节省一点带宽,但是还是逃不掉发一个HTTP请求出去,而且要和Expires一起用。而Expires标识却使得浏览器干脆连HTTP请求都不用发,比如当用户F5或者点击Refresh按钮的时候就算对于有Expires的URI,一样也会发一个HTTP请求出去,所以,Last-Modified还是要用的,而 且要和Expires一起用。
你可能感兴趣的:(前端工程打开速度优化的循序渐进总结)
Ubuntu22.04安装CUDA10.1
想夹逼但不收敛
ubuntu c++
Ubuntu22.04安装CUDA10.1前言gcc降级添加软件源更新软件源安装gcc-7更换gcc版本安装CUDA10.1前言ubuntu22.04支持cuda10.7以上的版本,而在一些情况下我们需要用到低级的cuda版本,本文以用ubuntu22.04安装cuda10.1为例。而在ubuntu中最主要的是gcc的变化,我们需要7.5+的gcc,而一般情况下ubuntu22.04只有gcc11
GEE 训练教程——哨兵2号、Landsat-8以及DEM影像的可视化展示
此星光明
GEE教程训练 人工智能 gee javascript Landsat sentinel dem 可视化
目录简介1.哨兵2号(Sentinel-2)2.Landsat-83.CGIAR/SRTM90_V4函数visualize(bands,gain,bias,min,max,gamma,opacity,palette,forceRgbOutput)Arguments:Returns:Imageexpression(expression,map)Arguments:Returns:Imageee.Te
机器人介绍
max500600
机器人 机器人
以下是关于机器人的介绍:定义机器人是一种能够自动执行任务的机器系统,它集成了机电、机构学、材料学及仿生学等多个学科技术,可以接受人类指挥,运行预先编排的程序,或根据人工智能技术制定的原则纲领行动,具备感知、决策、执行等基本特征,可辅助甚至替代人类完成各种任务。发展历程萌芽期:1954年第一台可编程的机器人在美国诞生,1959年世界上第一台工业机器人研制成功,随着机构理论和伺服理论的发展,机器人进入
ceph新增节点,OSD设备,标签管理(二)
淡黄的Cherry
存储篇 ceph
一、访问客户端集群方式方式一:使用cephadmshell交互式配置[root@ceph141~]#cephadmshell#注意,此命令会启动一个新的容器,运行玩后会退出!Inferringfsidc153209c-d8a0-11ef-a0ed-bdb84668ed01Inferringconfig/var/lib/ceph/c153209c-d8a0-11ef-a0ed-bdb84668ed0
QT6.5+qt-quick学习笔记
m0_63052064
学习
为什么用QMLQML是一种声明式语言,这意味着开发者只需要描述用户界面的外观和行为,而不需要关心具体的实现细节。这种方式减少了代码量,使得界面设计更加直观和高效。QML提供了丰富的UI组件和动画效果,开发者可以快速创建出现代化、用户友好的应用程序QML基于JavaScript并且与JavaScript的结合使得创建交互式和动画效果变得简单且高效。开发以Debug方式可以按步运行,调试;releas
网上FLAC3D学习笔记
lqlong19922008
FLAC数值模拟 primitive plot interface filter ini table
建议:初学者将FLAC/FLAC3D版所有帖子都浏览一遍;学有所得后,再浏览一遍,会发现又有新的收获。第一部分(相关链接)1.FLAC3D知识基本介绍SimWehttp://www.simwe.com/forum/viewthread.php?tid=209662http://www.simwe.com/forum/viewthread.php?tid=573644http://www.simwe
探索Reflex:用纯Python构建高性能Web应用
倪姿唯Kara
探索Reflex:用纯Python构建高性能Web应用项目地址:https://gitcode.com/gh_mirrors/re/reflex项目介绍Reflex,前身为Pynecone,是一个革命性的开源库,允许开发者使用纯Python构建全栈Web应用。Reflex的核心理念是简化Web开发的复杂性,通过提供一个统一的框架,让开发者能够专注于业务逻辑而非技术细节。无论是初学者还是经验丰富的开
机器学习:利用sklearn实现心脏病预测
薄化克Oswald
机器学习:利用sklearn实现心脏病预测机器学习sklearn实现心脏病预测项目地址:https://gitcode.com/Resource-Bundle-Collection/171ff欢迎使用本资源仓库,本项目专注于利用Python的sklearn库进行心脏病预测的机器学习实践。通过详尽的步骤和示例代码,本项目为你展示了如何应用不同的机器学习算法来分析心脏病数据集,并预测患者是否有可能患有
探索灵活高效的UI开发新境界:Reflex库
荣正青
探索灵活高效的UI开发新境界:Reflex库reflexjsAlibraryforrapidUIdevelopmentwithstyleprops,colormodes,themesandvariants+starterkits,themesandblockstohelpyoubuildGatsbyandNext.jssitesfaster.项目地址:https://gitcode.com/gh_
探索Reflex:纯Python打造高性能web应用的未来
孔岱怀
探索Reflex:纯Python打造高性能web应用的未来去发现同类优质开源项目:https://gitcode.com/在快速迭代的Web开发领域,寻找一种既高效又能让开发者以熟悉的方式工作的框架至关重要。今天,我们来深入了解一个革新性的开源项目——Reflex,它承诺让你在纯Python的环境中构建响应式web应用,并且能在几秒钟内完成部署。1.项目介绍Reflex是一个新兴的全栈web框架,
MongoDB 查询文档
dongba8
mongodb postman 数据库
MongoDB查询文档使用find()、findOne()方法。find()方法以非结构化的方式来显示所有文档。语法MongoDB查询数据的语法格式如下:db.collection.find(query,projection)query:用于查找文档的查询条件。默认为{},即匹配所有文档。projection(可选):指定返回结果中包含或排除的字段。查找所有文档:实例db.myCollection
python | cudf,一个超实用的 Python 库!
双木的木
python拓展学习 python库 python 开发语言 人工智能 深度学习 算法 database 数据分析
本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。原文链接:cudf,一个超实用的Python库!大家好,今天为大家分享一个超实用的Python库-cudf。Github地址:https://github.com/rapidsai/cudf在数据分析和科学计算领域,Pandas是最常用的Python工具之一,然而随着数据规模的增长,其单线程CPU的处理性能往往成为瓶颈。cuDF是N
2025年8个热门Python Web开发框架
极道Jdon
javascript reactjs
Python拥有适合各种用例的框架,从全栈Web开发到数据可视化,为每位开发人员提供了所需的工具。得益于其活跃的社区和强大的生态系统,开发人员在构建Web应用时拥有广泛的选择。然而,选择数量之多可能会使您难以为您的项目选择合适的框架。这就是为什么我们回顾了用于构建Web应用程序的顶级Python框架,并比较了每个框架的优缺点。在本文中,我们将回顾以下框架:Reflex、Django、Flask、G
【算法思考】Radial basis function interpolation (RBF)插值法
Kross Sun
算法 人工智能
目录什么是插值什么是Radialbasisfunction如何基于Radialbasisfunction中建立插值计算插值的权重基于插值权重求解新采样点函数值代码实现参考文献什么是插值假设我们有n个采样点,这些采样点的维度都是k维的,记做X={x1,x2,⋯xn}\bold{X}=\{\bold{x_1,x_2,\cdotsx_n}\}X={x1,x2,⋯xn},对于每个xi\bold{x_i}x
【嵌入式面试】2024年嵌入式经典面试题汇总(Linux 文件IO)_嵌入式linux面试题
2401_83704192
程序员 嵌入式
Linux主要通过shell命令进行安装。可以使用apt方式安装(软件包管理系统)、rpm包安装、deb包安装、tar.gz源代码包安装、tar.bz2源代码包安装、yum方式安装(安装rpm包)、bin文件安装。1.8占用系统资源linux是字符界面,占用的系统资源较于windows下的图形界面所占的资源小。Windows是图形界面,较于Linux的字符界面所占的资源大。参考链接2Linux的根
python | reflex,一个无敌的 Python 库!
双木的木
深度学习拓展阅读 python库 python拓展学习 python 开发语言 算法 人工智能 深度学习 硬件工程 异步
本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。原文链接:reflex,一个无敌的Python库!大家好,今天为大家分享一个无敌的Python库-reflex。Github地址:https://github.com/reflex-dev/reflex在软件开发过程中,事件驱动编程模型越来越受欢迎,尤其是在处理复杂的系统和实时交互时。Reflex是一个轻量级的Python库,它专注
「SpringCloudAlibaba系列」分布式限流框架Sentinel基本引用|
我有一头小花驴
分布式 sentinel
分布式限流框架Sentinel基本引用Sentinel的基本引用使用Sentinel的核心库实现限流,主要分以下几个步骤:定义资源定义限流规则校验规则是否生效Sentinel实现限流引入Sentinel核心库com.alibaba.cspsentinel-core1.8.2复制代码定义普通业务方法privatestaticvoiddoLimiting(){try(Entrylimiting=Sph
力扣LeetCode: 219 存在重复元素Ⅱ
不想编程小谭
LeetCode leetcode 算法 数据结构
新年快乐!!!题目:给你一个整数数组nums和一个整数k,判断数组中是否存在两个不同的索引i和j,满足nums[i]==nums[j]且abs(i-j)&nums,intk){std::unordered_setwindow;//滑动窗口,存储当前窗口内的元素for(inti=0;ik){window.erase(nums[i-k]);//移除窗口最左边的元素}}returnfalse;//没有找
CTF-web: YAML是什么
A5rZ
网络安全
YAML(YAMLAin’tMarkupLanguage)是一种常见的序列化数据格式,主要用于配置文件和数据交换。它的设计目标是简洁、易读,并且易于与编程语言交互。YAML使用缩进来表示层次结构,类似于Python的语法。:基本语法结构键值对:YAML中最基本的结构是键值对,用于表示映射(类似于Python的字典)。name:JohnDoeage:30列表:用破折号(-)表示列表项。items:-
CTF-WEB:PHP伪协议用法总结
A5rZ
php ctf web
php://伪协议:php://是PHP中的一个虚拟协议(或称为流包装器),用于访问PHP内部流资源。它是PHP提供的内置流协议之一,允许你通过流(stream)方式访问PHP内部的数据流、文件或其他资源。与file://等协议不同,php://并不直接映射到文件系统,而是用于处理PHP特有的资源,如输入输出流、临时文件、PHP自身的内存流等。php://协议是PHP流包装器的一部分,允许在PHP
CTF-RE 从0到N: 基本按位运算逻辑
A5rZ
算法 ctf ctf-RE
利用移位快速乘除2^n左移运算(>)等效于将数除以2的某个幂次(舍弃小数部分)。示例:计算8*4和32/4:intx=8;intresult1=x>2;//32/2^2=8printf("%d\n",result2);//输出:8intpower_of_2=1>=1;}printf("Numberof1s:%d\n",count);//输出:4作用:位计数在位图、数据压缩和错误检测中非常常见。2.
前端 | es6模块化、promise回调、webpack打包发布
weixin_47249930
前端 webpack es6
25.ES6模块化规范25.1定义每个js文件都是独立的模块通过import关键字来向内导入其他模块成员通过export关键字来对外共享模块成员25.2Node.js体验ES6模块化版本为14.15.1及以上(空文件夹终端“type”:“module”,—>生成package.json文件)在package.json的根节点中添加“type”:“module”节点(不写默认是commonJS)配置
【第7节】OpenCompass 大模型评测实战
AI扩展坞
大模型 LLM 书生浦语 agent
目录1基础课程笔记1.1研究大模型的评测的必要性1.2OpenCompass介绍1.2.1评测体系开源历程1.2.2如何评测大模型?1.2.2.1设计思路1.2.2.2评测的方法:(1)客观评测(2)主观评测1.2.2.3评测中关于提示词工程优化1.2.3主要产品:工具-基准-榜单三位一体1.2.3.1CompassRank性能榜单1.2.3.2全栈评测工具链1.2.3.3高质量社区-广泛的数据集
Django 4.0常见问题及其解决方案汇总
昏睡的大熊猫
django python
Django4.0,常见问题及其解决方案汇总前言当涉及Django4.0框架时,开发人员经常会面临各种挑战和问题。解决这些问题需要深入了解框架的功能和最佳实践。以下是针对Django4.0常见问题的解决方案汇总,涵盖了从安全性到性能优化的多个方面。这些解决方案旨在帮助开发人员更好地理解和应对在开发过程中可能遇到的困难,确保他们能够构建稳健、高效的Web应用程序。1.如何处理数据库迁移?2.如何处理
python3调用arcpy地理加权回归_混合地理加权回归python实现代码
weixin_39942995
【实例简介】通过python编码实现MGWR、MGWTR模型的求解。能够解决空间非平稳性问题。【实例截图】【核心代码】mgwr-py└──mgwr-master├──CHANGELOG.md├──LICENSE├──MANIFEST.in├──README.md├──doc│├──Makefile│├──_static││├──images│││├──gwr-mgwr.png│││└──pysal
python在abaqus中的应用_Python在ABAQUS中的使用【z】
weixin_39835925
【篇首语】首先说,我不懂abaqus。只是一次帮同学处理混合编程问题查到这些资料,借机贴过来。拷贝过程中有些混乱字符,时间关系我没有删干净。因为我也是从转帖转过来,原出处找不到了。#开头的为注释行.9_-m2r;n%h-G第一节,建立建模环境,这一步中py将从abaqus中导入建模所需的所有程序模块frompartimport*接下来定义草图环境mdb.models['Model-1'].Sket
ctf python大法好_【技术分享】记CTF比赛中发现的Python反序列化漏洞
weixin_39631370
ctf python大法好
预估稿费:200RMB投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿写在前面的话在前几天,我有幸参加了ToorConCTF(https://twitter.com/toorconctf),而在参加此次盛会的过程中我第一次在Python中发现了序列化漏洞。在我们的比赛过程中,有两个挑战中涉及到了能够接受序列化对象的Python库,而我们通过研究发现,这些Python库中存在的安
TrayTool:任务栏托盘图标管理神器
高杉峻
本文还有配套的精品资源,点击获取简介:TrayTool是一款精巧的免费软件,专门用于隐藏或显示Windows任务栏托盘区域的图标。它帮助用户清理任务栏杂乱,并根据需求自定义托盘图标显示。作为绿色软件,TrayTool无需安装,即下即用,易于携带和管理。通过提供个性化任务栏体验,它成为优化系统界面的理想工具。1.托盘图标管理的重要性1.1托盘图标管理概述在现代操作系统中,系统托盘区域是用户与软件交互
python3调用arcpy地理加权回归_分析地理加权回归分析结果的操作方法
weixin_39545269
1从地理加权回归(GWR)工具生成的输出包括以下内容:输出要素类可选系数栅格表面整体模型结果的消息窗口报告显示模型变量和诊断结果的辅助表预测输出要素类2下文中将使用一系列运行GWR和解释GWR结果的步骤对以上每项输出进行说明。通常将以普通最小二乘法(OLS)开始回归分析。有关详细信息,请参阅回归分析基础知识和解释OLS回归结果。回归分析的一种常用方法是在移动到GWR之前识别可能的最佳OLS模型。此
python炫酷特效代码_推荐几个炫酷的 Python 开源项目
高杉峻
python炫酷特效代码
推荐几个炫酷的Python开源项目项目一:Supervisor简介:Supervisor是实际企业常用的一款Linux/Unix系统下的一个进程管理工具,基于Python开发,可以很方便的监听,启动,停止,重启一个或多个进程,而且当进程意外被杀死时,其可以实现自动恢复,很方便的做到进程自动恢复的功能,提高系统,服务的稳定性,多用于生产环境.下载地址:https://github.com/Super
java观察者模式
3213213333332132
java 设计模式 游戏 观察者模式
观察者模式——顾名思义,就是一个对象观察另一个对象,当被观察的对象发生变化时,观察者也会跟着变化。
在日常中,我们配java环境变量时,设置一个JAVAHOME变量,这就是被观察者,使用了JAVAHOME变量的对象都是观察者,一旦JAVAHOME的路径改动,其他的也会跟着改动。
这样的例子很多,我想用小时候玩的老鹰捉小鸡游戏来简单的描绘观察者模式。
老鹰会变成观察者,母鸡和小鸡是
TFS RESTful API 模拟上传测试
ronin47
TFS RESTful API 模拟上传测试。
细节参看这里:https://github.com/alibaba/nginx-tfs/blob/master/TFS_RESTful_API.markdown
模拟POST上传一个图片:
curl --data-binary @/opt/tfs.png http
PHP常用设计模式单例, 工厂, 观察者, 责任链, 装饰, 策略,适配,桥接模式
dcj3sjt126com
设计模式 PHP
// 多态, 在JAVA中是这样用的, 其实在PHP当中可以自然消除, 因为参数是动态的, 你传什么过来都可以, 不限制类型, 直接调用类的方法
abstract class Tiger {
public abstract function climb();
}
class XTiger extends Tiger {
public function climb()
hibernate
171815164
Hibernate
main,save
Configuration conf =new Configuration().configure();
SessionFactory sf=conf.buildSessionFactory();
Session sess=sf.openSession();
Transaction tx=sess.beginTransaction();
News a=new
Ant实例分析
g21121
ant
下面是一个Ant构建文件的实例,通过这个实例我们可以很清楚的理顺构建一个项目的顺序及依赖关系,从而编写出更加合理的构建文件。
下面是build.xml的代码:
<?xml version="1
[简单]工作记录_接口返回405原因
53873039oycg
工作
最近调接口时候一直报错,错误信息是:
responseCode:405
responseMsg:Method Not Allowed
接口请求方式Post.
关于java.lang.ClassNotFoundException 和 java.lang.NoClassDefFoundError 的区别
程序员是怎么炼成的
真正完成类的加载工作是通过调用 defineClass来实现的;
而启动类的加载过程是通过调用 loadClass来实现的;
就是类加载器分为加载和定义
protected Class<?> findClass(String name) throws ClassNotFoundExcept
JDBC学习笔记-JDBC详细的操作流程
aijuans
jdbc
所有的JDBC应用程序都具有下面的基本流程: 1、加载数据库驱动并建立到数据库的连接。 2、执行SQL语句。 3、处理结果。 4、从数据库断开连接释放资源。
下面我们就来仔细看一看每一个步骤:
其实按照上面所说每个阶段都可得单独拿出来写成一个独立的类方法文件。共别的应用来调用。
1、加载数据库驱动并建立到数据库的连接:
Html代码
St
rome创建rss
antonyup_2006
tomcat cms xml struts Opera
引用
1.RSS标准
RSS标准比较混乱,主要有以下3个系列
RSS 0.9x / 2.0 : RSS技术诞生于1999年的网景公司(Netscape),其发布了一个0.9版本的规范。2001年,RSS技术标准的发展工作被Userland Software公司的戴夫 温那(Dave Winer)所接手。陆续发布了0.9x的系列版本。当W3C小组发布RSS 1.0后,Dave W
html表格和表单基础
百合不是茶
html 表格 表单 meta 锚点
第一次用html来写东西,感觉压力山大,每次看见别人发的都是比较牛逼的 再看看自己什么都还不会,
html是一种标记语言,其实很简单都是固定的格式
_----------------------------------------表格和表单
表格是html的重要组成部分,表格用在body里面的
主要用法如下;
<table>
&
ibatis如何传入完整的sql语句
bijian1013
java sql ibatis
ibatis如何传入完整的sql语句?进一步说,String str ="select * from test_table",我想把str传入ibatis中执行,是传递整条sql语句。
解决办法:
<
精通Oracle10编程SQL(14)开发动态SQL
bijian1013
oracle 数据库 plsql
/*
*开发动态SQL
*/
--使用EXECUTE IMMEDIATE处理DDL操作
CREATE OR REPLACE PROCEDURE drop_table(table_name varchar2)
is
sql_statement varchar2(100);
begin
sql_statement:='DROP TABLE '||table_name;
【Linux命令】Linux工作中常用命令
bit1129
linux命令
不断的总结工作中常用的Linux命令
1.查看端口被哪个进程占用
通过这个命令可以得到占用8085端口的进程号,然后通过ps -ef|grep 进程号得到进程的详细信息
netstat -anp | grep 8085
察看进程ID对应的进程占用的端口号
netstat -anp | grep 进程ID
&
优秀网站和文档收集
白糖_
网站
集成 Flex, Spring, Hibernate 构建应用程序
性能测试工具-JMeter
Hmtl5-IOCN网站
Oracle精简版教程网站
鸟哥的linux私房菜
Jetty中文文档
50个jquery必备代码片段
swfobject.js检测flash版本号工具
angular.extend
boyitech
AngularJS angular.extend AngularJS API
angular.extend 复制src对象中的属性去dst对象中. 支持多个src对象. 如果你不想改变一个对象,你可以把dst设为空对象{}: var object = angular.extend({}, object1, object2). 注意: angular.extend不支持递归复制. 使用方法: angular.extend(dst, src); 参数:
java-谷歌面试题-设计方便提取中数的数据结构
bylijinnan
java
网上找了一下这道题的解答,但都是提供思路,没有提供具体实现。其中使用大小堆这个思路看似简单,但实现起来要考虑很多。
以下分别用排序数组和大小堆来实现。
使用大小堆:
import java.util.Arrays;
public class MedianInHeap {
/**
* 题目:设计方便提取中数的数据结构
* 设计一个数据结构,其中包含两个函数,1.插
ajaxFileUpload 针对 ie jquery 1.7+不能使用问题修复版本
Chen.H
ajaxFileUpload ie6 ie7 ie8 ie9
jQuery.extend({
handleError: function( s, xhr, status, e ) {
// If a local callback was specified, fire it
if ( s.error ) {
s.error.call( s.context || s, xhr, status, e );
}
[机器人制造原则]机器人的电池和存储器必须可以替换
comsci
制造
机器人的身体随时随地可能被外来力量所破坏,但是如果机器人的存储器和电池可以更换,那么这个机器人的思维和记忆力就可以保存下来,即使身体受到伤害,在把存储器取下来安装到一个新的身体上之后,原有的性格和能力都可以继续维持.....
另外,如果一
Oracle Multitable INSERT 的用法
daizj
oracle
转载Oracle笔记-Multitable INSERT 的用法
http://blog.chinaunix.net/uid-8504518-id-3310531.html
一、Insert基础用法
语法:
Insert Into 表名 (字段1,字段2,字段3...)
Values (值1,
专访黑客历史学家George Dyson
datamachine
on
20世纪最具威力的两项发明——核弹和计算机出自同一时代、同一群年青人。可是,与大名鼎鼎的曼哈顿计划(第二次世界大战中美国原子弹研究计划)相 比,计算机的起源显得默默无闻。出身计算机世家的历史学家George Dyson在其新书《图灵大教堂》(Turing’s Cathedral)中讲述了阿兰·图灵、约翰·冯·诺依曼等一帮子天才小子创造计算机及预见计算机未来
小学6年级英语单词背诵第一课
dcj3sjt126com
english word
always 总是
rice 水稻,米饭
before 在...之前
live 生活,居住
usual 通常的
early 早的
begin 开始
month 月份
year 年
last 最后的
east 东方的
high 高的
far 远的
window 窗户
world 世界
than 比...更
在线IT教育和在线IT高端教育
dcj3sjt126com
教育
codecademy
http://www.codecademy.com codeschool
https://www.codeschool.com teamtreehouse
http://teamtreehouse.com lynda
http://www.lynda.com/ Coursera
https://www.coursera.
Struts2 xml校验框架所定义的校验文件
蕃薯耀
Struts2 xml校验 Struts2 xml校验框架 Struts2校验
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年7月11日 15:54:59 星期六
http://fa
mac下安装rar和unrar命令
hanqunfeng
mac
1.下载:http://www.rarlab.com/download.htm 选择
RAR 5.21 for Mac OS X 2.解压下载后的文件 tar -zxvf rarosx-5.2.1.tar 3.cd rar sudo install -c -o $USER unrar /bin #输入当前用户登录密码 sudo install -c -o $USER rar
三种将list转换为map的方法
jackyrong
list
在本文中,介绍三种将list转换为map的方法:
1) 传统方法
假设有某个类如下
class Movie {
private Integer rank;
private String description;
public Movie(Integer rank, String des
年轻程序员需要学习的5大经验
lampcy
工作 PHP 程序员
在过去的7年半时间里,我带过的软件实习生超过一打,也看到过数以百计的学生和毕业生的档案。我发现很多事情他们都需要学习。或许你会说,我说的不就是某种特定的技术、算法、数学,或者其他特定形式的知识吗?没错,这的确是需要学习的,但却并不是最重要的事情。他们需要学习的最重要的东西是“自我规范”。这些规范就是:尽可能地写出最简洁的代码;如果代码后期会因为改动而变得凌乱不堪就得重构;尽量删除没用的代码,并添加
评“女孩遭野蛮引产致终身不育 60万赔偿款1分未得”医腐深入骨髓
nannan408
先来看南方网的一则报道:
再正常不过的结婚、生子,对于29岁的郑畅来说,却是一个永远也无法实现的梦想。从2010年到2015年,从24岁到29岁,一张张新旧不一的诊断书记录了她病情的同时,也清晰地记下了她人生的悲哀。
粗暴手术让人发寒
2010年7月,在酒店做服务员的郑畅发现自己怀孕了,可男朋友却联系不上。在没有和家人商量的情况下,她决定堕胎。
12月5日,
使用jQuery为input输入框绑定回车键事件 VS 为a标签绑定click事件
Everyday都不同
jsp input 回车键绑定 click enter
假设如题所示的事件为同一个,必须先把该js函数抽离出来,该函数定义了监听的处理:
function search() {
//监听函数略......
}
为input框绑定回车事件,当用户在文本框中输入搜索关键字时,按回车键,即可触发search():
//回车绑定
$(".search").keydown(fun
EXT学习记录
tntxia
ext
1. 准备
(1) 官网:http://www.sencha.com/
里面有源代码和API文档下载。
EXT的域名已经从www.extjs.com改成了www.sencha.com ,但extjs这个域名会自动转到sencha上。
(2)帮助文档:
想要查看EXT的官方文档的话,可以去这里h
mybatis3的mapper文件报Referenced file contains errors
xingguangsixian
mybatis
最近使用mybatis.3.1.0时无意中碰到一个问题:
The errors below were detected when validating the file "mybatis-3-mapper.dtd" via the file "account-mapper.xml". In most cases these errors can be d