成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Svelte 前端框架探索

Euphoria / 700人閱讀

摘要:苗條的框架正是作者的初始目的,苗條包括代碼編寫量打包大小等等。是已經(jīng)編譯后的組件有什么缺點(diǎn)是一個剛起步不久的前端框架,無論在維護(hù)人員還是社區(qū)上都是大大不如三大框架,這里列舉一下本人認(rèn)為的存在的缺點(diǎn)。

Svelte 的作者也是 rollup 的作者 Rich Harris,前端界的輪子哥。sevlte 項目首次提交于 2016 年 11 月 16 日,目前版本是 3.6.1(2019-06-27),v3 版本進(jìn)行了大改動,跟之前的版本有很大的差別(v1、v2 版本 API 用法跟 vue 很像,v3 完全屬于自己的風(fēng)格)。

看下 2016-12-02,尤雨溪大神對此框架的評價(當(dāng)然已經(jīng)過時了,但是核心的思想還是一致的):

這個框架的 API 設(shè)計是從 Ractive 那邊傳承過來的(自然跟 Vue 也非常像),但這不是重點(diǎn)。Svelte 的核心思想在于『通過靜態(tài)編譯減少框架運(yùn)行時的代碼量』。舉例來說,當(dāng)前的框架無論是 React Angular 還是 Vue,不管你怎么編譯,使用的時候必然需要『引入』框架本身,也就是所謂的運(yùn)行時 (runtime)。但是用 Svelte 就不一樣,一個 Svelte 組件編譯了以后,所有需要的運(yùn)行時代碼都包含在里面了,除了引入這個組件本身,你不需要再額外引入一個所謂的框架運(yùn)行時!
什么是 Svelte?

Svelte 跟 vue 和 react一樣,是一個數(shù)據(jù)驅(qū)動組件框架。但是也有很大的不同,它是一個運(yùn)行時框架,無需引入框架本身,同時也沒用到虛擬 DOM(運(yùn)行時框架特性決定了這個框架跟虛擬 DOM 無緣)。

Svelte runs at build time, converting your components into highly efficient imperative code that surgically updates the DOM. As a result, you"re able to write ambitious applications with excellent performance characteristics.

雖然沒使用到虛擬 DOM,但一樣可以達(dá)到出色的性能,而且對開發(fā)者編寫代碼是十分便捷。

與 React 和 Vue 有和不同?

那么我們先看下 svelte 的因為意思:苗條的。苗條的框架正是作者的初始目的,苗條包括代碼編寫量、打包大小等等。

總結(jié)一下這個框架的優(yōu)勢,即作者開發(fā)新框架的目的。

靜態(tài)編譯,無需引入框架自身

一個 Svelte 組件是靜態(tài)編譯,所有需要的運(yùn)行時代碼都包含在里面了,除了引入這個組件本身,你感覺不到框架存在。

編寫更少代碼

svelte 模板提供一些簡便的用法,在維護(hù)和編寫上都變得更簡單,代碼量更少(維護(hù)的代碼),這些模板會編譯為最終的js 代碼。

只會打包使用到的代碼

即 tree shaking,這個概念本來也是作者首先提出來的,webpack 是參考了 rollup。

無需虛擬 DOM 也可進(jìn)行響應(yīng)式數(shù)據(jù)驅(qū)動

更便捷的響應(yīng)式綁定

既有響應(yīng)式數(shù)據(jù)的優(yōu)點(diǎn),v3 版本也解決了 vue 數(shù)據(jù)綁定缺點(diǎn),用起來十分方便。

簡單用法對比

react hook

import React, { useState } from "react";
export default () => {
  const [a, setA] = useState(1);
  const [b, setB] = useState(2);
  function handleChangeA(event) {
    setA(+event.target.value);
  }
  function handleChangeB(event) {
    setB(+event.target.value);
  }
  return (
    

{a} + = {a + b}

); };

vue



svelte




{a} +  = {a + b}

都不用多說,一眼就看出來,svelte 簡單多了。

為什么不使用虛擬 DOM?

在 react 和 vue 盛行的時代,你會聽說虛擬 DOM 速度快,而且還可能被灌輸一個概念,虛擬 DOM 的速度比真實 DOM 的速度要快。

所以如果你有這個想法,那么你肯定疑惑 svelte 沒用到虛擬 DOM,它的速度為什么會快?

其實虛擬 DOM 并不是什么時候都快,看下粗糙的對比例子。

對比例子

這里并沒有直接統(tǒng)計渲染的時間,通過很多條數(shù)據(jù)我們就可以感受出來他們直接的性能。特別是點(diǎn)擊每條數(shù)據(jù)的時候,明顯感覺出來(由于是在線上的例子,所以首次渲染速度不準(zhǔn)確,主要看點(diǎn)擊的響應(yīng)速度)。

當(dāng)然這僅僅是在 50000 條數(shù)據(jù)下的測試,對比一下框架所謂的速度,實際的情況下我們是不會一次性展示這么多數(shù)據(jù)的。所以在性能還可行的情況下,更多的選擇是框架所帶來的的便利,包括上手難度、維護(hù)難度、社區(qū)大小等等條件。

svelte

https://svelte.dev/repl/367a2...


{#each data as d, i}
  

Hello {name} {i} 6a22guqa!

{/each}

vue

http://jsrun.net/kFyKp/edit

Hello {{name}} {{i}} {6a22guqa}!
const list  = []
for(let i = 0; i < 50000; i++) {
  list.push(i);
}
const beginTime = +new Date();
new Vue({
  el: "#component-demo",
  data: {
    list: list,
    name: "Hello"
  },
  methods:{
    click(index){
      const list = new Array(50000);
      list[index] = "test"
      this.list = list
    }
  },
  mounted(){
    const endTime = +new Date();
      console.log((endTime - beginTime) / 1000,1);
  }
})

react

http://jsrun.net/TFyKp/edit

const list  = []
for(let i = 0; i < 50000; i++) {
  list.push(i);
}
class App extends React.Component {
  constructor(props){
    super(props);
    this.state = {
      list
    } 
  }
  click(i) {
    return ()=>{
      list[i] = "test"
      this.setState({
        list,
      })
    }
  }
  render() {
    return (
      
{this.state.list.map((v,k)=>{ return(

Hello wolrd {k} {v}!

) })}
) } } function render() { ReactDOM.render( , document.getElementById("root") ); } render();
總結(jié)

首先虛擬 DOM 不是一個功能,它只是實現(xiàn)數(shù)據(jù)驅(qū)動的開發(fā)的手段,沒有虛擬 DOM 我們也可以實現(xiàn)數(shù)據(jù)驅(qū)動的開發(fā)方式,svelte 正是做了這個事情。

單純從上面的對比例子來看,svelte 的速度比虛擬 DOM 更快(不同框架虛擬 DOM 實現(xiàn)會有差別)。雖然沒有進(jìn)行更深層次的對比,但是如果認(rèn)為虛擬 DOM 速度快的觀點(diǎn)是不完全對的,應(yīng)該說虛擬 DOM 可以構(gòu)建大部分速度還可以的 Web 應(yīng)用。

Svelte 有哪些好用的特性?

完全兼容原生 html 用法

編寫代碼是那么的自然,如下面就是一個組件。

{ test }

響應(yīng)式也是那么的自然


{ count }

表達(dá)式也可以是響應(yīng)式的

這個就牛逼了,更加的自然,這種特性只有靜態(tài)編譯才能做到,這個就是 svelte 目前獨(dú)有的優(yōu)勢。

{numbers.join(" + ")} = {sum}

自動訂閱的 svelte store

這個其實就是訂閱發(fā)布模式,不過 svelte 提供了自身特有的便捷的綁定方式(自動訂閱),用起來是那么的自然,那么的爽。

這種特性只有靜態(tài)編譯才能做到,這個就是 svelte 目前獨(dú)有的優(yōu)勢。

stores.js

import { writable } from "svelte/store";
export const count = writable(0);

A.svelte

The count is {$count}

B.svelte

所有組件都可以多帶帶使用

可以直接在 react、vue、angular 等框架中使用。

// SvelteComponent.js 是已經(jīng)編譯后的組件
import SvelteComponent from "./SvelteComponent";

const app = new SvelteComponent({
    target: document.body,
    props: {
        answer: 42
    }
});

Svelte 有什么缺點(diǎn)?

svelte 是一個剛起步不久的前端框架,無論在維護(hù)人員還是社區(qū)上都是大大不如三大框架,這里列舉一下本人認(rèn)為的 svelte 存在的缺點(diǎn)。

props 是可變的

當(dāng)然這也是這個框架故意這樣設(shè)計的,這樣 props 也是可以響應(yīng)式的。

{ title }

props 目前無法驗證類型


無法通過自定義組件本身直接訪問原生 DOM

需要利用 props 的雙向綁定特性,這就可能導(dǎo)致深層次組件的需要層層傳遞 DOM 對象(是子父傳遞,不是父子傳遞)。

App.svelte


A.svelte


test

只有組件才支持 svelte 的靜態(tài)模板特性

js 文件是不支持 sevelte 靜態(tài)模板特性的,像下面這樣是會報錯的。

import { count } from "./stores.js";
function increment() {
  $count += 1;
}

組件不支持 ts 用法

找了一下,沒找到可以支持 ts 的解決方案,如果有解決方案可以評論下。

學(xué)習(xí)和總結(jié)文章同步發(fā)布于 https://github.com/xianshanna...,有興趣可以關(guān)注一下,一起學(xué)習(xí)和進(jìn)步。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/105291.html

相關(guān)文章

  • 2016年最具潛力前端開源項目Top20

    摘要:作為年最具潛力,乃至最具影響力的前端開源項目真的不為過。通過上的介紹,這個項目是偏右阿里的前端大牛和阿里的前端大牛主導(dǎo),而且從中也不難看出有些部分是來自參與過的項目。 showImg(https://segmentfault.com/img/bVH8b2?w=900&h=500); 在2016年,前端的開源世界越發(fā)精彩,Vue的不斷壯大,Angular 2的發(fā)布,Amaze UI 3....

    winterdawn 評論0 收藏0
  • 2016年最具潛力前端開源項目Top20

    摘要:作為年最具潛力,乃至最具影響力的前端開源項目真的不為過。通過上的介紹,這個項目是偏右阿里的前端大牛和阿里的前端大牛主導(dǎo),而且從中也不難看出有些部分是來自參與過的項目。 showImg(https://segmentfault.com/img/bVH8b2?w=900&h=500); 在2016年,前端的開源世界越發(fā)精彩,Vue的不斷壯大,Angular 2的發(fā)布,Amaze UI 3....

    xiguadada 評論0 收藏0
  • 2016年最具潛力前端開源項目Top20

    摘要:作為年最具潛力,乃至最具影響力的前端開源項目真的不為過。通過上的介紹,這個項目是偏右阿里的前端大牛和阿里的前端大牛主導(dǎo),而且從中也不難看出有些部分是來自參與過的項目。 showImg(https://segmentfault.com/img/bVH8b2?w=900&h=500); 在2016年,前端的開源世界越發(fā)精彩,Vue的不斷壯大,Angular 2的發(fā)布,Amaze UI 3....

    Caizhenhao 評論0 收藏0
  • JavaScript主流框架3月趨勢總結(jié)

    摘要:每個月我們都會對前端框架進(jìn)行總結(jié)和分析,包括使用情況性能相關(guān)會議訓(xùn)練課程等等??蚣苁褂们闆r我們首先來看看主流框架的使用趨勢。下圖顯示了前四大框架和最近一個月的下載量趨勢??蚣茉鲩L率上個月增長率去年有幾點(diǎn)值得注意。 譯者按: React依舊獨(dú)領(lǐng)風(fēng)騷! 原文: What’s New in JavaScript Frameworks-March 2018 譯者: Fundebug 為...

    2shou 評論0 收藏0
  • OneAPM大講堂 | 誰更快?JavaScript 框架性能評測

    摘要:表格底部的減速幾何平均是一項總的性能指標(biāo),從左至右,依次表明了各個框架的評級。最左端是,表示無框架的實現(xiàn),做為一個參考點(diǎn)。和都是顯著偏慢的框架,兩者給出的性能數(shù)據(jù)也相差無幾。 文章系國內(nèi)領(lǐng)先的 ITOM 管理平臺供應(yīng)商 OneAPM 編譯呈現(xiàn)。 網(wǎng)頁性能是一個豐富且又復(fù)雜的話題。在本帖中,我們會將討論的范圍局限在前端 JavaScript 框架上,探究相對于另外一種框架而言,使用當(dāng)前的...

    BDEEFE 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<