FabricationExcelBook :: save ()atomique est facile à décrire. Écrivez le classeur dans un fichier temporaire, puis renommez-le. Une sauvegarde qui meurt à mi-chemin laisse le fichier original intact.
La manière évidente de créer ce fichier intermédiaire est de demander à LibXL l'archive terminée sous forme de tampon et d'écrire le tampon. Ça marche. Cela coûte également 67,7 Mo de RSS maximum sur un classeur de 3,3 Mo, et la copie côté PHP compte pourlimite_mémoire. Le rédacteur de streaming php_excel utilisé avant le travail de préparation coûte 0,7 Mo pour le même fichier. Cela représente environ vingt fois la taille du classeur en RAM, dépensée par un changement dont le seul objectif était la sécurité.
Celui-ci est arrivé et a été corrigé dans la même fenêtre de publication, donc aucune version publiée ne le contient. Cela reste un bon résumé des deux dernières semaines. Neuf de mes extensions PHP publiées aujourd'hui. Entre eux, ils ajoutent une nouvelle méthode, un ensemble d’interfaces et quelques constantes d’erreur. Tout le reste est un bug corrigé, une valeur rejetée, une limite appliquée ou un coût remboursé.
Le tour d’horizon précédent s’est terminé sur l’affirmation selon laquelle la plupart des travaux dans ces extensions sont peu glamour. Ce cycle est ce qui vient après cette réclamation, et il est accompagné d'une facture. Vérifier quelque chose sur chaque ligne coûte quelque chose sur chaque ligne. La mise en scène d’une écriture coûte de la mémoire. La validation d'un wrapper au coût de construction du temps de construction. La plupart des travaux de performance ci-dessous consistent en une réparation plutôt qu'une nouvelle optimisation : trouver où les contrôles de sécurité sont devenus coûteux et les rendre à nouveau bon marché.
2.5.0 a étendu la sauvegarde atomique des wrappers de flux aux chemins locaux simples, puis a restauré l'enregistreur de streaming en dessous. Les sauvegardes locales sont désormais avancéesxlBookSavedans un fichier temporaire frère créé exclusivement et renommez-le en place, afin que l'atomicité soit maintenue et que le coût de la mémoire ne le soit pas. Le gain de temps reste inchangé. Le fichier intermédiaire contient également les bits d'autorisation existants de la destination, remplaçant ainsi un0600le classeur ne l'élargit plus à0644.
L'atomicité sur les chemins locaux modifie trois comportements qu'il convient de connaître avant de procéder à la mise à niveau. Une destination de lien symbolique est remplacée par un fichier normal au lieu d'être écrite. Un lien physique existant est rompu. L'enregistrement dans un fichier inscriptible dans un répertoire non inscriptible échoue désormais au lieu de réussir, car le changement de nom nécessite le répertoire.
Les écritures dactylographiées ont cessé de mentir. Un type de données explicite que la valeur ne peut pas satisfaire est désormais rejeté plutôt que stocké silencieusement comme autre chose.
// 2.4.0 : stocke la chaîne sous forme de texte. 2.5.0 : rejette et nomme la cellule où il s'est arrêté. $sheet->write(0, 0, 'pas une date', null, ExcelFormat::AS_DATE);nulécrit toujours une cellule vide sous n'importe quel type de données, donc en masseécrireRow()etécrireCol()les appels sur une colonne tapée avec des espaces continuent de fonctionner.
2.6.0, c'est deux lignes en plus, et une est en panne.ExcelFormat :: borderDiagonalStyle ()a été câblé dans la direction diagonale plutôt que dans le style de ligne pour lequel il porte son nom. Il aborde désormais le style, et le nouveauExcelFormat :: borderDiagonal ()obtient et définit quelles diagonales sont dessinées. Code passant unBORDERDIAGONAL_*constante de l'ancienne méthode continue de fonctionner sans erreu...
[Courte citation de 8% de l'article original]