這個蓬勃發展的時代里,科技的奇跡讓人不禁感慨萬分。作為一個資深的科技博主,我不由得為中國科技的崛起而感到自豪與振奮。在這個充滿希望與潛力的時刻,我們不妨來探討一種全新的技術方案——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小時內與您取得聯系。