本文章同步發佈在個人博客:xueshiming.cnjavascript
列表數據發生改變從新出發頁面渲染的時候,列表中的項目能夠保持自身狀態 好比在input
組件裏,輸入了內容以後 在頁面渲染以後,不但願input
內容發生改變,須要用此屬性 這個屬性,在頁面從新渲染的時候,確保帶有 key
的組件 會從新排序,而不是從新渲染,從而提升頁面渲染性能的效率css
另外:如不提供 wx:key
,會報一個 warning
, 若是明確知道該列表是靜態,或者沒必要關注其順序,能夠選擇忽略。html
wx:if
在切換時有局部渲染的過程,從而保證條件塊渲染時,能夠銷燬並從新渲染,有更高的切換消耗 hidden
始終渲染。能夠控制視圖上的顯示和隱藏,有更高的初始化渲染消耗, 因此元素頻繁切換的話,使用hidden
java
import
: 只能引用咱們定義模板文件的模板內容塊web
template
模板,若是目標文件內嵌套了其餘模板,是不會被引用的,避免了引用模板死循環的問題
include
: 把目標 文件內除了模板代碼塊外的 全部代碼都引入,至關於拷貝到了
include
位置這裏
尺寸單位rpx編程
先了解幾個概念:小程序
設備像素
: 設備能控制的顯示的最小物理單位 這個最小物理單位是屏幕上一個個點,點是固定不變的CSS像素
:外部編程的概念,css代碼中使用的邏輯像素PPI/DPI
:每英寸擁有的像素數目DPR
:手機的某一方向上設備像素和css像素之比雖然wxss
支持rem
,可是咱們知道rem
是根據html
根元素的fontSize
大小來適配的, wxss
不能直接操做html
的樣式屬性,因此rem
適配方案就失效了。 rpx
應運而生,規定屏幕寬度爲750rpx
,從而咱們能夠根據屏幕寬度來自適應,rpx
和rem
實現方式是類似的,並且rpx
最終轉換爲rem
微信小程序
樣式導入api
外聯樣式引入:@import ‘./ss.wxss’
數組
內連樣式引入:style
通常用來寫動態的樣式
選擇器
優先級
通常想要修改他人插件樣式的時候使用!import
小程序兩種啓動方式:冷啓動,熱啓動
小程序何時會主動銷燬?
小程序在冷啓動的時候遇到版本更新,小程序會異步加載,幫咱們下載最新版本的代碼包,並同時使用微信本地版本的代碼包啓動,也就是說最新的代碼包,將在小程序下次啓動纔去加載。若是偏要使用最新版本的代碼包,咱們可使用api來處理
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function (res) {
// 請求完新版本信息的回調
console.log(res.hasUpdate)
})
updateManager.onUpdateReady(function () {
wx.showModal({
title: '更新提示',
content: '新版本已經準備好,是否重啓應用?',
success(res) {
if (res.confirm) {
// 新的版本已經下載好,調用 applyUpdate 應用新版本並重啓
updateManager.applyUpdate()
}
}
})
})
updateManager.onUpdateFailed(function () {
// 新版本下載失敗
})
複製代碼
小程序的啓動流程圖裏面:
左側的部分是在啓動的時候,微信客戶端裏面的視圖層和邏輯層一些交互邏輯以及數據緩存的存取操做,在小程序啓動的時候,會向cdn
請求最新代碼包,第一次啓動必須等到代碼包下載完畢,注入到
webView
容器內執行以後,才能看到小程序頁面,因此在網絡很差的狀況下,咱們會感受到頁面打開比較慢,客戶端會幫咱們把代碼包緩存到本地,當咱們下一次啓動的時候,咱們會從
cdn
請求是否有最新版本的代碼包。
小程序應用生命週期:onLaunch,onShow,onHide,onError
首次進入小程序,從 cdn
或者小程序本地拿到代碼包注入到運行環境, 微信客戶端會給咱們邏輯層app.js
的app
實例來派發onLaunch
事件, 在邏輯層,app.js
的 app
構造器的參數裏面的onLaunch
方法就會被調用。 當用戶使用home
件或者點擊右上角小程序關閉按鈕,來關閉小程序時,小程序是沒有被直接銷燬的,這時app
構造器的參數裏面的onHiede
方法就會被調用,當咱們再次打開小程序時,微信喚起小程序,onShow
方法就會被調用, 當小程序腳本發現錯誤時,或api
調用失敗時,會調用onError
。
小程序頁面的生命週期:onLoad,onShow,onReady,onHide,onUnload,
頁面未被銷燬以前,onLoad
只會調用一次, 頁面顯示以後,會調用page實例裏面的onShow
當頁面初次渲染以後,onReady
就會被調用,頁面未被銷燬以前,只會調用一次 onReady
觸發以後,邏輯層和視圖層進行交互, 當咱們在當前頁面打開新的頁面以後,當前頁面會觸發onHide
, 若是關閉當前頁,會觸發onUnload
負責頁面視圖的view
線程和處理數據的服務以及服務的服務線程,AppService
, 協同完成生命週期週期調用
綁定的事件從最外層節點向下傳遞到目標節點元素,依次檢查,所通過的節點是否綁定了同一事件類型的監聽回調函數,若是有則執行對應的事件回調函數
事件在到達目標節點以後,會觸發目標節點所綁定的監聽回調函數
事件從目標節點,向上冒泡到最外層節點,依次檢查通過的節點是否綁定了,一樣事件類型的監聽回調函數,若是有,會執行這個回調函數
target
屬性: 觸發事件的當前組件 currentTarget
屬性: 觸發事件的根源組件
eg:
若是有外層view
還有個裏層view
嵌套,都經過bind
綁定了點擊事件,target
爲外層view
組件的事件對象,currentTarget
爲底層view
組件的事件對象
type
觸發事件的觸發類型timestamp
觸發事件的時間戳target
觸發事件的根源組件,包括觸發事件根源組件的id自定義屬性的集合currenTarget
事件綁定額當前組件 ,包括當前組件的id
,類型,data
自定義屬性的集合touches
是一個數組,每個元素都是一個touc
h對象 ,標識當前停留在屏幕上的觸摸點和信息changedTouches
是一個數據,標識有變化的 觸摸點,即當前觸摸點從有到無或從無到有的變化detail
標識各個事件帶有的數據,點擊事件: ‘觸摸點距離文檔左上角的距離’ 媒體事件,觸發事件的時候播放狀態,以及時間戳在不一樣環境下的
javascript
腳本運行環境是不一樣的,微信小程序運行在三端:iOS(iPhone/iPad)
、Android
和 用於調試的開發者工具。
三端的腳本執行環境以及用於渲染非原生組件的環境是各不相同的:
在 iOS
上,小程序邏輯層的 javascript
代碼運行在 JavaScriptCore
中,視圖層是由 WKWebView
來渲染的,環境有 iOS8
、iOS9
、iOS10
;
在 Android
上,
javascript
代碼運行中 X5 JSCore
中,視圖層是由 X5
基於 Mobile
Chrome 57
內核來渲染的javascript
代碼運行在 V8
中,視圖層是由自研 XWeb
引擎基於 Mobile Chrome 6
7 內核來渲染的;在 開發工具上,小程序邏輯層的 javascript
代碼是運行在 NW.js
中,視圖層是由 Chromium 60 Webview
來渲染的。
結語:咱們在開發小程序的同時,也別忘記去理解一些原理性和細節性問題,由於這是提高的關鍵。to be an engineer,not a coder.