WinFuture-Forum.de: Regex - Js-files Reduzieren Mit Php - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Regex - Js-files Reduzieren Mit Php


#1 Mitglied ist offline   daarg 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.212
  • Beigetreten: 30. November 11
  • Reputation: 4
  • Geschlecht:Männlich

geschrieben 05. Januar 2010 - 11:02

Suche nach nem regex-Profi ...
Habe mir eine PHP-Klasse geschrieben, die CSS- und JS-Files einlesen, zusammenfügen und komprimieren kann (spart Traffic und bringt Performance). CSS-Files kann ich gut komprimieren (überflüssige Zeichen, Kommentare usw. entfernen). Bei JS-Files steh ich auf dem Schlauch, vielleicht kann mir jemand helfen.

CSS-Inhalte (eingelesen in einen String) reduziere ich folgendermassen:

$input = preg_replace('!/\*([^*]{2,})*\*+([^/][^*]*\*+)*/!', '', $input);
$input = str_replace(array("\r\n", "\n\n", "\n", "\r", " ", " "), "", $input);

Bei JS haut das nicht hin (z.B. wg. der verschiedenen Kommentaren /* ...*/, //)

$input = str_replace(array("\n\n", "\t", " ", " "), array("\n", "", "", ""), $input);

Wie krieg ich das schöner hin (alle Kommentare entfernen, Leerzeilen löschen usw.).

Gruss
// CH
as wolves among sheep we have wandered [bathory, dis irae]
0

Anzeige



#2 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 05. Januar 2010 - 11:25

Schau dir doch einfach mal an, wie der YUI Compressor das macht. Quellcode ist ja verfügbar. Und das Teil macht viel mehr als nur die Kommentare zu entfernen.
0

#3 Mitglied ist offline   daarg 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.212
  • Beigetreten: 30. November 11
  • Reputation: 4
  • Geschlecht:Männlich

geschrieben 05. Januar 2010 - 11:52

Den YUI-Compressor kenne ich - ich will aber nicht den Overkill sondern meine Klasse anpassen. Danke trotzdem.
as wolves among sheep we have wandered [bathory, dis irae]
0

#4 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 05. Januar 2010 - 12:05

Zitat

ich will aber nicht den Overkill sondern meine Klasse anpassen

Habe ich auch nicht gefordert. Du sollst dir einfach die Klassen anschauen und dir die entsprechenden Regex-Aufrufe rausziehen.

Der CSSCompressor hat z.B. so interessante Sachen, wie:
// Remove the spaces after the things that should not have spaces after them.
css = css.replaceAll("([!{}:;>+\\(\\[,])\\s+", "$1");

// Replace 0(px,em,%) with 0.
css = css.replaceAll("([\\s:])(0)(px|em|%|in|cm|mm|pc|pt|ex)", "$1$2");


Ansonsten kannst du den mal versuchen:
/(^[\/]{2}[^\n]*)|([\n]{1,}[\/]{2}[^\n]*)/g;

0

#5 Mitglied ist offline   daarg 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.212
  • Beigetreten: 30. November 11
  • Reputation: 4
  • Geschlecht:Männlich

geschrieben 05. Januar 2010 - 22:17

Haut leider auch nicht wirklich hin. Habe einige Bibliotheken im Einsatz (z.B. SWFOjects.js), die nach dem Filtern von Kommentaren nicht mehr wollen...
as wolves among sheep we have wandered [bathory, dis irae]
0

#6 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 06. Januar 2010 - 08:04

Hast du mal verglichen, wie die Dateien vor- und nach dem Filtern aussehen?

Was mir spontan auffällt ist, dass der Regex nach "\n" sucht. Je nach verwendetem Zeichensatz kann es jedoch auch "\r\n" oder "\r" sein.
0

#7 Mitglied ist offline   daarg 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.212
  • Beigetreten: 30. November 11
  • Reputation: 4
  • Geschlecht:Männlich

geschrieben 06. Januar 2010 - 21:27

Habe In-/Out verglichen. Das Problem besteht mit der Syntax von SWFObjects.js - dort werden u.a. HTML-Elemente die z.Bsp. //: usw. enthalten. Beziehe die Bibliothek inzwischen via Google (wg. Chaching) - und meine Scripte reduziere ich mit RegEx.
as wolves among sheep we have wandered [bathory, dis irae]
0

#8 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 06. Januar 2010 - 21:59

http://ajax.googleapis.com/ajax/libs/swfob....2/swfobject.js

Wo siehst du dort HTML-Elemente? Und nein, das ganz oben ist ein Kommentar. :sick:

Zitat

inzwischen via Google (wg. Chaching)

Das musst du mir jetzt mal erklären. Vor allem, da du sowieso deine "reduzierten" Dateien sendest.
0

#9 Mitglied ist offline   daarg 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.212
  • Beigetreten: 30. November 11
  • Reputation: 4
  • Geschlecht:Männlich

geschrieben 07. Januar 2010 - 08:24

Zitat

Wo siehst du dort HTML-Elemente? Und nein, das ganz oben ist ein Kommentar. :sick:

In Version 2.1 kam u.a. folgende Syntax zum Einsatz
if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");


Zitat

Das musst du mir jetzt mal erklären. Vor allem, da du sowieso deine "reduzierten" Dateien sendest.

Reduzierung HTTP-Requests meiner Domain = bessere Performance.

// CH
as wolves among sheep we have wandered [bathory, dis irae]
0

#10 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 07. Januar 2010 - 10:03

Hmm...dann aktualisiere einfach auf die 2.2, falls möglich. Mir fällt auf die Schnelle keine einfache Möglichkeit ein, um so ein Konstrukt auszuschließen.

Zitat

Reduzierung HTTP-Requests meiner Domain = bessere Performance.

Was du damit bezwecken möchtest, ist mir klar, mache selber viel in diese Richtung. Allerdings hat die Reduzierung von Requests nichts Caching zu tun. Caching regelst du über den HTTP-Header "Cache-Control" und dem Attribute max-age.

Wenn ich dich aber richtig verstanden habe, kriegen die Besucher deiner Seite doch sowieso nichts von dem Google-Aufruf mit, da du denen deine abgespeckten Dateien schickst. Sie schicken also nur einen Request an dich und nicht an Google.
0

#11 Mitglied ist offline   daarg 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.212
  • Beigetreten: 30. November 11
  • Reputation: 4
  • Geschlecht:Männlich

geschrieben 07. Januar 2010 - 11:25

@Witi: Apache regelt vieles für mich, mod_expires (Caching) und mod_deflate (Komprimierung) zum Einsatz. Meine PHP-Klasse fasst CSS- und JS-Libs in eine Datei zusammen um HTTP-Requests zu sparen. Dies ist nur ein Teil von vielen Performanceoptimierungen - jQuery beziehe ich z.B. von Google da ich davon ausgehen kann das viele User diese Datei bereits im Cache haben - und der Request die Ausflieferung meiner Daten nich verlangsamt ... Reicht dir das als Ausführung? Ich hab nämlich grade keinen Bock über den Sinn und Unsinn meiner Aufgaben zu diskutieren.
as wolves among sheep we have wandered [bathory, dis irae]
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0