2017-03-24 4 views
0

Hintergrund:Wie werden Schriftarten im node.js-Backend verwendet?

Ich baue eine node.js-basierte Web-Anwendung, die Verwendung von verschiedenen Schriftarten zu machen braucht. Dies muss jedoch nur im Backend erfolgen, da die Ergebnisse als Bild geliefert werden. Folglich benötigt der Client/Browser nicht Zugriff auf die Schriftarten überhaupt in meinem Fall.

Frage:

Ich werde versuchen, die Frage so wenig subjektiv wie möglich zu formulieren: Was die typischen Optionen sind einen node.js Backend mit einer großen Sammlung von Schriften zur Verfügung stellen?

Die Optionen, die ich mit so weit kam, sind: Server:

  1. Hat man diese Hunderte oder Tausende von Schriften im Betriebssystem des (Ubuntu in meinem Fall) installieren?
  2. Wird die Schriftarten irgendwie aus einem Cloud-Speicher wie S3 oder (Online-) Datenbank wie einem Mongo DB-Server bedient?
  3. Verwendet man ein lokales Dateisystem, um die Schriftarten zu speichern und sie abzurufen?
  4. ... andere Optionen

Ich bin derzeit Neigung zu 1 Option, weil dies die Art und Weise eines Laie wie ich tut es auf einem lokalen Computer.

Ohne hier eine Diskussion zu beginnen, wo könnte ich Ressourcen finden, die die (Un-) Vorteile der verschiedenen Optionen diskutieren?

EDIT:

Danke für alle Antworten. Dank dieser habe ich bemerkt, dass ich etwas klären muss. Ich brauche die Schriftarten, die in SVG-Verarbeitungsbibliotheken wie p5.js, paper.js, raphael.js verwendet werden. Also muss ich die Fonts für diese Bibliotheken verfügbar machen, die auf node.js laufen.

+1

Wie planen Sie die Bilder in Node.js zu rendern? – AEonAX

+0

Ich benutze paper.js und ähnliche Bibliotheken (was schon funktioniert!). Diese verwenden dann die Schriften im SVG-Format und exportieren später auch nach * .png. Das funktioniert auch schon. – pascal

+1

Funktioniert das https://groups.google.com/forum/#!topic/paperjs/mdjv-LrUS1Y? – AEonAX

Antwort

1

Der Schlüssel zu Ihrer Frage ist

Hunderte oder Tausende von Schriften

Bis ich, dass nahm es keinen wirklichen Unterschied zwischen den Methoden ist. Aber wenn diese Zahl korrekt ist (Art irrsinnig aber) ist, würde ich:

  1. nicht sie im Betriebssystem installieren. Was passiert, wenn Sie Server ohne ein Image verschieben? Oder OS verschieben?

  2. Local File System wäre eine vernünftige Art und Weise, es zu tun, obwohl Sie manuell verfolgen müssen alle Dateinamen und Pfade für Ihren Code.

  3. MongoDB - Speichern Sie Dateinamen + Pfade in der Sammlung .. und speichern Sie die tatsächlichen Schriften in Ihrem System. In der Einführung der beweglichen Server müssten Sie das Verzeichnis aufheben, in dem alle tatsächlichen Dateien gespeichert sind, und die Datenbank, in der Sie den Dateinamen + Pfade haben.
  4. Wenn Sie möchten, können Sie alles in eine MongoDB legen, aber dann wäre diese Datei auch riesig, ich nehme an - das liegt an Ihnen.

Wahl # 3 ist wahrscheinlich, was ich in einem solchen Fall tun würde.

+0

Danke, @twg! Die Nummer ist korrekt;) Meine Web-App versucht, Schriftarten auf kreative Weise zu verwenden - also muss ich mit Hunderten oder sogar Tausenden von ihnen arbeiten. Wissen Sie, ob JavaScript-Bibliotheken (über node.js) wie paper.js, p5.js usw. mit Schriftarten arbeiten können, wenn die Schriftart nur als Dateipfad bereitgestellt wird - und nicht im Betriebssystem installiert ist? – pascal

+1

@pascal bin mir nicht sicher - aber sieh es dir hier an: [fontkit] (https://www.npmjs.com/package/fontkit) – twg

+0

Danke! Mit fontkit habe ich erreicht, was ich wollte! – pascal

-1

Wenn Sie ein angemessenes Server-Setup haben (z. B. ein VPS oder eine andere VM-Lösung, bei dem Sie die Installation kontrollieren), sollten Sie den Job "außerhalb des Knotens" ausführen. Zum Beispiel in einem meiner Projekte, wo ich brauche zu bauen 175 + as-perfect-as-can-sein Mathe-Anweisungen, Offload ich, dass die Arbeit zu XeLaTeX statt:

  1. Ich betreibe einen Knoten Skript, das die Eingabe verwendet Text und baut eine kleine, aber komplette .tex Datei
  2. ich dann Knoten sagen „xelatex theFileIJustMade.tex“ zu nennen, die eine pdf
  3. ergibt ich dann Knoten sagen „pdfcrop“ auf diesem pdf zu nennen, die Ränder entfernen
  4. Ich sage dann Knoten zu "pdf2svg" aufrufen, die ein kostenloses und erstaunlich effektives Dienstprogramm ist
  5. Dann als letzten Schritt Um Speicherplatz und Bandbreite zu sparen, verwende ich "svgo", einen auf Knoten basierenden svg-Optimierer, der entweder als normaler Skriptcode oder als CLI-Dienstprogramm ausgeführt werden kann.

(einige weitere Details zu diesen here mit konkretem Code here)

Natürlich, je nachdem, wie empfindlich ein System, das Sie benötigen, können Sie ohne die Schritte 3 und 5 vollständig tun Es gibt eine Grenze zu wie schnell wir laufen können, aber als serverseitige Aufgabe sollte niemals Echtzeit-Reaktionsfähigkeit erwartet werden.

Dies ist ein gutes Beispiel dafür, dass Ihr Server in einem größeren Betriebssystem ausgeführt wird, das möglicherweise auch Tools bietet, die diese Aufgabe erfüllen können. Während Sie Node verwenden und die offensichtliche Wahl eine Node-Lösung ist, ist Node auch eine allgemeine Programmiersprache und kann alles andere über spawn und exec aufrufen, ähnlich wie Python, PHP, Java, C#, usw. Also ist es Manchmal lohnt es sich, darüber nachzudenken, ob es ein anderes Werkzeug gibt, das für Ihre Bedürfnisse noch besser geeignet ist, besonders wenn Sie über einen hochspezialisierten Job nachdenken, wie das Setzen einer Zeichenkette in SVG.

In diesem Fall wurde LaTeX speziell erstellt, um Text von der Befehlszeile aus zu setzen, und XeLaTeX wurde mit voller Unicode-Erkennung und sauberem, einfachem Zugriff auf Zeichensätze sowohl aus Datei als auch vom System mit vollständiger OpenType-Funktion erstellt Kontrolle, würde sich also genauso als Kandidat qualifizieren, wie eine knotenspezifische Lösung sein könnte.

Wie für die verwendeten Tools: XeLaTeX und pdfcrop kommen mit TeX Live (installiert mit jedem Paket-Manager Ihres Betriebssystems oder über MiKTeX unter Windows, aber ich vermute, dass Ihr Server nicht unter Windows) pdf2svg ist frei available on github, und svgo is available from npm)

Verwandte Themen