[oop] object cachen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Back-end Developer

Cube in Twente is op zoek naar een Back-end Developer Medior / Senior Functie omschrijving Als Back-end Developer bouw je met jouw kennis de beste oplossingen voor de vragen van onze klanten en kun je goed onderbouwen waarom nu juist déze techniek het beste aansluit bij zijn wensen. Daarnaast sta je ervoor open je kennis te delen met je collega developers. Op deze manier haal jij het maximale uit de samenwerking met de klant en til jij je collega’s naar een hoger niveau. We zijn gegroeid door focus te houden op het plezier van het team en op de details

Bekijk vacature »

Full Stack Java Developer

Functieomschrijving Met jouw expertise zorg je als java developer voor de meest plezierige en efficiënte klant ervaring. Met jouw state-of-the-art-systemen verbeter je onze business en maak je echt impact! Want als je in ons tech team werkt, houd je jezelf en Nederland in beweging. Wij zijn continu bezig onze business en processen te optimaliseren, zodat we onze klanten en kandidaten meer gemak, snelheid en transparantie kunnen bieden. Impactvolle tech, daar doen we het voor. Artificial intelligence, machine learning en innovatieve zoek oplossingen. Zoek oplossingen? Yes! Solliciteren moet makkelijk en leuk zijn. Toch? Daar kan jij aan bijdragen! wat ga je

Bekijk vacature »

Full Stack Java Developer (IT Consultant) - Bankin

Do you have passion for technology and innovation? Are you ready to create innovative solutions to give the financial sector a solid lead in the digital world? Your day to day activities As Full stack Java Developer you will be part of the DevOps team. With a multidisciplinary team you will - in an Agile way - be working on building new functionalities and maintaining existing features. It covers both development and operations; helping to organize the continuous delivery pipeline, connecting to back end systems, performing automated tests and shaping the front end. The high-quality solutions you deliver result in

Bekijk vacature »

.NET Developer

Jouw baan Het draait om vernieuwing en verbetering: Jouw gave IT oplossingen worden VWE breed door alle andere teams ingezet. Jij hebt dan ook een belangrijke bijdrage aan de efficiency, consistentie en eenduidigheid binnen de IT programmatuur. Hiervoor werk je met de nieuwste technieken. Onze flinke equipe ervaren IT developers is verdeeld over verschillende zelfsturende teams. Jouw plek is binnen het team dat zich richt op de ontwikkeling van programmatuur ter ondersteuning van andere ontwikkelteams. Jij bent een van de kartrekkers die bestaande programmatuur in een nieuwe jas steekt, weet waar de behoeftes in de verschillende teams liggen en waar

Bekijk vacature »

Medior/Senior Backend PHP developer - €3500 -

Bedrijfsomschrijving Voor een scale-up organisatie zijn wij op zoek naar een Medior/Senior Backend PHP developer. Ze bestaan inmiddels 5 jaar en ze maken complexe applicaties voor de B2B markt. Denk hierbij aan websites en webapplicaties voor diverse klanten in verschillende branches. Het team bestaat uit 15 gepassioneerde medewerkers. Vanwege het succes willen ze de groei die ze de afgelopen jaren hebben doorgemaakt verder uitbreiden en daar kan jij een onderdeel van gaan worden. Door de complexiteit van de applicaties zoeken ze naar meerdere developers vanaf Medior niveau. De cultuur en sfeer binnen het bedrijf is laagdrempelig en lekker informeel. Functieomschrijving

Bekijk vacature »

PHP Developer / Drupal / Symfony / API's

Bedrijfsomschrijving Voor onze klant, een vooruitstrevend en informeel bedrijf in het zuiden des lands, zoeken wij een ervaren PHP Developer. Het bedrijf, dat bestaat uit zo'n 25 mensen, maakt slimme online oplossingen voor diverse klanten in de regio maar ook internationaal. Voor grote hoeveelheden data gebruiken ze een Drupal gebaseerd platform en hieraan wordt ontwikkeld met PHP, Symfony en Javascript. Ook werk je aan koppelingen met andere applicaties via API's. Er lopen diverse toffe projecten waar je als ervaren ontwikkelaar aan bij kan dragen, zo loopt er momenteel een internationaal project waarin data vanuit een grote telescoop wordt gecentraliseerd in

Bekijk vacature »

Sogyo zoekt medior software developer

Sogyo zoekt software engineers die klaar zijn voor de volgende stap! Heb jij de eerste stappen in je IT carrière gezet en ben je op zoek naar verdieping en verbreding van jouw kennis en vaardigheden in software engineering, lees dan verder! Sogyo biedt jou een traject waarin jouw ontwikkeling als software engineer centraal staat. Je start met een opleiding van 2 à 3 maanden op maat gemaakt naar jouw niveau en wensen. Belangrijk hierin is de combinatie van concepten, frameworks en tooling. De onderwerpen komen aan bod middels workshops, lectures, individuele opdrachten en een eindproject. Je krijgt een begeleider toegewezen

Bekijk vacature »

.NET Developer

Bedrijfsomschrijving Onze relatie is momenteel op zoek naar een .Net ontwikkelaar in de regio Tiel. De organisatie is actief in de machinebouw met de focus op machines die bijdragen aan goede hygiëne. Wereldwijd zorgen de systemen van de organisatie ervoor dat de gebruikers van de machines zich hygiënisch voelen in hun werkzaamheden. Onze relatie ontwikkelt, produceert en onderhoud de machines zelf, wereldwijd. De machines maken gebruik van verschillende technieken, waaronder bijvoorbeeld RFID technieken. De organisatie heeft alles zelf in beheer, van sales en customer support tot service en installatie. Als .Net developer kom je te werken in het software ontwikkel

Bekijk vacature »

IT Engineer

Dümmen Orange is the world’s largest breeder and propagator of cut flowers, bulbs, tropical plants, pot plants, bedding plants and perennials. For our IS (Information Services) department in De Lier, we are looking for an IT Engineer. Job objective Our organization grows and flourishes. This results in a fast-changing and, therefore, challenging environment. Our IS department is responsible for all IT systems within Dümmen Orange: their management, implementation and use. An important department within our growing and international organization. As an IT Engineer you have the primary objective to enable the network, servers and other infrastructure elements to achieve the

Bekijk vacature »

GE Smallworld Ontwikkelaar - Utilities

Wij zoeken een Geo-ICT Smallworld ontwikkelaar met interesse in de nieuwste ontwikkelingen in de Energiemarkt! Wat ga je doen? Wist je dat CGI het grootste bedrijf is met een eigen Geo-ICT community? Dat we ook in verschillende landen waaronder Nederland de koploper zijn op het gebied van Geo-ICT dienstverlening? We breiden onze Geo-ICT activiteiten nog steeds verder uit. Zo zijn wij ons vooral aan het richten op de nieuwste ontwikkelingen in de energiemarkt en de daarbij horende energietransitie. Het CO2 neutraal maken van de samenleving is onze doelstelling en jij kan daar een actieve bijdrage aan leveren! Onze Geo-ICT practise

Bekijk vacature »

Front-end developer

Ben jij een front-end developer met feeling voor design en animaties? Wil je werken met moderne tools en ben jij ervaren met SCSS/SASS? Wil jij samenwerken met onze backenders en onze UX / visual designers om toffe cases en de nieuwste technieken inzetten voor onze klanten? 24 - 40 uur Samenwerken met designers en developers Zelfstudie budget Tijd voor nette code Certificaten halen Marktconform salaris incl moderne pensioenregeling en bonus Jouw functie als front-end developer Je gaat bij ons werken aan maatwerk (web)applicaties voor verschillende opdrachtgevers, complexe websites in Drupal CMS en soms een eenvoudige website in Wordpress. Dat doe

Bekijk vacature »

.NET Developer Azure

Bedrijfsomschrijving Voor een goede relatie van ons in de regio Tilburg zijn wij op zoek naar een ervaren .NET Developer. De organisatie is verantwoordelijk voor de ontwikkeling van een groot aantal portalen die onmisbaar zijn in de Nederlandse zorgsector. De systemen worden gebruikt door zorgverzekeraars, zorgverleners en tal van andere partijen. Gezien de omvang, maar ook het aantal van portalen die deze organisatie op haar naam heeft staan, zijn inmiddels 9 Scrum teams verantwoordelijk voor de doorontwikkeling en het van scratch af aan opbouwen van nieuwe functionaliteiten. De teams bestaan uit meerdere ontwikkelaars, een tester, een informatie analist en een

Bekijk vacature »

ETL Ontwikkelaar / Data Engineer BI - Public Trans

Ben jij een ervaren ETL ontwikkelaar / Data Engineer BI en wil jij zorgen dat onze klanten in de transportsector waarde kunnen halen uit data en de business kunnen voorzien van hoogwaardige informatieproducten, van dashboards tot complexe voorspelmodellen? Zoek jij een nieuwe uitdaging en een omgeving waar vrijheid, teamspirit en ondernemerschap onderdeel zijn van het DNA? Dan nodigen wij jou uit om verder te lezen! Wat ga je doen? CGI zoekt een ervaren en communicatief sterke ETL ontwikkelaar / Data Engineer BI die in een autonoom agile team kan werken middels de scrummethodiek en zich bezig gaat houden met het

Bekijk vacature »

GIS Ontwikkelaar - Utilities

Bij onze klanten vormen Geographical Information Systems (GIS) de basis van het Asset Data Management van de toekomst. Zie jij het als een uitdaging om als onderdeel van een DevOps team de systemen van onze klanten te helpen vormgeven en continu te verbeteren? Wat ga je doen? Ons team bestaat uit GEO/GIS specialisten en wij spelen een belangrijke rol op het gebied van GIS ontwikkelingen bij onze klanten. Binnen onze organisatie hebben wij een grote GEO-ICT practice waarmee we in staat zijn om een fundamenteel deel van de assets basisregistratie voor onze klanten vorm te geven. Dat doen we door

Bekijk vacature »

Junior PHP Developer

Je maakt een vliegende start van je carrière door meteen mee te bouwen aan dingen zoals een optimaal werkende website aan de hand van je PHP kennis. Wat doe je als Junior PHP Developer bij Coolblue? Als Junior PHP Developer ben je meteen vanaf de start onderdeel van een development team. Je kijkt veel mee met collega’s en volgt trainingen om te groeien als Junior Developer. Op dat moment komt je wil om steeds te blijven leren naar boven. Daarnaast pak je in de sprints ook je eigen stories op om Coolblue iedere dag een beetje beter te kunnen maken.

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

13/05/2021 13:30:14
 
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.