沐鳴代理:_子元素margin-top導致父元素移動的問題

上面兩個p標籤之間的間隔是20px。,今天就來說說整個問題產生的原因,以及解決方案。,今天在修改頁面樣式的時候,遇到子元素設置margin-top 但是並沒有使得子元素與父元素之間產生間隔,而是作用在了其父元素上,導致父元素產生了一個margin-top 的效果。,1、同一層相鄰元素之間,Copy <div class=”A”>元素A</div> <div class=”B”>元素B</div> <style> .A, .B { width: 50px; height: 50px; } .A { background: yellow; margin-bottom: 10px; } .B { background: pink; margin-top: 20px; } </style>,2、父子元素之間沒有內容,Copy <div class=”box”> <div class=”A”>元素A</div> <div class=”B”>元素B</div> </div> <div class=”next”>Next</div> <style> .box { margin-top: 10px; margin-bottom: 10px; background: #eee; } .A, .B { width: 50px; height: 50px; } .A { background: yellow; margin-top: 20px; } .B { background: pink; margin-bottom: 20px; } .next { height: 50px; background: #eee; } </style>,解決辦法:,

,Copy .clearfix::after { content: “”; display: block; clear: both; height: 0; overflow: hidden; visibility: hidden; } .clearfix { zoom: 1; },
,在MDN上面有這麼一段文字:,有三種情況會產生邊距摺疊:,上面兩個p標籤之間的間隔是20px。

沐鳴平台網站_理解JS中宏任務和微任務

鏈接: http://www.fly63.com/article/detial/10111,

沐鳴代理:_淺析 JavaScript 中的方法鏈

在處理字符串時有兩種方法。第一個種不用方法鏈,這要求必須在字符串上分別使用每個方法,這樣必須每次都引用這個字符串。,
,方法鏈是一種流行的編程方法,可以幫助你寫出更簡潔易讀的代碼。在本文中我們一起學習 JavaScript 中的方法鏈是什麼,以及它是怎樣工作的。另外我們還會探討如何使用方法鏈接來提高代碼的質量和可讀性。,方法鏈的例子,// 在字符串上使用方法鏈的例子

let myStr = ‘ – Hello-world. ‘

// 不用方法鏈:

myStr = myStr.toLowerCase()

myStr = myStr.replace(/-/g, ‘ ‘)

myStr = myStr.trim()

// 用方法鏈:

myStr = myStr.toLowerCase().replace(/-/g, ‘ ‘).trim()

// 多行方法鏈的寫法:

myStr = myStr

.toLowerCase()

.replace(/-/g, ‘ ‘)

.trim()

// 查看 “myStr” 的值

console.log(myStr)

// Output:

// ‘hello world.’

,// 創建 Promise

const myPromise = new Promise((resolve, reject) => {

// 創建一個假延遲

setTimeout(function() {

// 用一條簡單的消息解決諾言 promise

resolve(‘Sorry, no data.’)

}, 1000)

})

// 使用方法鏈:

myPromise.then((data) => console.log(data)).catch(err => console.log(error))

// 多行方法鏈的寫法:

myPromise

.then((data) => console.log(data))

.catch(err => console.log(error))

// Output:

// ‘Sorry, no data.’,在數組上也能用方法鏈:,第二種方式是用方法鏈。這時可以用所有想要的字符串方法。寫出的代碼也可以是單行或多行,這取決於你的習慣。而且只需要引用一次字符串。儘管結果相同,但是代碼量卻有很大的差異。,// 在數組上使用方法鏈的例子

let myArray = [1, 7, 3, null, 8, null, 0, null, ’20’, 15]

// 不用方法鏈:

myArray = myArray.filter(el => typeof el === ‘number’ && isFinite(el))

myArray = myArray.sort((x, y) => x – y)

// 使用方法鏈:

myArray = myArray.filter(el => typeof el === ‘number’ && isFinite(el)).sort((x, y) => x – y)

// 多行方法鏈的寫法:

myArray = myArray

.filter(el => typeof el === ‘number’ && isFinite(el))

.sort((x, y) => x – y)

// 查看 “myArray” 的值.

console.log(myArray)

// Output:

// [ 0, 1, 3, 7, 8 ]

,你一定曾經用過 jQuery 之類的庫,可能看到過類似的東西。在進行級聯時主要有兩種方法:一種是一個接一個的執行方法,另一種是在同一行上。在純 JavaScript 中這種做法也很普遍。你可以在數組、字符串和 promise 看到它。,在這些情況下所有的過程都是相同的。首先引用要使用的對象。然後根據需要使用多種方法。但不是單獨使用這些方法,而要一個接一個地使用。基本上是把它們鏈接在一起。先看一些例子。,
,在處理字符串時有兩種方法。第一個種不用方法鏈,這要求必須在字符串上分別使用每個方法,這樣必須每次都引用這個字符串。

沐鳴代理_img標籤到底是行內元素還是塊級元素

鏈接: http://www.fly63.com/article/detial/9868,
,瀏覽器支持,標籤定義及使用說明,

沐鳴總代理_Redis不僅僅是緩存,還是……

也許最流行的分佈式內存數據存儲是Redis,它不是緩存,但被當作緩存使用。 引用官方的描述如下:,一段時間以來,巨大數量的數據處理迫使所有的應用程序在數據庫層前添加緩存策略。即使經典數據庫進行了大量的下劃線優化,仍然不能提供足夠的速度和可用性。主要原因在於數據存儲越遠,獲取數據就越困難。另一個原因是因為數據庫中的數據通常保存在磁盤中,而不是在內存。經典數據庫卻是在內存上嵌入了緩存來優化,但是擁有一個專用的獨立緩存也是一種很常用的策略。,你需要一個經典數據庫嗎?,Redis速度很快,它被認為是目前最快的數據存儲之一。它對CPU緩存進行了優化,並且沒有上下文切換。從一開始它就被設計成了內存數據庫,這不僅意味着將數據從磁盤移動到內存,它從一開始就針對性的優化了。,Redis是一個開源的(BSD協議),內存中的數據結構存儲,它可以用作數據庫,緩存,消息代理。它支持的數據結構包括字符串,哈希,列表,集合,有序集合,位圖,超級日誌,具有半徑查詢和流的地理空間索引和流,Redis具有內置複製,Lua腳本,LRU驅逐,事務和不同級別的磁盤持久化,並通過Redis哨兵和Redis集群自動分區。,在解決訪問數據庫的性能問題,通常的解決方案是緩存。緩存並不新鮮,緩存實際上是把經常訪問的少量數據保存在離你更近的地方。我們在處理器上有緩存,數據庫中也有緩存,你甚至可以在自己的應用中編寫緩存。,但隨着事情的發展,現在我們有來高可用的分佈式內存緩存,可以被不同的實例同時使用。,緩存——Redis,也許最流行的分佈式內存數據存儲是Redis,它不是緩存,但被當作緩存使用。 引用官方的描述如下:

沐鳴登錄平台_TypeScript 漸進遷移指南

花了 10 個小時使用 console.log 排查問題后,你終於修復了 Cannot read property ‘x’ of undefined 問題,出現這個問題的原因是調用了可能為 undefined 的某個方法,給了你一個「驚喜」!你暗暗發誓,一定要把整個項目遷移到 TypeScript。但是看了看 lib、util、components 文件夾里上萬個 JavaScript 文件,你對自己說:「等以後吧,等我有空的時候。」當然那一天永遠也不會到來,因為總有各種酷炫的新特性等着加到應用,客戶也不會因為項目是用 TypeScript 寫的就出大價錢。,遷移一個包含成千上百個文件的大型項目可能比你想象得要容易。整個過程主要分 3 步。,我在大概一年前寫了一篇如何把 Node.js 項目從 JavaScript 遷移到 TypeScript 的指南。指南的閱讀量超過了七千,不過其實當時我對 JavaScript 和 TypeScript 的了解並不深入,把重心更多地放到特定工具上,而沒怎麼從全局着手。最大的問題是我沒有提供遷移
大型項目的解決方案。顯然,大型項目不可能在短時間內重寫一切。因此,我很想分享下我最近學到的遷移項目到 TypeScript 的主要經驗。,添加神奇的 d.ts,const user = {
id:
1234,
firstname:
‘Bruce’,
lastname:
‘Wayne’,
status:
‘online’, };
const users = [user];
const onlineUsers = users.filter(
(u) => u.status ===
‘online’);
console.log( onlineUsers.map(
(ou) =>
`${ou.firstname} ${ou.lastname} is ${ou.status}`) );,連接類型,function sendMessage(from, to, message),d.ts 是 TypeScript 的類型聲明文件,其中聲明了代碼中用到的對象和函數的各種類型,不包含任何具體的實現。,如果我告訴你,你可以
增量遷移到 TypeScript 並
立刻從中受益呢?,export
interface User { id:
number; firstname:
string; lastname:
string; status:
‘online’ |
‘offline’; },注意:本文假定你已經有一定的 TypeScript 基礎,同時使用 Visual Studio Code,否則,一些地方可能不一定直接適用。,相關代碼:https://github.com/,
,花了 10 個小時使用 console.log 排查問題后,你終於修復了 Cannot read property ‘x’ of undefined 問題,出現這個問題的原因是調用了可能為 undefined 的某個方法,給了你一個「驚喜」!你暗暗發誓,一定要把整個項目遷移到 TypeScript。但是看了看 lib、util、components 文件夾里上萬個 JavaScript 文件,你對自己說:「等以後吧,等我有空的時候。」當然那一天永遠也不會到來,因為總有各種酷炫的新特性等着加到應用,客戶也不會因為項目是用 TypeScript 寫的就出大價錢。

沐鳴測速註冊_File、Blob、dataURL 和 canvas 的應用與轉換

(2) Data URLs 由四個部分組成:前綴(data:)、指示數據類型的MIME類型、如果非文本則為可選的base64標記、數據本身:data:[ ][;base64],,(2) File 對象是特殊類型的 Blob,且可以用在任意的 Blob 類型的 context 中。比如:FileReader, URL.createObjectURL(), createImageBitmap(), 及 XMLHttpRequest.send() 都能處理 Blob 和 File。,(1) 通常情況下, File 對象是來自用戶在一個 input 元素上選擇文件后返回的 FileList 對象,也可以是來自由拖放操作生成的 DataTransfer 對象,或者來自 htmlCanvasElement 上的 mozGetAsFile() API。,1. File,function fileToDataURL(file) {

let reader = new FileReader()

reader.readAsDataURL(file)

// reader 讀取文件成功的回調

reader.onload = function(e) {

return reader.result

}

},2. Blob,// 思路:File, Blob ——> dataURL ——> canvas

function fileAndBlobToCanvas(fileDataURL) {

let img = new Image()

img.src = fileDataURL

let canvas = document.createElement(‘canvas’)

if(!canvas.getContext) {

alert(‘瀏覽器不支持canvas’)

return;

}

let ctx = canvas.getContext(‘2d’)

document.getElementById(‘container’).appendChild(canvas)

img.onload = function() {

ctx.drawImage(img, 0, 0, canvas.width, canvas.height)

}

},
,(1) Canvas API 提供了一個通過JavaScript 和 html的 canvas 元素來繪製圖形的方式。它可以用於動畫、遊戲畫面、數據可視化、圖片編輯以及實時視頻處理等方面。,function dataURLToBlob(fileDataURL) {

let arr = fileDataURL.split(‘,’),

mime = arr[0].match(/:(.*?);/)[1],

bstr = atob(arr[1]),

n = bstr.length,

u8arr = new Uint8Array(n);

while(n –) {

u8arr[n] = bstr.charCodeAt(n)

}

return new Blob([u8arr], {type: mime})

},(1) Blob 對象表示一個不可變、原始數據的類文件對象。它的數據可以按文本或二進制的格式進行讀取,也可以轉換成 ReadableStream 來用於數據操作。,(2) Blob 表示的不一定是JavaScript原生格式的數據。File 接口基於Blob,繼承了 blob 的功能並將其擴展使其支持用戶系統上的文件。,(1) Data URLs,即前綴為 data: 協議的URL,其允許內容創建者向文檔中嵌入小文件。,(2) Data URLs 由四個部分組成:前綴(data:)、指示數據類型的MIME類型、如果非文本則為可選的base64標記、數據本身:data:[ ][;base64],

沐鳴登錄平台_學習函數式編程 Monad

還記得 Jquery 時代的 ajax 操作嗎?,上述代碼就是一個最基本的 Monad,它將程序的多個步驟抽離成線性的流,通過 bind 方法對數據流進行加工處理,最終得到我們想要的結果。,這些定義很抽象,我們用一段 js 代碼來模擬一下。,Monad 處理副作用,class Monad { value = “”; // 構造函數 constructor(value) { this.value = value; } // unit,把值裝入 Monad 構造函數中 unit(value) { this.value = value; } // bind,把值轉換成一個新的 Monad bind(fn) { return fn(this.value); } } // 滿足 x-> M(x) 格式的函數 function add1(x) { return new Monad(x + 1); } // 滿足 x-> M(x) 格式的函數 function square(x) { return new Monad(x * x); } // 接下來,我們就能進行鏈式調用了 const a = new Monad(2) .bind(square) .bind(add1); //… console.log(a.value === 5); // true,fetch(“request1”) .then((response1) => { return fetch(“request2”); }) .then((response2) => { return fetch(“request3”); }) .then((response3) => { console.log(response3); // 得到最終結果 });,Promise 的出現,解決了上述問題。,上述代碼中,我們通過回調函數,串行執行了 3 個 ajax 操作,但同樣也生成了 3 層代碼嵌套,這樣的代碼不僅難以閱讀,也不利於日後維護。,$.ajax({ type: “get”, url: “request1”, success: function (response1) { $.ajax({ type: “get”, url: “request2”, success: function (response2) { $.ajax({ type: “get”, url: “request3”, success: function (response3) { console.log(response3); // 得到最終結果 }, }); }, }); }, });,Ok,我們已經明白了 Monad 的內部結構,接下來,我們再看一下 Monad 的使用場景。,
,通過 Monad 的規則,衍生出了許多使用場景。,還記得 Jquery 時代的 ajax 操作嗎?

沐鳴怎麼當代理?_5種常用運維監控工具

它通過 snmpget 來獲取數據,使用 RRDtool 繪圖,但使用者無須了解 RRDtool 複雜的參數。它提供了非常強大的數據和用戶管理功能,可以指定每一個用戶能查看樹狀結構、主機設備以及任何一張圖,還可以與 LDAP 結合進行用戶認證,同時也能自定義模板,在歷史數據的展示監控方面,其功能相當不錯。,並且每種軟件都有自己的特點和功能,各自的側重點和目標不完全相同,在設計理念和實現方法上也大同小異,但都具有共同特徵。例如,採集數據、分析展示、告警以及簡單的故障自動處理。最終都能達到對 IT 系統服務可用性的一個完全展示。,運維監控工具千千萬,僅開源的解決方案就有流量監控(MRTG、Cacti、SmokePing、Graphite 等)和性能告警(Nagios、Zabbix、Zenoss Core、Ganglia、OpenTSDB等)可供選擇。,
,Cacti 通過添加模板,使不同設備的監控添加具有可復用性,並且具備可自定義繪圖的功能,具有強大的運算能力(數據的疊加功能)。,下面我們將針對目前行業內常用的五種監控工具(Cacti、Nagios、Zabbix、Grafana、Prometheus)詳細介紹各自的特點。,
,Cacti(英文含義為仙人掌)是一套基於 php、MySQL、SNMP 和 RRDtool開發的網絡流量監測圖形分析工具。,它通過 snmpget 來獲取數據,使用 RRDtool 繪圖,但使用者無須了解 RRDtool 複雜的參數。它提供了非常強大的數據和用戶管理功能,可以指定每一個用戶能查看樹狀結構、主機設備以及任何一張圖,還可以與 LDAP 結合進行用戶認證,同時也能自定義模板,在歷史數據的展示監控方面,其功能相當不錯。

沐鳴怎麼當代理?_Node.js中的Stream

在Node.js中,有以下4種流,Stream主要用於序列化地數據處理(read or write input into output sequentially),比如文件讀寫,網絡數據傳輸, 或任何端到端的數據交換。Stream在處理數據的時候,與傳統方式有所不同,傳統方式是把數據作為一個整體進行處理,而stream則是把數據分割成一塊一塊的進行處理,它不是整個數據一起處理,而是一塊數據一塊數據地處理。以文件讀寫為例,文件讀寫的時候,stream並不是一次性地把一個文件中的所有內容都讀取到內存中再進行處理(就是再寫入到另外一個文件中),而是一塊數據一塊數據的進行讀取,讀取完一塊數據就處理一塊數據(把這塊數據寫入到另外一個文件中),而不會讓它一直在內存中。相比於傳統方式,使用stream來處理數據,可以高效的使用內存,更有可能來處理大文件。再以網絡數據傳輸(網上看視頻)為例。我們並不是把整個電影都從服務器上下載下來才開始播放,而是一塊一塊地下載,下載一塊,播放一塊。服務器一塊一塊地寫數據,瀏覽器一塊一塊的讀數據。用流處理數據,時間上也比較高效。,鏈接: http://www.fly63.com/article/detial/10141,