LibSass wird von Tag zu Tag beliebter. Es vergeht kein Tag, an dem niemand behauptet, seine Codebase stolz auf LibSass umgestellt zu haben. Oh toll.
Fühlst du dich ein bisschen verloren? Sie wissen nicht genau, was LibSass ist, wie es funktioniert und was die Hauptunterschiede zum Original Sass sind? Nun, mach dir keine Sorgen, mein Freund, ich habe dich bedeckt.
Bevor wir erklären, was LibSass ist, lassen Sie uns zunächst einen Überblick über das geben Sass ist. Sass ist ein in Ruby geschriebener CSS-Präprozessor. Um Sass verwenden zu können, müssen Sie es als installieren Juwel (ein Ruby-Paket) auf Ihrem Computer. Anschließend können Sie mit Sass entweder über die Befehlszeilenschnittstelle (CLI) oder mit einer Anwendung wie Prepros interagieren.
LibSass ist ein Port von Sass, der in C / C ++ geschrieben ist. Ruby ist nicht die schnellste Sprache der Welt. Und es stellt sich heraus, dass es bei Sass ziemlich langsam ist.
„Ruby ist, gelinde gesagt, keine der leistungsfähigsten Sprachen der Welt.“ - Kamil Bielawski
Da ich selbst kein Ruby-Entwickler bin, kann ich nicht genau sagen, warum; Vielleicht ist das Schreiben von Dateien nicht so effizient wie es sein könnte, ich weiß es ehrlich gesagt nicht. Aber aus irgendeinem Grund ist Ruby Sass langsam und wird bei großen Projekten noch langsamer.
Dies erreichte den Punkt, an dem einige Leute die Performance-Verzögerung satt hatten und beschlossen, Sass in C / C ++ zu schreiben, um die Kompilierungszeiten zu beschleunigen. Was sie aufkamen, war LibSass.
Sie können LibSass nicht wirklich alleine verwenden: Sie benötigen einen Wrapper. Zum Beispiel ist Node-Sass ein NodeJS-Wrapper für LibSass. Damit können Sie Node-Sass verwenden, um Ihre Sass aus Node mit LibSass darunter zu kompilieren.
Node-Sass auf npmEs gibt auch SassC, Perl-Libsass, PHP-Sass und sogar Ruby-LibSass, alle darunter LibSass. Diese letzteren Beispiele sind jedoch nicht vollständig auf dem neuesten Stand. Daher verwenden wir häufiger Node-Sass.
Zusammenfassend ist LibSass der C / C ++ - Port des ursprünglichen Sass-Programms, das in Ruby geschrieben wurde. Es ist dafür gedacht, umwickelt zu werden, wie dies bei Node-Sass der Fall ist, um Sass aus einer Node-Umgebung zu verwenden. Hauptziel: im Vergleich zum ursprünglichen Sass rasend schnell zu sein.
Okay, wir wissen also, was LibSass ist. Wir wissen, dass LibSass so schnell sein soll wie ein Roboter-Regenbogen-Einhorn. Gut. Warum benutzen wir jetzt nicht alle LibSass??
Das Hauptproblem bei LibSass ist, dass es in Bezug auf Funktionen hinter der ursprünglichen Ruby-Implementierung zurückbleibt. Zum Zeitpunkt des Schreibens ist LibSass 3.1 vollständig mit Sass 3.3 kompatibel, jedoch sind viele Funktionen von Sass 3.4 noch nicht verfügbar. LibSass vermisst beispielsweise die Verwendung des Referenzselektors (&
) in SassScript (die Fähigkeit, es mit Funktionen und dergleichen im laufenden Betrieb zu lesen und zu aktualisieren).
Glücklicherweise haben Sass-Kerndesigner beschlossen, auf LibSass zu warten, bevor sie zu Sass 3.5 übergehen. Daher sollten beide Versionen bald synchronisiert werden. Die Ruby-Version wird jedoch immer die Hauptversion sein: Patches und Releases werden immer zuerst auf Ruby Sass landen und dann von LibSass implementiert.
Hier kommt der Moment, in dem Sie entscheiden müssen, welchen Sass-Motor Sie ausführen möchten: der Original-Ruby-Sass oder der brandneue LibSass? Wie bei allem in unserem Bereich kommt es darauf an.
Alles in allem würde ich LibSass wahrscheinlich empfehlen, weil es im Allgemeinen schneller als Ruby Sass ist und Geschwindigkeit alles auf dieser Welt ist. Wenn Sie jedoch Sass für etwas Verrücktes benötigen, das neue Funktionen in LibSass benötigt, ist Ruby die bessere Wahl.
In den meisten Fällen werden Sie feststellen, dass es nicht darum geht, einen Sass-Compiler für ein neues Projekt zu wählen, sondern das bereits verwendete zu überdenken, damit es Ihrer Situation entspricht. Wenn Sie an mittelgroßen bis großen Projekten arbeiten, kann es bei Ruby Sass zu einer Kompilierzeit von 2 Sekunden bis 30 Sekunden (ja…) kommen. Bei logiklastigen Abhängigkeiten wie Compass könnte es schlimmer sein.
An diesem Punkt werden Sie es satt, 25 Minuten pro Tag zu verlieren, während Sie warten, bis Sass kompiliert ist. Sie sollten ernsthaft erwägen, einige Funktionen zu löschen, um an Geschwindigkeit zu gewinnen. In diesem Fall sieht LibSass wie ein riesiger kätzchenförmiger Cupcake aus, während Ruby Sass eher wie ein alter und trockener Keks ist…
Um Ihnen bei der Entscheidung zu helfen, ob Sie Ihre gesamte Codebasis nach LibSass portieren können, habe ich das Sass-Compatibility-Projekt eingerichtet. Sass-Compatibility beabsichtigt, alle schwerwiegenden Unstimmigkeiten zwischen den verschiedenen Sass-Engines (hauptsächlich Ruby Sass 3.2, Sass 3.3, Ruby Sass 3.4 und neueste LibSass) aufzulisten. Ich habe das Projekt kürzlich bei SitePoint vorgestellt, wenn Sie aufholen möchten.
Das Sass-KompatibilitätsprojektHinweis: Sass-Compatibility verwendet SassMeister, um seine Tests auszuführen. SassMeister verwendet Node-Sass, um LibSass auszuführen. Allerdings ist Node-Sass noch nicht mit LibSass 3.1 kompatibel (dies sollte jedoch bald geschehen), was bedeutet, dass die Ergebnisse der Sass-Kompatibilität für LibSass schlechter aussehen, als die Situation tatsächlich ist.
Da sind wir, Leute. Ich hoffe, dieser Artikel hat Ihnen geholfen, das Was und Warum von LibSass zu verstehen.
Wir befinden uns derzeit in einer merkwürdigen Situation, in der LibSass dank seiner Geschwindigkeit äußerst praktisch ist, aber nicht alles bietet, was Ruby Sass tut, und daher noch nicht bedingungslos angenommen werden kann. Dies wird sich bald beruhigen, wenn beide Versionen vollständig kompatibel sind.
Nun, da LibSass viel schneller als Ruby Sass ist (und ich denke, egal wie hart Ruby Sass Core-Entwickler versuchen, es wird immer so sein), weiß ich nicht, welche Zukunft die Ruby-Implementierung haben kann. Ich glaube nicht, dass es an einem bestimmten Punkt sinnvoll ist, Ruby Sass zu verwenden, wenn es langsamer ist, es sei denn, es bringt etwas mehr auf den Tisch. Wie gesagt: Warten und sehen.