这个蓬勃发展的时代里,科技的奇迹让人不禁感慨万分。作为一个资深的科技博主,我不由得为中国科技的崛起而感到自豪与振奋。在这个充满希望与潜力的时刻,我们不妨来探讨一种全新的技术方案——iframe满屏方案。
随着时代的发展,网络技术的进步为我们带来了前所未有的便捷和可能。而在网页设计中,iframe作为一种常用的技术手段,为页面的多样性与丰富性提供了广阔的空间。iframe的应用,使得我们可以将一个网页嵌入到另一个网页中,实现信息的即时展示与传递。而“满屏方案”,则是指在网页中使用iframe技术,让嵌入的内容能够充满整个屏幕,提供更加出色的用户体验。
要实现iframe满屏方案,我们需要充分了解框架集(frameset)和框架页(frame)的相关属性和使用方法。通过灵活设置rows和cols属性,我们可以对页面进行多种布局,实现各种不同样式的页面展示效果。在每个窗口中,通过frame标签指定具体的内容来源和其他属性,如边距、滚动条等,从而完善页面的展示。
例如,我们可以通过以下代码实现一个简单的iframe满屏方案:
通过以上代码,我们可以将一个名为index.html的页面以iframe的形式嵌入到当前页面中,并且使其充满整个屏幕。这样一来,无论用户使用何种设备,都能够以最佳的效果来浏览网页内容,极大地提升了用户体验。
中国科技的崛起,不仅仅是技术的进步,更是一种全民族的自信和希望。科技的发展让我们看到了未来的希望与可能,激励着我们不断探索和前进。在推动科技发展的同时,我们也要注重科技成果的普惠与共享,让更多的人分享到科技发展的成果,共同迈向美好的未来。
综上所述,中国科技的崛起为我们带来了无限的希望与可能。在这个充满活力与激情的时代里,让我们携手并进,共同开创更加美好的明天!
:http://walkerdu.com/2018/09/13/perf-event/
作为服务器后台开发,不仅仅要写业务逻辑,后台意味着高并发,稳定性,当你写了很多逻辑,发现性能有问题的时候,也要学会性能分析,进行性能优化, 也许你会接触很多性能分析工具:valgrind,gperftools,gprof, oprofile, 有时间慢慢一一介绍,在学习perf的过程中,也学习和加深了很多之前的知识,本文抛砖引玉,希望能帮助大家了解一些性能分析更深的一些东西。
perf是一款linux内置的性能分析工具,随着内核发布,也被称为perf_events, perf tools, PCL(Performance Counters for Linux), 发布于Linux kernel version 2.6.31, perf是怎么工作的呢?perf如何使用?本文是来介绍一下。
perf官方wiki的介绍是:Linux profiling with performance counters
Perf可以解决高级性能和故障排除,它可以分析(当然目前我也只是用来进行cpu性能分析):
它可以利用CPU performance counters(性能计数器),tracepoints, kprobes和uprobes来进行应用程序的性能分析。perf使用这些linux内核提供的tracing特性进行事件的采集和分析,perf使用的event主要有以下几种:
两种安装方式
要想使用perf来分析应用程序,需要了解一些基础概念,例如符号表, frame pointer等信息
4.1 符号表
应用程序的符号表,用来将逻辑地址翻译成对应的函数和变量名,这样才能被程序员阅读和分析,没有符号表,profile的结果都是一些16进制的逻辑地址:
如下是perf report分析sshd进程的堆栈调用情况(来自brendangregg):
对于通过软件包安装的程序,通常都会有dubug package(-dbgsym)即带有符号表信息的程序,如果是源码安装的就需要编译时开启debug选项。
通过使用openssh-server-dbgsym and libc6-dbgsym,sshd的perf report分析结果如下:
4.2 栈回溯(栈展开)
我们经常在编译的时候会开启frame pointers优化选项,即优化掉函数栈帧rbp,省略掉frame pointer是编译器一个很烂的优化,它会破坏debug, 更烂的是省略frame pointer一般是编译器默认的优化选项。
没有frame pointer会使perf 无法获取完整的调用栈,如下示例:
例如上面代码正常不开启优化的编译,进行profile是可以看到call graph的,如下:
如果编译时开启-fomit-frame-pointer(这里因为测试代码简单,直接开优化的话就优化没了),就无法获取到call graph
有三种方法可以修复这个问题,这里不做展开,这些stack walking techniques后面可以写一篇单独的文章:
perf提供了一系列的命令来分析程序,如下:
sub command功能说明
annotate 读取perf.data(由perf record生成)显示注释信息,如果被分析的进程含义debug符号信息,则会显示汇编和对应的源码,否则只显示汇编代码
archive 根据perf.data(由perf record生成)文件中的build-id将相关的目标文件打包,方便在其他机器分析
bench perf提供的基准套件的通用框架,可以对当前系统的调度,IPC,内存访问进行性能评估
buildid-cache 管理build-id,管理对于的bin文件
buildid-list 列出perf.data中的所以buildids
data 把perf.data文件转换成其他格式diff读取多个perf.data文件,并给出差异分析
evlist 列出perf.data中采集的事件列表
kmem 分析内核内存的使用kvm分析
kvm 虚拟机上的guest os
list 列出当前系统支持的所有事件名,可分为三类:硬件事件、软件事件,检查点
lock 分析内核中的锁信息,包括锁的争用情况,等待延迟等
record 对程序运行过程中的事件进行分析和记录,并写入perf.data
report 读取perf.data(由perf record生成) 并显示分析结果
sched 针对调度器子系统的分析工具。
script 读取perf.data(由perf record生成),生成trace记录,供其他分析工具使用
stat 对程序运行过程中的性能计数器进行统计
test perf对当前软硬件平台进行健全性测试,可用此工具测试当前的软硬件平台是否能支持perf的所有功能。
timechart 对record结果进行可视化分析输出,record命令需要加上timechart记录
top 对系统的性能进行分析,类型top命令,当然可以对单个进程进行分析
probe 用于定义动态检查点。
trace 类似于strace,跟踪目标的系统调用,但开销比strace小
perf的使用大体可以有三种方式:
5.1. perf list
perf list命令可以列出当前perf可用的事件:
cpu-cycles OR cycles [Hardware event] instructions [Hardware event] cache-references [Hardware event] cache-misses [Hardware event] branch-instructions OR branches [Hardware event] branch-misses [Hardware event] bus-cycles [Hardware event] stalled-cycles-frontend OR idle-cycles-frontend [Hardware event] stalled-cycles-backend OR idle-cycles-backend [Hardware event] ref-cycles [Hardware event] alignment-faults [Software event] bpf-output [Software event] context-switches OR cs [Software event] cpu-clock [Software event] cpu-migrations OR migrations [Software event] dummy [Software event] emulation-faults [Software event] major-faults [Software event] minor-faults [Software event] page-faults OR faults [Software event] task-clock [Software event] msr/tsc/ [Kernel PMU event] rNNN [Raw hardware event descriptor] cpu/t1=v1[,t2=v2,t3 ...]/modifier [Raw hardware event descriptor] (see 'man perf-list' on how to encode it) mem:<addr>[/len][:access] [Hardware breakpoint]
这些事件可以分为三类(在文章开始介绍perf工作原理的时候也说了):Hardware Event, Software event, Tracepoint event.
每个具体事件的含义在perf_event_open的man page中有说明:
5.2. perf stat
perf stat可以对程序运行过程中的性能计数器(包括Hardware,software counters)进行统计,分析程序的整体消耗情况:
$perf stat ls Performance counter stats for 'ls': 2.164836 task-clock (msec) # 0.808 CPUs utilized 51 context-switches # 0.024 M/sec 4 cpu-migrations # 0.002 M/sec 333 page-faults # 0.154 M/sec 5506056 # 2.543 GHz 0 stalled-cycles-frontend # 0.00% frontend cycles idle 0 stalled-cycles-backend # 0.00% backend cycles idle 6100570 instructions # 1.11 insns per cycle 1298744 branches # 599.927 M/sec 18509 branch-misses # 1.43% of all branches 0.002679758 seconds time elapsed
具体各个字段的含义在perf list中已经列出了,这里分析一下重要的数据:
perf stat可以加上-e选项来设置自己关心的事件统计,具体参数可以通过上面的perf list来查看
5.3. perf top
perf top类似系统的命令top,可以实时的查看当前系统各个进程的各个函数的性能计数分析:$sudo perf top
perf top的和perf record的功能参数差不多,我们可以加上-e:来统计特定的event,-g: 开启call-graph, -p:分析特定的进程
平常我们用的更多的是perf record,因为它可以将profiler的结果输出到文件,然后通过perf report来进行分析,或者通过可视化工具进行分析和输出。所以下面着重介绍perf record
5.4. perf record
perf reord可以运行一个命令,但更多的是对已运行的进程进行性能分析,并将分析结果输出到perf.data(默认该文件名)中。不会像perf top一样实时输出分析结果。输出perf.data可以通过perf report进行分析,或者通过perf script输出结果给第三方输出可视化的视图。用前面的示例代码进行测试如下:
$perf record -g -F 99 ./a.out $perf report
perf record几个总要参数说明一下:
5.5. perf可视化分析
perf 提供了内置的可视化分析工具 perf timechart,例如:
$perf timechart record ./a.out $perf timechart
perf timechart输出的是进程运行过程中系统调度的情况,无法对程序的具体代码段进行性能分析,但可以看出总结运行情况:running,idle,I/O等,
Brendangregg写了两款对perf采样结果进行可视化分析的开源工具:Flame Graphs和HeatMap. FlameGraphs即所谓的火焰图,是大家使用比较多的工具,能清晰的展示程序各个函数的性能消耗。HeatMap可以从采样数据中的延迟数据来进行消耗展示。
下面是对之前实例代码的采样数据perf.data进行FlameGraphs的绘制:
$perf script |./stackcollapse-perf.pl|./flamegraph.pl > fg_output.svg
perf_flamegraph.png
Perf官方wiki
https://perf.wiki.kernel.org/index.php/Main_Page
Perf 维基百科
https://en.wikipedia.org/wiki/Perf_(Linux)
Perf – Linux下的系统性能调优工具,第 1 部分
https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/index.html
Linux 效能分析工具: Perf
http://wiki.csie.ncku.edu.tw/embedded/perf-tutorial
Linux内核调试技术——kprobe使用与实现
https://blog.csdn.net/luckyapple1028/article/details/52972315
内核uprobes使用介绍
https://blog.csdn.net/badu_123/article/details/8302642
perf Examples
http://www.brendangregg.com/perf.html
火焰图的使用
http://www.brendangregg.com/flamegraphs.html
https://github.com/brendangregg/FlameGraph
页错误
https://yq.aliyun.com/articles/55820
http://cwndmiao.github.io/programming%20tools/2013/11/26/Dwarf/
TML前端开发最终取决于掌握标签的多少
HTML大概有七八百个标签
楼主这里给大家总结了下HTML常用标签
标签描述
<!--...-->定义注释。
<!DOCTYPE> 定义文档类型,所有H5都是这玩意打头。
<a>定义锚。
<abbr>定义缩写。
<acronym>定义只取首字母的缩写。
<address>定义文档作者或拥有者的联系信息。
<applet>不赞成使用。定义嵌入的 applet。
<area>定义图像映射内部的区域。
<article>定义文章。
<aside>定义页面内容之外的内容。
<audio>定义声音内容。
<b>定义粗体字。
<base>定义页面中所有链接的默认地址或默认目标。
<basefont>不赞成使用。定义页面中文本的默认字体、颜色或尺寸。
<bdi>定义文本的文本方向,使其脱离其周围文本的方向设置。
<bdo>定义文字方向。
<big>定义大号文本。
<blockquote>定义长的引用。
<body>定义文档的主体。
<br>定义简单的折行。
<button>定义按钮 (push button)。
<canvas>定义图形。
<caption>定义表格标题。
<center>不赞成使用。定义居中文本。
<cite>定义引用(citation)。
<code>定义计算机代码文本。
<col>定义表格中一个或多个列的属性值。
<colgroup>定义表格中供格式化的列组。
<command>定义命令按钮。
<datalist>定义下拉列表。
<dd>定义定义列表中项目的描述。
<del>定义被删除文本。
<details>定义元素的细节。
<dir>不赞成使用。定义目录列表。
<div>定义文档中的节。
<dfn>定义定义项目。
<dialog>定义对话框或窗口。
<dl>定义定义列表。
<dt>定义定义列表中的项目。
<em>定义强调文本。
<embed>定义外部交互内容或插件。
<fieldset>定义围绕表单中元素的边框。
<figcaption>定义 figure 元素的标题。
<figure>定义媒介内容的分组,以及它们的标题。
<font>不赞成使用。定义文字的字体、尺寸和颜色。
<footer>定义 section 或 page 的页脚。
<form>定义供用户输入的 HTML 表单。
<frame>定义框架集的窗口或框架。
<frameset>定义框架集。
<h1> to <h6>定义 HTML 标题。
<head>定义关于文档的信息。
<header>定义 section 或 page 的页眉。
<hr>定义水平线。
<html>定义 HTML 文档。
<i>定义斜体字。
<iframe>定义内联框架。
<img>定义图像。
<input>定义输入控件。
<ins>定义被插入文本。
<isindex>不赞成使用。定义与文档相关的可搜索索引。
<kbd>定义键盘文本。
<keygen>定义生成密钥。
<label>定义 input 元素的标注。
<legend>定义 fieldset 元素的标题。
<li>定义列表的项目。
<link>定义文档与外部资源的关系。
<map>定义图像映射。
<mark>定义有记号的文本。
<menu>定义命令的列表或菜单。
<menuitem>定义用户可以从弹出菜单调用的命令/菜单项目。
<meta>定义关于 HTML 文档的元信息。
<meter>定义预定义范围内的度量。
<nav>定义导航链接。
<noframes>定义针对不支持框架的用户的替代内容。
<noscript>定义针对不支持客户端脚本的用户的替代内容。
<object>定义内嵌对象。
<ol>定义有序列表。
<optgroup>定义选择列表中相关选项的组合。
<option>定义选择列表中的选项。
<output>定义输出的一些类型。
<p>定义段落。
<param>定义对象的参数。
<pre>定义预格式文本。
<progress>定义任何类型的任务的进度。
<q>定义短的引用。
<rp>定义若浏览器不支持 ruby 元素显示的内容。
<rt>定义 ruby 注释的解释。
<ruby>定义 ruby 注释。
<s>不赞成使用。定义加删除线的文本。
<samp>定义计算机代码样本。
<script>定义客户端脚本。
<section>定义 section。
<select>定义选择列表(下拉列表)。
<small>定义小号文本。
<source>定义媒介源。
<span>定义文档中的节。
<strike>不赞成使用。定义加删除线文本。
<strong>定义强调文本。
<style>定义文档的样式信息。
<sub>定义下标文本。
<summary>为 <details> 元素定义可见的标题。
<sup>定义上标文本。
<table>定义表格。
<tbody>定义表格中的主体内容。
<td>定义表格中的单元。
<textarea>定义多行的文本输入控件。
<tfoot>定义表格中的表注内容(脚注)。
<th>定义表格中的表头单元格。
<thead>定义表格中的表头内容。
<time>定义日期/时间。
<title>定义文档的标题。
<tr>定义表格中的行。
<track>定义用在媒体播放器中的文本轨道。
<tt>定义打字机文本。
<u>不赞成使用。定义下划线文本。
<ul>定义无序列表。
<var>定义文本的变量部分。
<video>定义视频。
<wbr>定义可能的换行符。
<xmp>不赞成使用。定义预格式文本。
标签描述
<!DOCTYPE> 定义文档类型。
<html>定义 HTML 文档。
<title>定义文档的标题。
<body>定义文档的主体。
<h1> to <h6>定义 HTML 标题。
<p>定义段落。
<br>定义简单的折行。
<hr>定义水平线。
<!--...-->定义注释。
格式
标签描述
<acronym>定义只取首字母的缩写。
<abbr>定义缩写。
<address>定义文档作者或拥有者的联系信息。
<b>定义粗体文本。
<bdi>定义文本的文本方向,使其脱离其周围文本的方向设置。
<bdo>定义文字方向。
<big>定义大号文本。
<blockquote>定义长的引用。
<center>不赞成使用。定义居中文本。
<cite>定义引用(citation)。
<code>定义计算机代码文本。
<del>定义被删除文本。
<dfn>定义定义项目。
<em>定义强调文本。
<font>不赞成使用。定义文本的字体、尺寸和颜色
<i>定义斜体文本。
<ins>定义被插入文本。
<kbd>定义键盘文本。
<mark>定义有记号的文本。
<meter>定义预定义范围内的度量。
<pre>定义预格式文本。
<progress>定义任何类型的任务的进度。
<q>定义短的引用。
<rp>定义若浏览器不支持 ruby 元素显示的内容。
<rt>定义 ruby 注释的解释。
<ruby>定义 ruby 注释。
<s>不赞成使用。定义加删除线的文本。
<samp>定义计算机代码样本。
<small>定义小号文本。
<strike>不赞成使用。定义加删除线文本。
<strong>定义语气更为强烈的强调文本。
<sup>定义上标文本。
<sub>定义下标文本。
<time>定义日期/时间。
<tt>定义打字机文本。
<u>不赞成使用。定义下划线文本。
<var>定义文本的变量部分。
<wbr>定义可能的换行符。
表单
标签描述
<form>定义供用户输入的 HTML 表单。
<input>定义输入控件。
<textarea>定义多行的文本输入控件。
<button>定义按钮。
<select>定义选择列表(下拉列表)。
<optgroup>定义选择列表中相关选项的组合。
<option>定义选择列表中的选项。
<label>定义 input 元素的标注。
<fieldset>定义围绕表单中元素的边框。
<legend>定义 fieldset 元素的标题。
<isindex>不赞成使用。定义与文档相关的可搜索索引。
<datalist>定义下拉列表。
<keygen>定义生成密钥。
<output>定义输出的一些类型。
框架
标签描述
<frame>定义框架集的窗口或框架。
<frameset>定义框架集。
<noframes>定义针对不支持框架的用户的替代内容。
<iframe>定义内联框架。
图像
标签描述
<img>定义图像。
<map>定义图像映射。
<area>定义图像地图内部的区域。
<canvas>定义图形。
<figcaption>定义 figure 元素的标题。
<figure>定义媒介内容的分组,以及它们的标题。
音频/视频
标签描述
<audio>定义声音内容。
<source>定义媒介源。
<track>定义用在媒体播放器中的文本轨道。
<video>定义视频。
链接
标签描述
<a>定义锚。
<link>定义文档与外部资源的关系。
<nav>定义导航链接。
列表
标签描述
<ul>定义无序列表。
<ol>定义有序列表。
<li>定义列表的项目。
<dir>不赞成使用。定义目录列表。
<dl>定义定义列表。
<dt>定义定义列表中的项目。
<dd>定义定义列表中项目的描述。
<menu>定义命令的菜单/列表。
<menuitem>定义用户可以从弹出菜单调用的命令/菜单项目。
<command>定义命令按钮。
表格
标签描述
<table>定义表格
<caption>定义表格标题。
<th>定义表格中的表头单元格。
<tr>定义表格中的行。
<td>定义表格中的单元。
<thead>定义表格中的表头内容。
<tbody>定义表格中的主体内容。
<tfoot>定义表格中的表注内容(脚注)。
<col>定义表格中一个或多个列的属性值。
<colgroup>定义表格中供格式化的列组。
样式/节
标签描述
<style>定义文档的样式信息。
<div>定义文档中的节。
<span>定义文档中的节。
<header>定义 section 或 page 的页眉。
<footer>定义 section 或 page 的页脚。
<section>定义 section。
<article>定义文章。
<aside>定义页面内容之外的内容。
<details>定义元素的细节。
<dialog>定义对话框或窗口。
<summary>为 <details> 元素定义可见的标题。
元信息
标签描述
<head>定义关于文档的信息。
<meta>定义关于 HTML 文档的元信息。
<base>定义页面中所有链接的默认地址或默认目标。
<basefont>不赞成使用。定义页面中文本的默认字体、颜色或尺寸。
编程
标签描述
<script>定义客户端脚本。
<noscript>定义针对不支持客户端脚本的用户的替代内容。
<applet>不赞成使用。定义嵌入的 applet。
<embed>为外部应用程序(非 HTML)定义容器。
<object>定义嵌入的对象。
<param>定义对象的参数。
属性描述
accesskey规定激活元素的快捷键。
class规定元素的一个或多个类名(引用样式表中的类)。
contenteditable规定元素内容是否可编辑。
contextmenu规定元素的上下文菜单。上下文菜单在用户点击元素时显示。
data-*用于存储页面或应用程序的私有定制数据。
dir规定元素中内容的文本方向。
draggable规定元素是否可拖动。
dropzone规定在拖动被拖动数据时是否进行复制、移动或链接。
hidden规定元素仍未或不再相关。
id规定元素的唯一 id。
lang规定元素内容的语言。
spellcheck规定是否对元素进行拼写和语法检查。
style规定元素的行内 CSS 样式。
tabindex规定元素的 tab 键次序。
title规定有关元素的额外信息。
translate规定是否应该翻译元素内容。
*请认真填写需求信息,我们会在24小时内与您取得联系。