[oop] object cachen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.Net Ontwikkelaar

Dit ga je doen Het ontwerpen en ontwikkelen van software voor klanten; Het bijdragen van kennis en ervaring; Het integreren van van de software en afstemmen met klanten; Het functioneel testen van de ontwikkelde software. Hier ga je werken Voor onze relatie zijn wij momenteel op zoek naar een .Net Developer die wilt werken aan software die draait op machines wereldwijd. De organisatie produceert software voor applicaties die gebruikt worden in verschillende branches. De software wordt geleverd aan fabrikanten van verschillende robotica en machines. Als .Net ontwikkelaar ben je intern onderdeel van het team wat de applicatie omgevingen ontwikkeld en

Bekijk vacature »

Fasttrack learning & development voor Java dev

Wat je gaat doen: Wij zoeken enthousiaste en ambitieuze junior en medior ontwikkelaars die toe zijn aan de volgende stap in hun carrière. Wij helpen je op je pad naar senior ontwikkelaar door ons fasttrack learning en development programma. Na een kort en intensief programma ga jij aan de slag bij klanten van DPA. Daarnaast krijg je veel ruimte om je te ontwikkelen als persoon en als specialist. De eerste maand gaan we aan de slag om je certificeringen te behalen waaronder OCP (Oracle Certified Professional). Daarnaast nemen we een deepdive in Spring Boot. Ook laten we je kennismaken met

Bekijk vacature »

Database developer - SQL

Functie omschrijving Kan jij goed overweg met complexe algoritmes en het schrijven van procedures in T-SQL? Heb jij al wat ervaring opgedaan met SQL en vind je het tijd voor de volgende stap? Lees dan snel verder! Dit software bedrijf, gespecialiseerd in de ontwikkeling van logistieke software, is op zoek naar een ervaren SQL database developer. Jouw werkzaamheden zullen onder andere bestaan uit: Je sluit aan bij meetings en brengt het gehele logistieke proces in kaart. Vervolgens ga je als lead developer aan de slag om de klus te klaren. Je stuurt het junior developer team en helpt, zo nodig,

Bekijk vacature »

Ervaren PHP developer gezocht!

Functie Het team bestaat inmiddels uit zo’n 25 collega’s met specialisten op het gebied van development, data(analyse), marketing, infrastructuur en finance. Ze hebben een supermodern pand en bieden hiernaast veel vrijheid en verantwoordelijkheid. Ze doen er alles aan om jou op te gemak te stellen. Zo kun je je eigen werkplek inrichten naar persoonlijke wensen, maar gaan ze bijvoorbeeld ook jaarlijks met elkaar wintersporten en zijn er andere leuke uitjes. Als onderdeel van één van de scrumteams ga je aan de slag, samen ben je medeverantwoordelijk voor het doorontwikkelen van hun business applicatie waar het traffic team dagelijks mee werkt.

Bekijk vacature »

Junior Java Developer

Dit ga je doen Full stack web- en appdevelopment; Vertalen van de functionele wensen naar de technische specificaties; Sturing geven aan/klank board zijn voor de software teams; Trainen van de software teams; Sparren met klanten; Meedenken over architectuur. Hier ga je werken De organisatie is een bureau welke websites en mobiele applicaties bouwt voor verschillende toonaangevende organisaties. Hierbij richten zij zich voornamelijk op de sectoren leisure, overheid en zorg. De sfeer intern kenmerkt zich door informaliteit, gezelligheid en ambitie. Ze werken dag in dag uit samen om mooie producten op te leveren voor hun klanten. Op dit moment zijn er

Bekijk vacature »

Full stack developer Node.js, React Remote

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

Bekijk vacature »

Medior .NET developer

Functie Jij gaat als Medior .NET ontwikkelaar aan de slag in ons scrumteam met 6 developers die gepassioneerd en actief bezig zijn om onze spelers kwalitatieve en mooie spelervaringen aan te bieden. Als medior .NET developer ga jij werken aan een technisch hoogwaardig platform welke bezoekerspieken verwerkt van tienduizenden tot honderdduizenden gebruikers per minuut! Ons scrumteam werkt in drie wekelijkse sprints en wij beginnen iedere ochtend met een stand-up. Jij werkt bij ons met C# .NET, .NET Core, React.JS, Xamarin, Azure, Docker en Kubernetes. Wij hechten enorm veel waarde aan het leveren van hoogwaardige en kwalitatieve code. Zodra jij de

Bekijk vacature »

Medior .NET Ontwikkelaar

In het kort Als .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan we deze uitdaging graag met

Bekijk vacature »

Als Front-end developer werken aan apps voor het o

Functie Als Front-end developer werk je intensief samen met 1 van de UX-designers en denk je mee over de gebruiksvriendelijkheid en design van onze web- en mobile apps. Je bent betrokken bij sessies met gebruikers om designs te valideren en usability van de app-in-wording te testen. Vervolgens gebruik je dit om samen met je team waarin ook back-end (.NET) developers zitten, te zorgen voor de realisatie van de best mogelijke apps voor studenten en docenten. Eisen • Je hebt een hands-on development en coding mind-set en werkt graag aan een high quality code base welke je consequent onderhouden kan worden

Bekijk vacature »

Java developer

Functie Je gaat aan de slag als Tester voor een aantal mooie projecten. Je komt terecht in een DevOps team waar jij aan de slag gaat om de kwaliteit te waarborgen omtrent de maatwerk software voor de klanten. Je draait je hand er niet voor om de adviserende rol te bekleden op het gebied van testautomatisering en het opzetten van testframeworks. Zoals aangegeven ga je daadwerkelijk in het eigen team aan de slag en is het daarnaast ook gebruikelijk bij de klanten op locatie te komen om te werken aan de opdrachten. Je krijgt zodoende echt een mooie kijk in

Bekijk vacature »

Senior Developer Betty Blocks Blauwe Haven Rotterd

Functieomschrijving Voor de Politie zijn wij opzoek naar een Senior Developer Betty Blocks Blauwe Haven Rotterdam. De politieorganisatie heeft jaarlijks te maken met een aanzienlijk aantal politiemedewerkers die vanwege mentale overbelasting niet of beperkt inzetbaar zijn. De Blauwe Haven Rotterdam ondersteunt deze politiemedewerkers in hun herstel en re-integratieproces. De huidige digitale systemen van de Politie bieden onvoldoende ondersteuning in het herstel- en re-integratieproces van politiemedewerkers. Zowel voor de politiemedewerkers als voor de organisatie. Politiemedewerkers worden buitengesloten, waardoor zij eigen regie verliezen. Begeleiders kunnen de voortgang van de medewerkers niet goed monitoren. Management beschikt niet over de mogelijkheid trends te signaleren

Bekijk vacature »

Java developer

Als Java Developer bij Sogeti ben je onderdeel van onze toonaangevende community die bestaat uit ruim 100 gepassioneerde professionals. In teamverband lever je mooie prestaties. Daarmee draag je aan bij de meerwaarde die wij leveren aan onze klanten. Geen werkdag is hetzelfde, je bent voortdurend bezig met het oplossen van allerlei complexe vraagstukken binnen bedrijfskritische systemen. Een voorbeeld hiervan is een cliënt-volgsysteem bij Reclassering Nederland. Andere klanten waar wij onder andere voor werken: KPN, Philips, Nationale-Nederlanden, Kamer van Koophandel, ABN AMRO, Bovemij, Arval en de Politie. Werken bij Sogeti Nieuwe ontwikkelingen volgen we op de voet en delen we binnen de

Bekijk vacature »

Java Developer

Functieomschrijving Are you an experienced Java Developer who wants to be challenged? Then this is your job! As a Java Developer, you are co-responsible for building custom applications within our extensive IT landscape. Development takes place on both the back-end side (Spring/JEE). Together with the IT department, you are responsible for the daily adjustments and expansions of our IT systems. In addition, you will work in small scrum teams using the Agile methodologies. Besides the realization of our in-house systems, you are responsible for the roll-out of the application (version) as well as the operational support after going live. Team

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

Senior Front-end Developer

Dit ga je doen Met behulp van diverse programmeertalen ontwikkelen van Front-end software; Het begeleiden van het front-end team; Het oplossen van incidenten; Het bijhouden van een backlog; Je hebt een actieve bijdrage in de wekelijkse overleggen met de omliggende teams; Je houdt trends bij en adviseert het management hierover waar nodig; Helder communiceren met de stakeholders om hen zo mee te nemen in projecten en laten inzien wat de duur en toegevoegde waarde van bepaalde projecten is. Hier ga je werken Deze organisatie heeft circa 40 miljoen bezoekers per maand en heeft innovatie hoog in het vaandel staan. Het

Bekijk vacature »
Ozzie PHP

Ozzie PHP

20/04/2013 16:07:31
Quote Anchor link
Hallo mensen,

Stel we hebben een object (bijv. een service container) en bij ieder request moet dat gevuld worden met dezelfde initiële data. Schematisch krijg je dan zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$config_file
= yaml_parse_file('/pad/naar/configbestand.yml');
$container = new Container();
$container->loadArgs($config_file['args']);
$container->loadServ($config_file['serv']);
?>

Is het nu mogelijk om als deze handelingen zijn gedaan het object te cachen in een cache bestand? En als dan de volgende keer de pagina wordt aangeroepen er gekeken wordt of er een cache bestand aanwezig is, en zo ja dan gebruik ik de gecachete versie en hoeven alle bovengenoemde stappen niet meer te worden uitgevoerd?

Kan dat, en zo ja hoe?
Gewijzigd op 20/04/2013 16:09:44 door Ozzie PHP
 
PHP hulp

PHP hulp

23/04/2024 20:18:00
 
Jan Koehoorn

Jan Koehoorn

20/04/2013 16:35:58
Quote Anchor link
Je zou memcached kunnen overwegen.
 
Ozzie PHP

Ozzie PHP

20/04/2013 16:45:21
Quote Anchor link
Nou, ik wil eigenlijk gewoon zelf iets maken. Maar de vraag is eigenlijk het mogelijk is wat ik wil.
 
Wouter J

Wouter J

20/04/2013 17:08:13
Quote Anchor link
Meerdere mogelijkheden:
1) Gebruik gewoon serialize en deserialize
2) Maak __sleep en __wakeup methods of gebruik de serializable interface. Hiermee hoef je dus niet de hele class te cachen, maar alleen de variabele data (bijv. de property die alle services en parameters vasthoudt)
3) Gebruik een library als JmsSerializer. Op die manier kun je heel goed bepalen wat je wel en niet gaat serializen, op welke manier en in welke taal (yaml, xml, json, ect.)
 
Ozzie PHP

Ozzie PHP

20/04/2013 17:16:01
Quote Anchor link
Hoi Wouter,

Thanks voor je reactie.

Mijn voorkeur gaat dan uit naar optie 1 of 2. Slaat optie 1 ook alle properties op? En kun je dan gewoon zeggen:

$container = unserialize(file_get_contents('/pad/naar/gecachteversie'));

Wat bedoel je bij optie 2 met "Hiermee hoef je dus niet de hele class te cachen..."?
Bedoel je dat bij optie 1 ook alle methods worden gecachet? In dat geval is optie 2 wellicht handiger en dat ik dan alleen de properties cache... heb je wellicht een heel simpel voorbeeldje voor me hoe optie 2 in z'n werk gaat? De bedoeling is dus dat ik niet telkens alle configuratie hoef in te lezen en te setten, maar dat ik direct een gecachet object terugkrijg. Ik hoop dat het een beetje duidelijk is wat ik bedoel.
 
Wouter J

Wouter J

20/04/2013 17:31:13
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
class Container implements \Serializable
{
    private $services;
    private $parameters;

    public function set($id, $factory)
    { ... }


    public function get($id)
    { ... }


    // ...

    public function serialize()
    {

        return serialize(array(
            'services'   => $this->services,
            'parameters' => $this->parameters,
        ));
    }


    public function unserialize($data)
    {

        $data = unserialize($data);

        $this->services = $data['services'];
        $this->parameters = $data['parameters'];
    }
}


// first time
$container = new Container();
// ... configure the container

file_set_contents(__DIR__.'/cache/di/container.php.inc', serialize($container));

// next time
$container = unserialize(file_get_contents(__DIR__.'/cache/di/container.php.inc'));
?>


Nu is dit nog lekker simpel, mocht je wat complexere klassen krijgen wordt JmsSerializer erg interessant.
Gewijzigd op 20/04/2013 17:32:08 door Wouter J
 
Ozzie PHP

Ozzie PHP

20/04/2013 17:39:50
Quote Anchor link
Thanks Wouter, ziet er goed uit :-)

De methods serialize en unserialize horen die bij Serializable?

Nu heb jij hier een serialize en unserialize method gebruikt, maar wat gebeurt er als je die niet gebruikt? Wat is het verschil als je die 2 methods zou weglaten? Dus op deze manier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
class Container
{
    private $services;
    private $parameters;

    public function set($id, $factory)
    { ... }


    public function get($id)
    { ... }


    // ...

}

// first time
$container = new Container();
// ... configure the container

file_set_contents(__DIR__.'/cache/di/container.php.inc', serialize($container));

// next time
$container = unserialize(file_get_contents(__DIR__.'/cache/di/container.php.inc'));
?>


Offtopic:

Waarom gebruik je als extensie .php.inc ?
 
Wouter J

Wouter J

24/04/2013 19:12:03
Quote Anchor link
Quote:
De methods serialize en unserialize horen die bij Serializable?

Jep

Quote:
Nu heb jij hier een serialize en unserialize method gebruikt, maar wat gebeurt er als je die niet gebruikt? Wat is het verschil als je die 2 methods zou weglaten?

Ga ik een heel gemeen antwoord op geven: Test het eens zelf. Ik zou het echt niet weten. Ik heb zo mijn gevoelens dat de Serializable methods niet voor niks bestaan en dus waarschijnlijk ruimte beperken, maar ik zou het niet durven zeggen.

Quote:
Waarom gebruik je als extensie .php.inc ?

Ik moest even snel een extensie bedenken. php.inc gebruik ik altijd als het een 'niet echt' PHP bestand is. Bijv. een autoload.php.inc bestand waarin alle klassen staan.
 
Ozzie PHP

Ozzie PHP

24/04/2013 20:25:01
Quote Anchor link
Wouter J op 24/04/2013 19:12:03:
Ga ik een heel gemeen antwoord op geven: Test het eens zelf. Ik zou het echt niet weten. Ik heb zo mijn gevoelens dat de Serializable methods niet voor niks bestaan en dus waarschijnlijk ruimte beperken, maar ik zou het niet durven zeggen.

Ik ben inmiddels zover dat ik het daadwerkelijk heb kunnen testen. Die methods heb je niet nodig tenzij je iets specifieks wilt doen op het moment dat het object wordt geserialized of geunserialized. Als je de methods niet gebruikt werkt het prima :)
 
Wouter J

Wouter J

24/04/2013 22:28:57
Quote Anchor link
In toch zit er een verschil in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
C:9:"Container":91:{a:2:{s:8:"services";a:1:{s:3:"foo";s:3:"bar";}s:10:"parameters";a:1:{s:3:"baz";s:3:"bar";}}}
O:9:"Container":2:{s:19:"Containerservices";a:1:{s:3:"foo";s:3:"bar";}s:21:"Containerparameters";a:1:{s:3:"baz";s:3:"bar";}}

Eerste is met Serializable, 2e zonder. Je ziet dat de 1e alleen een array serialized en de 2e het hele object. De eerste is kleiner, wat bij het cachen van veel klassen dus echt een verschil gaat uitmaken.
 
Ozzie PHP

Ozzie PHP

24/04/2013 22:34:29
Quote Anchor link
Wouter, thanks. Ik zie alleen niet echt (veel) verschil, behalve dat de 2e langer is omdat daar ipv services en parameters Containerservices en Containerparameters staat. Kun je eens uitleggen wat je bedoelt, want ik denk dat ik ergens overheen aan het kijken ben.
 
Wouter J

Wouter J

25/04/2013 15:50:03
Quote Anchor link
Het eerste verschil zit hem al in de eerste letter, de letter die het type aangeeft. In het eerste geval is dit een C (class) en in het 2e geval is dit een O (object).
Dat betekend dus dat de 2e een instance vasthoud en de 1e alleen maar een classname.

Dan gaan we verder en krijgen we de lengte van de classname en de classname zelf. Vervolgens krijgen we de properties. Hierin zien we dat in het 1e geval een array met 2 elementen± services en parameters wordt opgeslagen. In het 2e geval worden er 4 dingen op geslagen: een string met de property naam en zijn value en dat 2 keer.

In het kort komt het er dus op neer dat het 2e geval de hele klasse opslaat en het 1e geval alleen enkele belangrijke gegevens (welke belangrijk zijn bepaal je in de serialize method).

Denk nu bijv. aan een Container klasse die ook shared services ondersteund (en dat is elke Container klasse). Die wil je niet cachen. Dan krijgen we een probleem met de 2e methode, omdat we dan alles opslaan, dus ook deze shared services. In het 1e geval kunnen we deze gewoon uitsluiten van het serializen.
 
Ozzie PHP

Ozzie PHP

25/04/2013 16:44:27
Quote Anchor link
Hmmm, oké... ik snap ongeveer wat je bedoelt, maar in de situatie zoals die bij mij is, vind ik de 2e situatie juist wel handig. Maar ik kan me nu voorstellen dat in bepaalde situaties de 1e optie inderdaad handiger is. Thanks.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.