国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Svelte 前端框架探索

Euphoria / 632人閱讀

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

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

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

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

Svelte 跟 vue 和 react一樣,是一個數(shù)據(jù)驅(qū)動組件框架。但是也有很大的不同,它是一個運行時框架,無需引入框架本身,同時也沒用到虛擬 DOM(運行時框架特性決定了這個框架跟虛擬 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,但一樣可以達到出色的性能,而且對開發(fā)者編寫代碼是十分便捷。

與 React 和 Vue 有和不同?

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

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

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

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

編寫更少代碼

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

只會打包使用到的代碼

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

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

更便捷的響應式綁定

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

簡單用法對比

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} + {b} = {a + b}

); };

vue



svelte





{a} + {b} = {a + b}

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

為什么不使用虛擬 DOM?

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

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

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

對比例子

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

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

svelte

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



{#each data as d, i}
  

Hello {name} {i} s2umqgg!

{/each}

vue

http://jsrun.net/kFyKp/edit

Hello {{name}} {{i}} {ua0es0s}!
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)會有差別)。雖然沒有進行更深層次的對比,但是如果認為虛擬 DOM 速度快的觀點是不完全對的,應該說虛擬 DOM 可以構(gòu)建大部分速度還可以的 Web 應用。

Svelte 有哪些好用的特性?

完全兼容原生 html 用法

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


{ test }

響應式也是那么的自然



{ count }

表達式也可以是響應式的

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


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

自動訂閱的 svelte store

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

這種特性只有靜態(tài)編譯才能做到,這個就是 svelte 目前獨有的優(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 有什么缺點?

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

props 是可變的

當然這也是這個框架故意這樣設計的,這樣 props 也是可以響應式的。


{ title }

props 目前無法驗證類型

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

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

App.svelte



A.svelte



test

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

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

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

組件不支持 ts 用法

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

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

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

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

相關文章

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

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

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

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

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

    摘要:作為年最具潛力,乃至最具影響力的前端開源項目真的不為過。通過上的介紹,這個項目是偏右阿里的前端大牛和阿里的前端大牛主導,而且從中也不難看出有些部分是來自參與過的項目。 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é)

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

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

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

    BDEEFE 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<