Hallo,

Ik heb in mijn script some wat embedded PHP in jquery staan een voorbeeld is iets als:


var html = ' <span id="showmap" class="menuTemplate1 decor1_1" folder1 = "<?=$folder1?>" folder2 = "<?=$folder2?>" folder3 = "<?=$folder3?>"><?=$_SESSION['def']['SHOW_MAP']?> </span> ';



Het punt is dat het wel goed werkt, maar ik wil je boel minimaliseren. Als ik de online tools gebruik werkt dat niet, want het moet gescheiden zijn.

Ik heb google speedmodule ooit gebruikt wat welwerkte maar een grote resource verbruik voor de server is, waardoor ik dat maar heb verwijderd.

Weet iemand een tool class waar ik mijn js MET EMBEDDED PHP goed kan minimaliseren?

@Arian,
https://www.google.nl/search?q=minify+javascript
Hier vind ik een hoop scripts en tools.

Ja, zas ik zei werken die niet met embedded PHP in JS,

@vincent

Ook ik zie niks over een PHP script dat Javascript echoed.


jouw hele probleem is uitsluitend veroorzaakt doort jouw idee dat dit javascript is. Dat is het niet.
het heet *.php, het bevat PHP code, het wordt door PHP uitgeoverd


Ongelofelijk, dat je dat niet begrijpt, ik heb de code al gegeven. Het is Javascript met embedded PHP, zoek maar eens op google.


Nee die zijn er niet, want voor de dertigste keer: je kunt PHP niet embedden in javascript.


Dat kunt je wel, dat heb ik gedaan en dat werkt,dat zijn feiten, maar het minimaliseren werkt niet.

Daniel van Seggelen op 22/10/2016 10:53:08


@Arian,
https://www.google.nl/search?q=minify+javascript
Hier vind ik een hoop scripts en tools.

Ja, zas ik zei werken die niet met embedded PHP in JS,

Dat hoeft ook niet, als je de embedded PHP in je HTML-document inlaadt, buiten je javascript-file. Zie ook mijn voorbeeld in dit topic. Met andere woorden: het kan prima! :-)
- Ariën - op 22/10/2016 10:28:19


@Vincent: Ik zie zelf echt niks over een PHP-script die JavaScript echo'ed. Laat maar zien waar jij PHP ziet die een JavaScript echo'ed?


Oh oh! Mag ik? Technisch gezien wordt een willekeurig script met wat embeds omgezet naar een script met echo's. Dat zijn de opcodes die je krijgt. Dus:

Hallo mijn naam is <?php echo $naam; ?>

is qua opcodes EXACT hetzelfde als
<?php
echo 'Hallo mijn naam is ' . $naam;
?>

Het probleem dat ontstaat is dat de code die je wilt minifyen anders is dan de code die uiteindelijk gebruikt wordt, en in de huidige opzet is de code inclusief je placeholders gewoon geen geldige javascript, maar WEL geldige PHP code.
Dat is eigenlijk wel zo inderdaad, doordat het met een .php door PHP wordt geparsed. Dat gebeurt niet met een .js file.

Dit is een .php bestand


En... punt, cut, that's a take, inpakken en klaar.

Het is een PHP script, PHP leest het, PHP verwerkt het, en het PRINT javasacript.




Ook ik zie niks over een PHP script dat Javascript echoed.


Wat denk je dan dat PHP doet met de tekst die buiten de PHP tags staat? Komen ze op je scherm? Ja. Komen ze uit PHP? Ja. Worden ze dan geprint? Ja.




Dat kunt je wel, dat heb ik gedaan en dat werkt,dat zijn feiten, maar het minimaliseren werkt niet.


Nee, het kan niet, dat heb jij niet gedaan, en het minimaniseren werkt niet omdat je dus *GEEN* javasscript hebt gemakt.



Dat is eigenlijk wel zo inderdaad, doordat het met een .php door PHP wordt geparsed. Dat gebeurt niet met een .js file.


Dat roep ik twee dagen... het is een PHP script, het heeft de PHP extentie, het wordt door PHP opgestart... het *IS* PHP. En dus is het logisch dat javascript tools er niet mee kunnen werken en daarom lukt het minifiyen niet.

En dat verhaal over die opcode kwam pas later naar voren, en ind at opzicht kan je zeker gelijk hebben, maar in de praktijk lijkt het namelijk anders. Daar zit de verwarring dus.

Conclusie: Minifieen heeft zin als je statische JS-files hebt. Die gaan toch niet door PHP. En de dynamische scripts in je index.php file, kan je heel lastig on-the-fly minifieen. Maar een paar toewijzingen is niet zo heel lastig te minifieen, een kwestie van wat enters en spaties eruit filteren. (Of {strip} in Smarty ;-) )
Ik raak je even kwijt. Waar gaat het over opcache? Ik had het zelf over de browser cache. De conclusie wordt er overigens niet minder geldig door.

En dat verhaal over die opcache kwam pas later naar voren, en ind at opzicht kan je zeker gelijk hebben, maar in de praktijk lijkt het namelijk anders.


opCODE, niet opcache, dat zijn twee totaal verschillende dingen. Op het moment dat PHP het script parset maakt hij er gewoon één groot print statement van.


Daar zit de verwarring dus.


En ik snap die verwarring dus niet, als je een script hebt met PHP tags er in, met de .php extensie, en het wordt uitgevoerd door PHP, waarom dan volhouden dat het javascript is? Het *genereert* javascript, maar dat is wat anders.

De reden dat ik er zo lang over doorzaag is dat het belangrijk is voor je website (en je carriere in de PHP wereld) dat je begrijpt in welke taal je bezig bent en welke consequenties daar aan hangen. Als je denkt dat je javascript bestanden kunt opslaan als *.php omdat dat "ook werkt", dan maak je je website onnodig traag en zwaar voor de server.

Wat dat betreft is het hetzelfde als gebrekkige kennis van databases, waar men liever kiest om alle records uit een tabel in PPH te laden en ze in PHP te verwerken omdat men dat "overzichtelijker" vindt. En intussen ligt de server bijna plat...

(ps: "je" is hier in het algemeen, niet jou of de TS in het bijzonder)


Conclusie: Minifieen heeft zin als je statische JS-files hebt. Die gaan toch niet door PHP.


Minifyen doe je om precies één reden: de minified versie is kleiner dan het origineel. Kleinere bestanden kosten minder bandbreedte en dus minder tijd om te versturen.

- Je kunt javascript printen vanuit PHP.
- De javascript die je print met PHP kun je minifyen, de originele PHP code niet.
- Je kunt een pre-minified versie van de javascript code maken met speciale javascript-vars of strings die als placeholders werken zodat je ze met PHP weer kunt vervangen door de waarde die je nodig hebt.

Maar, minifyen heeft alleen echt nut als je significant ruimte spaart. Als je 0.04 seconde extra werk per pageview moet doen om 20 bytes uit te sparen dan kun je beter niet doen want die 20 bytes kosten maar een paar microseconden om te versturen.

Het hele verhaal van dynamisch javascript is sowieso achterhaald door AJAX. Bouw gewoon een javascript app en laat die de dynamische data laden via een XHR call. Die call haalt dan alleen een handjevol waarden op, die je nog kunt laten cachen ook, zowel serverside als clientside. Dar is een van de redenen waarom systemen zoals AngularJS zo populair zijn, ze halen alle noodzaak voor "dynamische javascript" weg.
Ikdenk een oplossing gevonden te hebben.
In de php file waar javascript gemaakt word exporteer ik in een .js file op deze manier

PHP

function minify_output($buffer){
    $search = array('/\>[^\S ]+/s','/[^\S ]+\</s','/(\s)+/s');
    $replace = array('>','<','\\1');
    if (preg_match("/\<html/i",$buffer) == 1 && preg_match("/\<\/html\>/i",$buffer) == 1) {
        $buffer = preg_replace($search, $replace, $buffer);
    }
    return $buffer;
}

		 ob_start('minify_output');	

// EMBEDDED PHP IN JS

<?php
if ($_SESSION['anything']=='')
{
	?>
	
        jsfuntie_test('test');
	<?php 
	} else {?>
	
	 jsfuntie_test('test2');
	
	<?php 
} 

$myJS = ob_get_clean();

$JSoutput  = fopen("/pad/js/output.js", "wr") or die("Unable to open file!");
fwrite($JSoutput, $myJS );
fclose($JSoutput);





Nog niet getest, maar denk dat het zou moeten werken.
Een beetje whitespace weghalen is niet hetzelfde als minifyen, dat heb je door?
Heb je daardoor ook door dat je letterlijk *bytes* zal winnen hiermee? Zie de opmerking van Vincent hierover. Je maakt je site alleen maar trager hiermee.

EDIT:
Zo te zien is dit overigens voor HTML bedoeld, op JS zal het niets uithalen.

Reageren